Upload Tizen2.0 source 2.0alpha master 2.0_alpha submit/master/20120920.151049
authorDongyeon Kim <dy5.kim@samsung.com>
Wed, 22 Aug 2012 11:28:58 +0000 (20:28 +0900)
committerDongyeon Kim <dy5.kim@samsung.com>
Wed, 22 Aug 2012 11:28:58 +0000 (20:28 +0900)
4047 files changed:
Makefile.am
Makefile.in [new file with mode: 0644]
Makefile.win32
NEWS
README
TC/_export_env.sh [new file with mode: 0755]
TC/_export_target_env.sh [new file with mode: 0755]
TC/build.sh [new file with mode: 0755]
TC/clean.sh [new file with mode: 0755]
TC/config [new file with mode: 0755]
TC/execute.sh [new file with mode: 0755]
TC/perf/Makefile [new file with mode: 0644]
TC/perf/common.c [new file with mode: 0755]
TC/perf/common.h [new file with mode: 0755]
TC/perf/fill [new file with mode: 0755]
TC/perf/fill.c [new file with mode: 0755]
TC/perf/image [new file with mode: 0755]
TC/perf/image.c [new file with mode: 0755]
TC/perf/image1.png [new file with mode: 0755]
TC/perf/image2.png [new file with mode: 0755]
TC/perf/main.c [new file with mode: 0755]
TC/perf/stroke [new file with mode: 0755]
TC/perf/stroke.c [new file with mode: 0755]
TC/testcase/Makefile [new file with mode: 0755]
TC/testcase/cairo-test.h [new file with mode: 0644]
TC/testcase/tslist [new file with mode: 0644]
TC/testcase/utc_a1_bug_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_bug_image.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_fill_equal_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_fill_equal_image.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_fill_image.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_fill_rule_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_fill_rule_image.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_paint_image.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_clip_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_a1_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_fill_image.c [new file with mode: 0644]
TC/testcase/utc_a1_image_sample_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_image_sample_image.c [new file with mode: 0644]
TC/testcase/utc_a1_line_width_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_line_width_image.c [new file with mode: 0644]
TC/testcase/utc_a1_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_mask_image.c [new file with mode: 0644]
TC/testcase/utc_a1_mask_sample_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_mask_sample_image.c [new file with mode: 0644]
TC/testcase/utc_a1_rasterisation_rectangles_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_rasterisation_rectangles_image.c [new file with mode: 0644]
TC/testcase/utc_a1_rasterisation_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_rasterisation_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_a1_rectilinear_grid_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_rectilinear_grid_image.c [new file with mode: 0644]
TC/testcase/utc_a1_sample_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_sample_image.c [new file with mode: 0644]
TC/testcase/utc_a1_tiger_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_tiger_image.c [new file with mode: 0644]
TC/testcase/utc_a1_traps_sample_gl.c [new file with mode: 0644]
TC/testcase/utc_a1_traps_sample_image.c [new file with mode: 0644]
TC/testcase/utc_a8_clear_gl.c [new file with mode: 0644]
TC/testcase/utc_a8_clear_image.c [new file with mode: 0644]
TC/testcase/utc_a8_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_a8_mask_image.c [new file with mode: 0644]
TC/testcase/utc_aliasing_gl.c [new file with mode: 0644]
TC/testcase/utc_aliasing_image.c [new file with mode: 0644]
TC/testcase/utc_alpha_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_alpha_similar_image.c [new file with mode: 0644]
TC/testcase/utc_api_special_cases_gl.c [new file with mode: 0644]
TC/testcase/utc_api_special_cases_image.c [new file with mode: 0644]
TC/testcase/utc_arc_direction_gl.c [new file with mode: 0644]
TC/testcase/utc_arc_direction_image.c [new file with mode: 0644]
TC/testcase/utc_arc_infinite_loop_gl.c [new file with mode: 0644]
TC/testcase/utc_arc_infinite_loop_image.c [new file with mode: 0644]
TC/testcase/utc_arc_looping_dash_gl.c [new file with mode: 0644]
TC/testcase/utc_arc_looping_dash_image.c [new file with mode: 0644]
TC/testcase/utc_big_empty_box_gl.c [new file with mode: 0644]
TC/testcase/utc_big_empty_box_image.c [new file with mode: 0644]
TC/testcase/utc_big_empty_triangle_gl.c [new file with mode: 0644]
TC/testcase/utc_big_empty_triangle_image.c [new file with mode: 0644]
TC/testcase/utc_big_line_gl.c [new file with mode: 0644]
TC/testcase/utc_big_line_image.c [new file with mode: 0644]
TC/testcase/utc_big_little_box_gl.c [new file with mode: 0644]
TC/testcase/utc_big_little_box_image.c [new file with mode: 0644]
TC/testcase/utc_big_little_triangle_gl.c [new file with mode: 0644]
TC/testcase/utc_big_little_triangle_image.c [new file with mode: 0644]
TC/testcase/utc_big_trap_gl.c [new file with mode: 0644]
TC/testcase/utc_big_trap_image.c [new file with mode: 0644]
TC/testcase/utc_bilevel_image_gl.c [new file with mode: 0644]
TC/testcase/utc_bilevel_image_image.c [new file with mode: 0644]
TC/testcase/utc_bitmap_font_gl.c [new file with mode: 0644]
TC/testcase/utc_bitmap_font_image.c [new file with mode: 0644]
TC/testcase/utc_bug_40410_gl.c [new file with mode: 0644]
TC/testcase/utc_bug_40410_image.c [new file with mode: 0644]
TC/testcase/utc_bug_bo_rectangular_gl.c [new file with mode: 0644]
TC/testcase/utc_bug_bo_rectangular_image.c [new file with mode: 0644]
TC/testcase/utc_bug_bo_ricotz_gl.c [new file with mode: 0644]
TC/testcase/utc_bug_bo_ricotz_image.c [new file with mode: 0644]
TC/testcase/utc_bug_extents_gl.c [new file with mode: 0644]
TC/testcase/utc_bug_extents_image.c [new file with mode: 0644]
TC/testcase/utc_bug_seams_gl.c [new file with mode: 0644]
TC/testcase/utc_bug_seams_image.c [new file with mode: 0644]
TC/testcase/utc_bug_source_cu_gl.c [new file with mode: 0644]
TC/testcase/utc_bug_source_cu_image.c [new file with mode: 0644]
TC/testcase/utc_caps_gl.c [new file with mode: 0644]
TC/testcase/utc_caps_image.c [new file with mode: 0644]
TC/testcase/utc_caps_joins_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_caps_joins_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_caps_joins_curve_gl.c [new file with mode: 0644]
TC/testcase/utc_caps_joins_curve_image.c [new file with mode: 0644]
TC/testcase/utc_caps_joins_gl.c [new file with mode: 0644]
TC/testcase/utc_caps_joins_image.c [new file with mode: 0644]
TC/testcase/utc_caps_sub_paths_gl.c [new file with mode: 0644]
TC/testcase/utc_caps_sub_paths_image.c [new file with mode: 0644]
TC/testcase/utc_caps_tails_curve_gl.c [new file with mode: 0644]
TC/testcase/utc_caps_tails_curve_image.c [new file with mode: 0644]
TC/testcase/utc_checkerboard_gl.c [new file with mode: 0644]
TC/testcase/utc_checkerboard_image.c [new file with mode: 0644]
TC/testcase/utc_clear_gl.c [new file with mode: 0644]
TC/testcase/utc_clear_image.c [new file with mode: 0644]
TC/testcase/utc_clear_source_gl.c [new file with mode: 0644]
TC/testcase/utc_clear_source_image.c [new file with mode: 0644]
TC/testcase/utc_clip_all_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_all_image.c [new file with mode: 0644]
TC/testcase/utc_clip_complex_shape_eo_aa_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_complex_shape_eo_aa_image.c [new file with mode: 0644]
TC/testcase/utc_clip_complex_shape_eo_mono_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_complex_shape_eo_mono_image.c [new file with mode: 0644]
TC/testcase/utc_clip_contexts_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_contexts_image.c [new file with mode: 0644]
TC/testcase/utc_clip_device_offset_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_device_offset_image.c [new file with mode: 0644]
TC/testcase/utc_clip_disjoint_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_disjoint_hatching_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_disjoint_hatching_image.c [new file with mode: 0644]
TC/testcase/utc_clip_disjoint_image.c [new file with mode: 0644]
TC/testcase/utc_clip_double_free_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_double_free_image.c [new file with mode: 0644]
TC/testcase/utc_clip_empty_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_empty_group_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_empty_group_image.c [new file with mode: 0644]
TC/testcase/utc_clip_empty_image.c [new file with mode: 0644]
TC/testcase/utc_clip_empty_save_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_empty_save_image.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_eo_unbounded_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_eo_unbounded_image.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_image.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_no_op_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_no_op_image.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_nz_unbounded_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_nz_unbounded_image.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_rule_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_rule_image.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_rule_pixel_aligned_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_fill_rule_pixel_aligned_image.c [new file with mode: 0644]
TC/testcase/utc_clip_group_shapes_aligned_rectangles_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_group_shapes_aligned_rectangles_image.c [new file with mode: 0644]
TC/testcase/utc_clip_group_shapes_circles_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_group_shapes_circles_image.c [new file with mode: 0644]
TC/testcase/utc_clip_group_shapes_unaligned_rectangles_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_group_shapes_unaligned_rectangles_image.c [new file with mode: 0644]
TC/testcase/utc_clip_image_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_image_image.c [new file with mode: 0644]
TC/testcase/utc_clip_intersect_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_intersect_image.c [new file with mode: 0644]
TC/testcase/utc_clip_mixed_antialias_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_mixed_antialias_image.c [new file with mode: 0644]
TC/testcase/utc_clip_nesting_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_nesting_image.c [new file with mode: 0644]
TC/testcase/utc_clip_operator_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_operator_image.c [new file with mode: 0644]
TC/testcase/utc_clip_polygons_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_polygons_image.c [new file with mode: 0644]
TC/testcase/utc_clip_push_group_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_push_group_image.c [new file with mode: 0644]
TC/testcase/utc_clip_rectilinear_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_rectilinear_image.c [new file with mode: 0644]
TC/testcase/utc_clip_rotate_image_surface_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_rotate_image_surface_paint_image.c [new file with mode: 0644]
TC/testcase/utc_clip_shape_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_shape_image.c [new file with mode: 0644]
TC/testcase/utc_clip_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_clip_stroke_no_op_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_stroke_no_op_image.c [new file with mode: 0644]
TC/testcase/utc_clip_stroke_unbounded_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_stroke_unbounded_image.c [new file with mode: 0644]
TC/testcase/utc_clip_text_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_text_image.c [new file with mode: 0644]
TC/testcase/utc_clip_twice_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_twice_image.c [new file with mode: 0644]
TC/testcase/utc_clip_twice_rectangle_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_twice_rectangle_image.c [new file with mode: 0644]
TC/testcase/utc_clip_unbounded_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_unbounded_image.c [new file with mode: 0644]
TC/testcase/utc_clip_zero_gl.c [new file with mode: 0644]
TC/testcase/utc_clip_zero_image.c [new file with mode: 0644]
TC/testcase/utc_clipped_group_gl.c [new file with mode: 0644]
TC/testcase/utc_clipped_group_image.c [new file with mode: 0644]
TC/testcase/utc_clipped_surface_gl.c [new file with mode: 0644]
TC/testcase/utc_clipped_surface_image.c [new file with mode: 0644]
TC/testcase/utc_clipped_trapezoids_gl.c [new file with mode: 0644]
TC/testcase/utc_clipped_trapezoids_image.c [new file with mode: 0644]
TC/testcase/utc_close_path_current_point_gl.c [new file with mode: 0644]
TC/testcase/utc_close_path_current_point_image.c [new file with mode: 0644]
TC/testcase/utc_close_path_gl.c [new file with mode: 0644]
TC/testcase/utc_close_path_image.c [new file with mode: 0644]
TC/testcase/utc_composite_integer_translate_over_gl.c [new file with mode: 0644]
TC/testcase/utc_composite_integer_translate_over_image.c [new file with mode: 0644]
TC/testcase/utc_composite_integer_translate_over_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_composite_integer_translate_over_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_composite_integer_translate_source_gl.c [new file with mode: 0644]
TC/testcase/utc_composite_integer_translate_source_image.c [new file with mode: 0644]
TC/testcase/utc_copy_disjoint_gl.c [new file with mode: 0644]
TC/testcase/utc_copy_disjoint_image.c [new file with mode: 0644]
TC/testcase/utc_copy_path_gl.c [new file with mode: 0644]
TC/testcase/utc_copy_path_image.c [new file with mode: 0644]
TC/testcase/utc_coverage_column_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_coverage_column_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_coverage_intersecting_quads_gl.c [new file with mode: 0644]
TC/testcase/utc_coverage_intersecting_quads_image.c [new file with mode: 0644]
TC/testcase/utc_coverage_intersecting_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_coverage_intersecting_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_coverage_rectangles_gl.c [new file with mode: 0644]
TC/testcase/utc_coverage_rectangles_image.c [new file with mode: 0644]
TC/testcase/utc_coverage_row_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_coverage_row_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_coverage_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_coverage_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_create_for_stream_gl.c [new file with mode: 0644]
TC/testcase/utc_create_for_stream_image.c [new file with mode: 0644]
TC/testcase/utc_create_from_png_gl.c [new file with mode: 0644]
TC/testcase/utc_create_from_png_image.c [new file with mode: 0644]
TC/testcase/utc_create_from_png_stream_gl.c [new file with mode: 0644]
TC/testcase/utc_create_from_png_stream_image.c [new file with mode: 0644]
TC/testcase/utc_culled_glyphs_gl.c [new file with mode: 0644]
TC/testcase/utc_culled_glyphs_image.c [new file with mode: 0644]
TC/testcase/utc_curve_to_as_line_to_gl.c [new file with mode: 0644]
TC/testcase/utc_curve_to_as_line_to_image.c [new file with mode: 0644]
TC/testcase/utc_dash_caps_joins_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_caps_joins_image.c [new file with mode: 0644]
TC/testcase/utc_dash_curve_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_curve_image.c [new file with mode: 0644]
TC/testcase/utc_dash_infinite_loop_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_infinite_loop_image.c [new file with mode: 0644]
TC/testcase/utc_dash_no_dash_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_no_dash_image.c [new file with mode: 0644]
TC/testcase/utc_dash_offset_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_offset_image.c [new file with mode: 0644]
TC/testcase/utc_dash_offset_negative_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_offset_negative_image.c [new file with mode: 0644]
TC/testcase/utc_dash_scale_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_scale_image.c [new file with mode: 0644]
TC/testcase/utc_dash_state_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_state_image.c [new file with mode: 0644]
TC/testcase/utc_dash_zero_length_gl.c [new file with mode: 0644]
TC/testcase/utc_dash_zero_length_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_arc_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_arc_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_arcs_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_arcs_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_curve_to_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_curve_to_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_dash_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_dash_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_linear_gradient_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_linear_gradient_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_path_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_path_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_pen_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_pen_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_radial_gradient_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_radial_gradient_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_rel_curve_to_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_rel_curve_to_image.c [new file with mode: 0644]
TC/testcase/utc_degenerate_solid_dash_gl.c [new file with mode: 0644]
TC/testcase/utc_degenerate_solid_dash_image.c [new file with mode: 0644]
TC/testcase/utc_device_offset_fractional_gl.c [new file with mode: 0644]
TC/testcase/utc_device_offset_fractional_image.c [new file with mode: 0644]
TC/testcase/utc_device_offset_gl.c [new file with mode: 0644]
TC/testcase/utc_device_offset_image.c [new file with mode: 0644]
TC/testcase/utc_device_offset_positive_gl.c [new file with mode: 0644]
TC/testcase/utc_device_offset_positive_image.c [new file with mode: 0644]
TC/testcase/utc_device_offset_scale_gl.c [new file with mode: 0644]
TC/testcase/utc_device_offset_scale_image.c [new file with mode: 0644]
TC/testcase/utc_drunkard_tails_gl.c [new file with mode: 0644]
TC/testcase/utc_drunkard_tails_image.c [new file with mode: 0644]
TC/testcase/utc_error_setters_gl.c [new file with mode: 0644]
TC/testcase/utc_error_setters_image.c [new file with mode: 0644]
TC/testcase/utc_extend_pad_border_gl.c [new file with mode: 0644]
TC/testcase/utc_extend_pad_border_image.c [new file with mode: 0644]
TC/testcase/utc_extend_pad_gl.c [new file with mode: 0644]
TC/testcase/utc_extend_pad_image.c [new file with mode: 0644]
TC/testcase/utc_extend_pad_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_extend_pad_similar_image.c [new file with mode: 0644]
TC/testcase/utc_extend_reflect_gl.c [new file with mode: 0644]
TC/testcase/utc_extend_reflect_image.c [new file with mode: 0644]
TC/testcase/utc_extend_reflect_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_extend_reflect_similar_image.c [new file with mode: 0644]
TC/testcase/utc_extend_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_extend_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_extend_repeat_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_extend_repeat_similar_image.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_alpha_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_alpha_mask_image.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_gl.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_image.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_mask_image.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_solid_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_solid_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_solid_gl.c [new file with mode: 0644]
TC/testcase/utc_extended_blend_solid_image.c [new file with mode: 0644]
TC/testcase/utc_fallback_gl.c [new file with mode: 0644]
TC/testcase/utc_fallback_image.c [new file with mode: 0644]
TC/testcase/utc_fallback_resolution_gl.c [new file with mode: 0644]
TC/testcase/utc_fallback_resolution_image.c [new file with mode: 0644]
TC/testcase/utc_fill_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_fill_alpha_pattern_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_alpha_pattern_image.c [new file with mode: 0644]
TC/testcase/utc_fill_and_stroke_alpha_add_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_and_stroke_alpha_add_image.c [new file with mode: 0644]
TC/testcase/utc_fill_and_stroke_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_and_stroke_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_fill_and_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_and_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_fill_degenerate_sort_order_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_degenerate_sort_order_image.c [new file with mode: 0644]
TC/testcase/utc_fill_disjoint_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_disjoint_image.c [new file with mode: 0644]
TC/testcase/utc_fill_empty_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_empty_image.c [new file with mode: 0644]
TC/testcase/utc_fill_image_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_image_image.c [new file with mode: 0644]
TC/testcase/utc_fill_missed_stop_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_missed_stop_image.c [new file with mode: 0644]
TC/testcase/utc_fill_rule_gl.c [new file with mode: 0644]
TC/testcase/utc_fill_rule_image.c [new file with mode: 0644]
TC/testcase/utc_filter_bilinear_extents_gl.c [new file with mode: 0644]
TC/testcase/utc_filter_bilinear_extents_image.c [new file with mode: 0644]
TC/testcase/utc_filter_nearest_offset_gl.c [new file with mode: 0644]
TC/testcase/utc_filter_nearest_offset_image.c [new file with mode: 0644]
TC/testcase/utc_filter_nearest_transformed_gl.c [new file with mode: 0644]
TC/testcase/utc_filter_nearest_transformed_image.c [new file with mode: 0644]
TC/testcase/utc_finer_grained_fallbacks_gl.c [new file with mode: 0644]
TC/testcase/utc_finer_grained_fallbacks_image.c [new file with mode: 0644]
TC/testcase/utc_font_face_get_type_gl.c [new file with mode: 0644]
TC/testcase/utc_font_face_get_type_image.c [new file with mode: 0644]
TC/testcase/utc_font_matrix_translation_gl.c [new file with mode: 0644]
TC/testcase/utc_font_matrix_translation_image.c [new file with mode: 0644]
TC/testcase/utc_font_options_gl.c [new file with mode: 0644]
TC/testcase/utc_font_options_image.c [new file with mode: 0644]
TC/testcase/utc_ft_font_create_for_ft_face_gl.c [new file with mode: 0644]
TC/testcase/utc_ft_font_create_for_ft_face_image.c [new file with mode: 0644]
TC/testcase/utc_ft_show_glyphs_positioning_gl.c [new file with mode: 0644]
TC/testcase/utc_ft_show_glyphs_positioning_image.c [new file with mode: 0644]
TC/testcase/utc_ft_show_glyphs_table_gl.c [new file with mode: 0644]
TC/testcase/utc_ft_show_glyphs_table_image.c [new file with mode: 0644]
TC/testcase/utc_ft_text_antialias_none_gl.c [new file with mode: 0644]
TC/testcase/utc_ft_text_antialias_none_image.c [new file with mode: 0644]
TC/testcase/utc_ft_text_vertical_layout_type1_gl.c [new file with mode: 0644]
TC/testcase/utc_ft_text_vertical_layout_type1_image.c [new file with mode: 0644]
TC/testcase/utc_ft_text_vertical_layout_type3_gl.c [new file with mode: 0644]
TC/testcase/utc_ft_text_vertical_layout_type3_image.c [new file with mode: 0644]
TC/testcase/utc_get_and_set_gl.c [new file with mode: 0644]
TC/testcase/utc_get_and_set_image.c [new file with mode: 0644]
TC/testcase/utc_get_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_get_clip_image.c [new file with mode: 0644]
TC/testcase/utc_get_group_target_gl.c [new file with mode: 0644]
TC/testcase/utc_get_group_target_image.c [new file with mode: 0644]
TC/testcase/utc_get_path_extents_gl.c [new file with mode: 0644]
TC/testcase/utc_get_path_extents_image.c [new file with mode: 0644]
TC/testcase/utc_get_xrender_format_gl.c [new file with mode: 0644]
TC/testcase/utc_get_xrender_format_image.c [new file with mode: 0644]
TC/testcase/utc_gl_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_gl_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_glyph_cache_pressure_gl.c [new file with mode: 0644]
TC/testcase/utc_glyph_cache_pressure_image.c [new file with mode: 0644]
TC/testcase/utc_gradient_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_gradient_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_gradient_constant_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_gradient_constant_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_gradient_zero_stops_gl.c [new file with mode: 0644]
TC/testcase/utc_gradient_zero_stops_image.c [new file with mode: 0644]
TC/testcase/utc_gradient_zero_stops_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_gradient_zero_stops_mask_image.c [new file with mode: 0644]
TC/testcase/utc_group_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_group_clip_image.c [new file with mode: 0644]
TC/testcase/utc_group_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_group_paint_image.c [new file with mode: 0644]
TC/testcase/utc_group_state_gl.c [new file with mode: 0644]
TC/testcase/utc_group_state_image.c [new file with mode: 0644]
TC/testcase/utc_group_unaligned_gl.c [new file with mode: 0644]
TC/testcase/utc_group_unaligned_image.c [new file with mode: 0644]
TC/testcase/utc_half_coverage_rectangles_gl.c [new file with mode: 0644]
TC/testcase/utc_half_coverage_rectangles_image.c [new file with mode: 0644]
TC/testcase/utc_half_coverage_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_half_coverage_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_halo_gl.c [new file with mode: 0644]
TC/testcase/utc_halo_image.c [new file with mode: 0644]
TC/testcase/utc_halo_transform_gl.c [new file with mode: 0644]
TC/testcase/utc_halo_transform_image.c [new file with mode: 0644]
TC/testcase/utc_hatchings_gl.c [new file with mode: 0644]
TC/testcase/utc_hatchings_image.c [new file with mode: 0644]
TC/testcase/utc_horizontal_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_horizontal_clip_image.c [new file with mode: 0644]
TC/testcase/utc_huge_linear_gl.c [new file with mode: 0644]
TC/testcase/utc_huge_linear_image.c [new file with mode: 0644]
TC/testcase/utc_huge_radial_gl.c [new file with mode: 0644]
TC/testcase/utc_huge_radial_image.c [new file with mode: 0644]
TC/testcase/utc_image_bug_710072_aligned_gl.c [new file with mode: 0644]
TC/testcase/utc_image_bug_710072_aligned_image.c [new file with mode: 0644]
TC/testcase/utc_image_bug_710072_unaligned_gl.c [new file with mode: 0644]
TC/testcase/utc_image_bug_710072_unaligned_image.c [new file with mode: 0644]
TC/testcase/utc_image_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_image_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_implicit_close_gl.c [new file with mode: 0644]
TC/testcase/utc_implicit_close_image.c [new file with mode: 0644]
TC/testcase/utc_in_fill_empty_trapezoid_gl.c [new file with mode: 0644]
TC/testcase/utc_in_fill_empty_trapezoid_image.c [new file with mode: 0644]
TC/testcase/utc_in_fill_trapezoid_gl.c [new file with mode: 0644]
TC/testcase/utc_in_fill_trapezoid_image.c [new file with mode: 0644]
TC/testcase/utc_infinite_join_gl.c [new file with mode: 0644]
TC/testcase/utc_infinite_join_image.c [new file with mode: 0644]
TC/testcase/utc_invalid_matrix_gl.c [new file with mode: 0644]
TC/testcase/utc_invalid_matrix_image.c [new file with mode: 0644]
TC/testcase/utc_inverse_text_gl.c [new file with mode: 0644]
TC/testcase/utc_inverse_text_image.c [new file with mode: 0644]
TC/testcase/utc_inverted_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_inverted_clip_image.c [new file with mode: 0644]
TC/testcase/utc_joins_gl.c [new file with mode: 0644]
TC/testcase/utc_joins_image.c [new file with mode: 0644]
TC/testcase/utc_joins_loop_gl.c [new file with mode: 0644]
TC/testcase/utc_joins_loop_image.c [new file with mode: 0644]
TC/testcase/utc_joins_retrace_gl.c [new file with mode: 0644]
TC/testcase/utc_joins_retrace_image.c [new file with mode: 0644]
TC/testcase/utc_joins_star_gl.c [new file with mode: 0644]
TC/testcase/utc_joins_star_image.c [new file with mode: 0644]
TC/testcase/utc_large_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_large_clip_image.c [new file with mode: 0644]
TC/testcase/utc_large_font_gl.c [new file with mode: 0644]
TC/testcase/utc_large_font_image.c [new file with mode: 0644]
TC/testcase/utc_large_source_gl.c [new file with mode: 0644]
TC/testcase/utc_large_source_image.c [new file with mode: 0644]
TC/testcase/utc_large_source_roi_gl.c [new file with mode: 0644]
TC/testcase/utc_large_source_roi_image.c [new file with mode: 0644]
TC/testcase/utc_large_twin_antialias_mixed_gl.c [new file with mode: 0644]
TC/testcase/utc_large_twin_antialias_mixed_image.c [new file with mode: 0644]
TC/testcase/utc_leaky_dash_gl.c [new file with mode: 0644]
TC/testcase/utc_leaky_dash_image.c [new file with mode: 0644]
TC/testcase/utc_leaky_dashed_rectangle_gl.c [new file with mode: 0644]
TC/testcase/utc_leaky_dashed_rectangle_image.c [new file with mode: 0644]
TC/testcase/utc_leaky_dashed_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_leaky_dashed_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_leaky_polygon_gl.c [new file with mode: 0644]
TC/testcase/utc_leaky_polygon_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_dashed_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_dashed_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_flipped_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_flipped_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_flopped_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_flopped_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_offset_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_offset_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_rotated_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_large_overlap_rotated_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_dashed_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_dashed_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_flipped_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_flipped_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_flopped_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_flopped_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_offset_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_offset_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_rotated_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_overlap_rotated_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_scale_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_scale_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_tolerance_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_tolerance_image.c [new file with mode: 0644]
TC/testcase/utc_line_width_zero_gl.c [new file with mode: 0644]
TC/testcase/utc_line_width_zero_image.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_extend_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_extend_image.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_image.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_large_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_large_image.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_one_stop_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_one_stop_image.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_reflect_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_reflect_image.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_subset_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_gradient_subset_image.c [new file with mode: 0644]
TC/testcase/utc_linear_step_function_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_step_function_image.c [new file with mode: 0644]
TC/testcase/utc_linear_uniform_gl.c [new file with mode: 0644]
TC/testcase/utc_linear_uniform_image.c [new file with mode: 0644]
TC/testcase/utc_long_dashed_lines_gl.c [new file with mode: 0644]
TC/testcase/utc_long_dashed_lines_image.c [new file with mode: 0644]
TC/testcase/utc_long_lines_gl.c [new file with mode: 0644]
TC/testcase/utc_long_lines_image.c [new file with mode: 0644]
TC/testcase/utc_map_all_to_image_gl.c [new file with mode: 0644]
TC/testcase/utc_map_all_to_image_image.c [new file with mode: 0644]
TC/testcase/utc_map_bit_to_image_gl.c [new file with mode: 0644]
TC/testcase/utc_map_bit_to_image_image.c [new file with mode: 0644]
TC/testcase/utc_map_to_image_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_map_to_image_fill_image.c [new file with mode: 0644]
TC/testcase/utc_mask_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_mask_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_mask_ctm_gl.c [new file with mode: 0644]
TC/testcase/utc_mask_ctm_image.c [new file with mode: 0644]
TC/testcase/utc_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_mask_glyphs_gl.c [new file with mode: 0644]
TC/testcase/utc_mask_glyphs_image.c [new file with mode: 0644]
TC/testcase/utc_mask_image.c [new file with mode: 0644]
TC/testcase/utc_mask_surface_ctm_gl.c [new file with mode: 0644]
TC/testcase/utc_mask_surface_ctm_image.c [new file with mode: 0644]
TC/testcase/utc_mask_transformed_image_gl.c [new file with mode: 0644]
TC/testcase/utc_mask_transformed_image_image.c [new file with mode: 0644]
TC/testcase/utc_mask_transformed_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_mask_transformed_similar_image.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_accuracy_gl.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_accuracy_image.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_conical_gl.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_conical_image.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_control_points_gl.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_control_points_image.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_fold_gl.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_fold_image.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_gl.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_image.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_overlap_gl.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_overlap_image.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_transformed_gl.c [new file with mode: 0644]
TC/testcase/utc_mesh_pattern_transformed_image.c [new file with mode: 0644]
TC/testcase/utc_mime_data_gl.c [new file with mode: 0644]
TC/testcase/utc_mime_data_image.c [new file with mode: 0644]
TC/testcase/utc_mime_surface_api_gl.c [new file with mode: 0644]
TC/testcase/utc_mime_surface_api_image.c [new file with mode: 0644]
TC/testcase/utc_mime_surface_gl.c [new file with mode: 0644]
TC/testcase/utc_mime_surface_image.c [new file with mode: 0644]
TC/testcase/utc_miter_precision_gl.c [new file with mode: 0644]
TC/testcase/utc_miter_precision_image.c [new file with mode: 0644]
TC/testcase/utc_move_to_show_surface_gl.c [new file with mode: 0644]
TC/testcase/utc_move_to_show_surface_image.c [new file with mode: 0644]
TC/testcase/utc_multi_page_gl.c [new file with mode: 0644]
TC/testcase/utc_multi_page_image.c [new file with mode: 0644]
TC/testcase/utc_negative_stride_image_gl.c [new file with mode: 0644]
TC/testcase/utc_negative_stride_image_image.c [new file with mode: 0644]
TC/testcase/utc_new_sub_path_gl.c [new file with mode: 0644]
TC/testcase/utc_new_sub_path_image.c [new file with mode: 0644]
TC/testcase/utc_nil_surface_gl.c [new file with mode: 0644]
TC/testcase/utc_nil_surface_image.c [new file with mode: 0644]
TC/testcase/utc_operator_alpha_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_operator_alpha_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_operator_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_operator_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_operator_clear_gl.c [new file with mode: 0644]
TC/testcase/utc_operator_clear_image.c [new file with mode: 0644]
TC/testcase/utc_operator_gl.c [new file with mode: 0644]
TC/testcase/utc_operator_image.c [new file with mode: 0644]
TC/testcase/utc_operator_source_gl.c [new file with mode: 0644]
TC/testcase/utc_operator_source_image.c [new file with mode: 0644]
TC/testcase/utc_over_above_source_gl.c [new file with mode: 0644]
TC/testcase/utc_over_above_source_image.c [new file with mode: 0644]
TC/testcase/utc_over_around_source_gl.c [new file with mode: 0644]
TC/testcase/utc_over_around_source_image.c [new file with mode: 0644]
TC/testcase/utc_over_below_source_gl.c [new file with mode: 0644]
TC/testcase/utc_over_below_source_image.c [new file with mode: 0644]
TC/testcase/utc_over_between_source_gl.c [new file with mode: 0644]
TC/testcase/utc_over_between_source_image.c [new file with mode: 0644]
TC/testcase/utc_overlapping_boxes_gl.c [new file with mode: 0644]
TC/testcase/utc_overlapping_boxes_image.c [new file with mode: 0644]
TC/testcase/utc_overlapping_dash_caps_gl.c [new file with mode: 0644]
TC/testcase/utc_overlapping_dash_caps_image.c [new file with mode: 0644]
TC/testcase/utc_overlapping_glyphs_gl.c [new file with mode: 0644]
TC/testcase/utc_overlapping_glyphs_image.c [new file with mode: 0644]
TC/testcase/utc_paint_clip_fill_aa_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_clip_fill_aa_image.c [new file with mode: 0644]
TC/testcase/utc_paint_clip_fill_mono_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_clip_fill_mono_image.c [new file with mode: 0644]
TC/testcase/utc_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_image.c [new file with mode: 0644]
TC/testcase/utc_paint_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_paint_source_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_source_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_clip_image.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_clip_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_clip_mask_image.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_solid_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_paint_with_alpha_solid_clip_image.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_bottom_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_bottom_image.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_left_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_left_image.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_right_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_right_image.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_top_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_clip_text_top_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_half_reference_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_half_reference_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_half_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_half_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_intersecting_quads_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_intersecting_quads_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_intersecting_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_intersecting_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_overlap_half_triangles_eo_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_overlap_half_triangles_eo_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_overlap_half_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_overlap_half_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_overlap_three_quarter_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_overlap_three_quarter_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_rectangles_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_rectangles_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_reference_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_reference_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_three_quarter_reference_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_three_quarter_reference_image.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_triangles_gl.c [new file with mode: 0644]
TC/testcase/utc_partial_coverage_triangles_image.c [new file with mode: 0644]
TC/testcase/utc_pass_through_gl.c [new file with mode: 0644]
TC/testcase/utc_pass_through_image.c [new file with mode: 0644]
TC/testcase/utc_path_append_gl.c [new file with mode: 0644]
TC/testcase/utc_path_append_image.c [new file with mode: 0644]
TC/testcase/utc_path_precision_gl.c [new file with mode: 0644]
TC/testcase/utc_path_precision_image.c [new file with mode: 0644]
TC/testcase/utc_path_stroke_twice_gl.c [new file with mode: 0644]
TC/testcase/utc_path_stroke_twice_image.c [new file with mode: 0644]
TC/testcase/utc_pattern_get_type_gl.c [new file with mode: 0644]
TC/testcase/utc_pattern_get_type_image.c [new file with mode: 0644]
TC/testcase/utc_pattern_getters_gl.c [new file with mode: 0644]
TC/testcase/utc_pattern_getters_image.c [new file with mode: 0644]
TC/testcase/utc_pdf_features_gl.c [new file with mode: 0644]
TC/testcase/utc_pdf_features_image.c [new file with mode: 0644]
TC/testcase/utc_pdf_isolated_group_gl.c [new file with mode: 0644]
TC/testcase/utc_pdf_isolated_group_image.c [new file with mode: 0644]
TC/testcase/utc_pdf_mime_data_gl.c [new file with mode: 0644]
TC/testcase/utc_pdf_mime_data_image.c [new file with mode: 0644]
TC/testcase/utc_pdf_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_pdf_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_pixman_rotate_gl.c [new file with mode: 0644]
TC/testcase/utc_pixman_rotate_image.c [new file with mode: 0644]
TC/testcase/utc_png_gl.c [new file with mode: 0644]
TC/testcase/utc_png_image.c [new file with mode: 0644]
TC/testcase/utc_ps_eps_gl.c [new file with mode: 0644]
TC/testcase/utc_ps_eps_image.c [new file with mode: 0644]
TC/testcase/utc_ps_features_gl.c [new file with mode: 0644]
TC/testcase/utc_ps_features_image.c [new file with mode: 0644]
TC/testcase/utc_ps_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_ps_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_pthread_same_source_gl.c [new file with mode: 0644]
TC/testcase/utc_pthread_same_source_image.c [new file with mode: 0644]
TC/testcase/utc_pthread_show_text_gl.c [new file with mode: 0644]
TC/testcase/utc_pthread_show_text_image.c [new file with mode: 0644]
TC/testcase/utc_pthread_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_pthread_similar_image.c [new file with mode: 0644]
TC/testcase/utc_push_group_color_gl.c [new file with mode: 0644]
TC/testcase/utc_push_group_color_image.c [new file with mode: 0644]
TC/testcase/utc_push_group_gl.c [new file with mode: 0644]
TC/testcase/utc_push_group_image.c [new file with mode: 0644]
TC/testcase/utc_push_group_path_offset_gl.c [new file with mode: 0644]
TC/testcase/utc_push_group_path_offset_image.c [new file with mode: 0644]
TC/testcase/utc_quartz_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_quartz_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_extend_gl.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_extend_image.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_gl.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_image.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_mask_image.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_mask_source_gl.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_mask_source_image.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_one_stop_gl.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_one_stop_image.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_source_gl.c [new file with mode: 0644]
TC/testcase/utc_radial_gradient_source_image.c [new file with mode: 0644]
TC/testcase/utc_radial_outer_focus_gl.c [new file with mode: 0644]
TC/testcase/utc_radial_outer_focus_image.c [new file with mode: 0644]
TC/testcase/utc_random_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_random_clip_image.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_curves_eo_gl.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_curves_eo_image.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_curves_nz_gl.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_curves_nz_image.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_eo_gl.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_eo_image.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_nonzero_gl.c [new file with mode: 0644]
TC/testcase/utc_random_intersections_nonzero_image.c [new file with mode: 0644]
TC/testcase/utc_raster_source_gl.c [new file with mode: 0644]
TC/testcase/utc_raster_source_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_fill_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_fill_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_clip_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_clip_mask_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_solid_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_alpha_solid_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_paint_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_select_font_face_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_select_font_face_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_self_intersecting_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_self_intersecting_image.c [new file with mode: 0644]
TC/testcase/utc_record1414x_text_transform_gl.c [new file with mode: 0644]
TC/testcase/utc_record1414x_text_transform_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_fill_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_fill_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_clip_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_clip_mask_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_solid_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_alpha_solid_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_paint_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_select_font_face_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_select_font_face_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_self_intersecting_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_self_intersecting_image.c [new file with mode: 0644]
TC/testcase/utc_record2x_text_transform_gl.c [new file with mode: 0644]
TC/testcase/utc_record2x_text_transform_image.c [new file with mode: 0644]
TC/testcase/utc_record90_fill_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_fill_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_clip_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_clip_mask_image.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_solid_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_alpha_solid_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_paint_image.c [new file with mode: 0644]
TC/testcase/utc_record90_select_font_face_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_select_font_face_image.c [new file with mode: 0644]
TC/testcase/utc_record90_self_intersecting_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_self_intersecting_image.c [new file with mode: 0644]
TC/testcase/utc_record90_text_transform_gl.c [new file with mode: 0644]
TC/testcase/utc_record90_text_transform_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_none_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_none_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_none_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_none_similar_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_pad_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_pad_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_pad_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_pad_similar_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_reflect_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_reflect_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_reflect_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_reflect_similar_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_record_extend_repeat_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_record_extend_repeat_similar_image.c [new file with mode: 0644]
TC/testcase/utc_record_fill_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record_fill_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record_mesh_gl.c [new file with mode: 0644]
TC/testcase/utc_record_mesh_image.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_clip_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_clip_mask_image.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_solid_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_record_paint_alpha_solid_clip_image.c [new file with mode: 0644]
TC/testcase/utc_record_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_record_paint_image.c [new file with mode: 0644]
TC/testcase/utc_record_select_font_face_gl.c [new file with mode: 0644]
TC/testcase/utc_record_select_font_face_image.c [new file with mode: 0644]
TC/testcase/utc_record_self_intersecting_gl.c [new file with mode: 0644]
TC/testcase/utc_record_self_intersecting_image.c [new file with mode: 0644]
TC/testcase/utc_record_text_transform_gl.c [new file with mode: 0644]
TC/testcase/utc_record_text_transform_image.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_none_gl.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_none_image.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_pad_gl.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_pad_image.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_reflect_gl.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_reflect_image.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_extend_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_over_gl.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_over_image.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_recording_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_rectangle_rounding_error_gl.c [new file with mode: 0644]
TC/testcase/utc_rectangle_rounding_error_image.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_dash_gl.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_dash_image.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_dash_scale_gl.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_dash_scale_image.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_dash_scale_unaligned_gl.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_dash_scale_unaligned_image.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_fill_image.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_grid_gl.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_grid_image.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_miter_limit_gl.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_miter_limit_image.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_rectilinear_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_reflected_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_reflected_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_rel_path_gl.c [new file with mode: 0644]
TC/testcase/utc_rel_path_image.c [new file with mode: 0644]
TC/testcase/utc_rgb24_ignore_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_rgb24_ignore_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_rotate_clip_image_surface_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_rotate_clip_image_surface_paint_image.c [new file with mode: 0644]
TC/testcase/utc_rotate_image_surface_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_rotate_image_surface_paint_image.c [new file with mode: 0644]
TC/testcase/utc_rotated_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_rotated_clip_image.c [new file with mode: 0644]
TC/testcase/utc_rounded_rectangle_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_rounded_rectangle_fill_image.c [new file with mode: 0644]
TC/testcase/utc_rounded_rectangle_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_rounded_rectangle_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_scale_down_source_surface_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_scale_down_source_surface_paint_image.c [new file with mode: 0644]
TC/testcase/utc_scale_offset_image_gl.c [new file with mode: 0644]
TC/testcase/utc_scale_offset_image_image.c [new file with mode: 0644]
TC/testcase/utc_scale_offset_similar_gl.c [new file with mode: 0644]
TC/testcase/utc_scale_offset_similar_image.c [new file with mode: 0644]
TC/testcase/utc_scale_source_surface_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_scale_source_surface_paint_image.c [new file with mode: 0644]
TC/testcase/utc_scaled_font_zero_matrix_gl.c [new file with mode: 0644]
TC/testcase/utc_scaled_font_zero_matrix_image.c [new file with mode: 0644]
TC/testcase/utc_select_font_face_gl.c [new file with mode: 0644]
TC/testcase/utc_select_font_face_image.c [new file with mode: 0644]
TC/testcase/utc_select_font_no_show_text_gl.c [new file with mode: 0644]
TC/testcase/utc_select_font_no_show_text_image.c [new file with mode: 0644]
TC/testcase/utc_self_copy_gl.c [new file with mode: 0644]
TC/testcase/utc_self_copy_image.c [new file with mode: 0644]
TC/testcase/utc_self_copy_overlap_gl.c [new file with mode: 0644]
TC/testcase/utc_self_copy_overlap_image.c [new file with mode: 0644]
TC/testcase/utc_self_intersecting_gl.c [new file with mode: 0644]
TC/testcase/utc_self_intersecting_image.c [new file with mode: 0644]
TC/testcase/utc_set_source_gl.c [new file with mode: 0644]
TC/testcase/utc_set_source_image.c [new file with mode: 0644]
TC/testcase/utc_shape_general_convex_gl.c [new file with mode: 0644]
TC/testcase/utc_shape_general_convex_image.c [new file with mode: 0644]
TC/testcase/utc_shape_sierpinski_gl.c [new file with mode: 0644]
TC/testcase/utc_shape_sierpinski_image.c [new file with mode: 0644]
TC/testcase/utc_show_glyphs_advance_gl.c [new file with mode: 0644]
TC/testcase/utc_show_glyphs_advance_image.c [new file with mode: 0644]
TC/testcase/utc_show_glyphs_many_gl.c [new file with mode: 0644]
TC/testcase/utc_show_glyphs_many_image.c [new file with mode: 0644]
TC/testcase/utc_show_text_current_point_gl.c [new file with mode: 0644]
TC/testcase/utc_show_text_current_point_image.c [new file with mode: 0644]
TC/testcase/utc_skew_extreme_gl.c [new file with mode: 0644]
TC/testcase/utc_skew_extreme_image.c [new file with mode: 0644]
TC/testcase/utc_smask_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_smask_fill_image.c [new file with mode: 0644]
TC/testcase/utc_smask_gl.c [new file with mode: 0644]
TC/testcase/utc_smask_image.c [new file with mode: 0644]
TC/testcase/utc_smask_image_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_smask_image_mask_image.c [new file with mode: 0644]
TC/testcase/utc_smask_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_smask_mask_image.c [new file with mode: 0644]
TC/testcase/utc_smask_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_smask_paint_image.c [new file with mode: 0644]
TC/testcase/utc_smask_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_smask_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_smask_text_gl.c [new file with mode: 0644]
TC/testcase/utc_smask_text_image.c [new file with mode: 0644]
TC/testcase/utc_solid_pattern_cache_stress_gl.c [new file with mode: 0644]
TC/testcase/utc_solid_pattern_cache_stress_image.c [new file with mode: 0644]
TC/testcase/utc_source_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_source_clip_image.c [new file with mode: 0644]
TC/testcase/utc_source_clip_scale_gl.c [new file with mode: 0644]
TC/testcase/utc_source_clip_scale_image.c [new file with mode: 0644]
TC/testcase/utc_source_surface_scale_paint_gl.c [new file with mode: 0644]
TC/testcase/utc_source_surface_scale_paint_image.c [new file with mode: 0644]
TC/testcase/utc_spline_decomposition_gl.c [new file with mode: 0644]
TC/testcase/utc_spline_decomposition_image.c [new file with mode: 0644]
TC/testcase/utc_stride_12_image_gl.c [new file with mode: 0644]
TC/testcase/utc_stride_12_image_image.c [new file with mode: 0644]
TC/testcase/utc_stroke_ctm_caps_gl.c [new file with mode: 0644]
TC/testcase/utc_stroke_ctm_caps_image.c [new file with mode: 0644]
TC/testcase/utc_stroke_image_gl.c [new file with mode: 0644]
TC/testcase/utc_stroke_image_image.c [new file with mode: 0644]
TC/testcase/utc_stroke_open_box_gl.c [new file with mode: 0644]
TC/testcase/utc_stroke_open_box_image.c [new file with mode: 0644]
TC/testcase/utc_stroke_pattern_gl.c [new file with mode: 0644]
TC/testcase/utc_stroke_pattern_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_image_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_image_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_modify_child_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_modify_child_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_modify_parent_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_modify_parent_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_outside_target_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_outside_target_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_pad_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_pad_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_reflect_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_reflect_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_scale_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_scale_image.c [new file with mode: 0644]
TC/testcase/utc_subsurface_similar_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_subsurface_similar_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_surface_finish_twice_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_finish_twice_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_big_scale_down_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_big_scale_down_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_operator_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_operator_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_none_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_none_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_pad_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_pad_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_reflect_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_reflect_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_repeat_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_extend_repeat_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_down_image.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_up_gl.c [new file with mode: 0644]
TC/testcase/utc_surface_pattern_scale_up_image.c [new file with mode: 0644]
TC/testcase/utc_svg_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_svg_clip_image.c [new file with mode: 0644]
TC/testcase/utc_svg_surface_gl.c [new file with mode: 0644]
TC/testcase/utc_svg_surface_image.c [new file with mode: 0644]
TC/testcase/utc_svg_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_svg_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_gray_gl.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_gray_image.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_none_gl.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_none_image.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_bgr_gl.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_bgr_image.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_gl.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_image.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_rgb_gl.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_rgb_image.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_vbgr_gl.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_vbgr_image.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_vrgb_gl.c [new file with mode: 0644]
TC/testcase/utc_text_antialias_subpixel_vrgb_image.c [new file with mode: 0644]
TC/testcase/utc_text_cache_crash_gl.c [new file with mode: 0644]
TC/testcase/utc_text_cache_crash_image.c [new file with mode: 0644]
TC/testcase/utc_text_glyph_range_gl.c [new file with mode: 0644]
TC/testcase/utc_text_glyph_range_image.c [new file with mode: 0644]
TC/testcase/utc_text_pattern_gl.c [new file with mode: 0644]
TC/testcase/utc_text_pattern_image.c [new file with mode: 0644]
TC/testcase/utc_text_rotate_gl.c [new file with mode: 0644]
TC/testcase/utc_text_rotate_image.c [new file with mode: 0644]
TC/testcase/utc_text_transform_gl.c [new file with mode: 0644]
TC/testcase/utc_text_transform_image.c [new file with mode: 0644]
TC/testcase/utc_text_zero_len_gl.c [new file with mode: 0644]
TC/testcase/utc_text_zero_len_image.c [new file with mode: 0644]
TC/testcase/utc_tiger_gl.c [new file with mode: 0644]
TC/testcase/utc_tiger_image.c [new file with mode: 0644]
TC/testcase/utc_tighten_bounds_gl.c [new file with mode: 0644]
TC/testcase/utc_tighten_bounds_image.c [new file with mode: 0644]
TC/testcase/utc_toy_font_face_gl.c [new file with mode: 0644]
TC/testcase/utc_toy_font_face_image.c [new file with mode: 0644]
TC/testcase/utc_transforms_gl.c [new file with mode: 0644]
TC/testcase/utc_transforms_image.c [new file with mode: 0644]
TC/testcase/utc_translate_show_surface_gl.c [new file with mode: 0644]
TC/testcase/utc_translate_show_surface_image.c [new file with mode: 0644]
TC/testcase/utc_trap_clip_gl.c [new file with mode: 0644]
TC/testcase/utc_trap_clip_image.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_gray_gl.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_gray_image.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_mixed_gl.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_mixed_image.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_none_gl.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_none_image.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_subpixel_gl.c [new file with mode: 0644]
TC/testcase/utc_twin_antialias_subpixel_image.c [new file with mode: 0644]
TC/testcase/utc_twin_gl.c [new file with mode: 0644]
TC/testcase/utc_twin_image.c [new file with mode: 0644]
TC/testcase/utc_unaligned_box_gl.c [new file with mode: 0644]
TC/testcase/utc_unaligned_box_image.c [new file with mode: 0644]
TC/testcase/utc_unantialiased_shapes_gl.c [new file with mode: 0644]
TC/testcase/utc_unantialiased_shapes_image.c [new file with mode: 0644]
TC/testcase/utc_unbounded_operator_gl.c [new file with mode: 0644]
TC/testcase/utc_unbounded_operator_image.c [new file with mode: 0644]
TC/testcase/utc_unclosed_strokes_gl.c [new file with mode: 0644]
TC/testcase/utc_unclosed_strokes_image.c [new file with mode: 0644]
TC/testcase/utc_user_data_gl.c [new file with mode: 0644]
TC/testcase/utc_user_data_image.c [new file with mode: 0644]
TC/testcase/utc_user_font_gl.c [new file with mode: 0644]
TC/testcase/utc_user_font_image.c [new file with mode: 0644]
TC/testcase/utc_user_font_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_user_font_mask_image.c [new file with mode: 0644]
TC/testcase/utc_user_font_proxy_gl.c [new file with mode: 0644]
TC/testcase/utc_user_font_proxy_image.c [new file with mode: 0644]
TC/testcase/utc_user_font_rescale_gl.c [new file with mode: 0644]
TC/testcase/utc_user_font_rescale_image.c [new file with mode: 0644]
TC/testcase/utc_white_in_noop_gl.c [new file with mode: 0644]
TC/testcase/utc_white_in_noop_image.c [new file with mode: 0644]
TC/testcase/utc_world_map_fill_gl.c [new file with mode: 0644]
TC/testcase/utc_world_map_fill_image.c [new file with mode: 0644]
TC/testcase/utc_world_map_gl.c [new file with mode: 0644]
TC/testcase/utc_world_map_image.c [new file with mode: 0644]
TC/testcase/utc_world_map_stroke_gl.c [new file with mode: 0644]
TC/testcase/utc_world_map_stroke_image.c [new file with mode: 0644]
TC/testcase/utc_xcb_huge_image_shm_gl.c [new file with mode: 0644]
TC/testcase/utc_xcb_huge_image_shm_image.c [new file with mode: 0644]
TC/testcase/utc_xcb_snapshot_assert_gl.c [new file with mode: 0644]
TC/testcase/utc_xcb_snapshot_assert_image.c [new file with mode: 0644]
TC/testcase/utc_xcb_stress_cache_gl.c [new file with mode: 0644]
TC/testcase/utc_xcb_stress_cache_image.c [new file with mode: 0644]
TC/testcase/utc_xcb_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_xcb_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_xcomposite_projection_gl.c [new file with mode: 0644]
TC/testcase/utc_xcomposite_projection_image.c [new file with mode: 0644]
TC/testcase/utc_xlib_expose_event_gl.c [new file with mode: 0644]
TC/testcase/utc_xlib_expose_event_image.c [new file with mode: 0644]
TC/testcase/utc_xlib_surface_gl.c [new file with mode: 0644]
TC/testcase/utc_xlib_surface_image.c [new file with mode: 0644]
TC/testcase/utc_xlib_surface_source_gl.c [new file with mode: 0644]
TC/testcase/utc_xlib_surface_source_image.c [new file with mode: 0644]
TC/testcase/utc_zero_alpha_gl.c [new file with mode: 0644]
TC/testcase/utc_zero_alpha_image.c [new file with mode: 0644]
TC/testcase/utc_zero_mask_gl.c [new file with mode: 0644]
TC/testcase/utc_zero_mask_image.c [new file with mode: 0644]
TC/tet_scen [new file with mode: 0755]
TC/tetbuild.cfg [new file with mode: 0755]
TC/tetclean.cfg [new file with mode: 0755]
TC/tetexec.cfg [new file with mode: 0755]
aclocal.m4 [new file with mode: 0644]
autogen.sh
boilerplate/.gitignore [new file with mode: 0644]
boilerplate/Makefile.sources
boilerplate/Makefile.win32.features
boilerplate/cairo-boilerplate-cogl.c [new file with mode: 0644]
boilerplate/cairo-boilerplate-directfb.c
boilerplate/cairo-boilerplate-drm.c
boilerplate/cairo-boilerplate-egl.c
boilerplate/cairo-boilerplate-glx.c
boilerplate/cairo-boilerplate-pdf.c
boilerplate/cairo-boilerplate-ps.c
boilerplate/cairo-boilerplate-qt.cpp
boilerplate/cairo-boilerplate-quartz.c
boilerplate/cairo-boilerplate-script.c
boilerplate/cairo-boilerplate-skia.c
boilerplate/cairo-boilerplate-svg.c
boilerplate/cairo-boilerplate-test-surfaces.c
boilerplate/cairo-boilerplate-vg.c
boilerplate/cairo-boilerplate-wgl.c
boilerplate/cairo-boilerplate-win32-printing.c
boilerplate/cairo-boilerplate-win32.c
boilerplate/cairo-boilerplate-xcb.c
boilerplate/cairo-boilerplate-xlib.c
boilerplate/cairo-boilerplate.c
boilerplate/cairo-boilerplate.h
build/.gitignore [new file with mode: 0644]
build/Makefile.am.releasing
build/Makefile.win32.common
build/Makefile.win32.features
build/Makefile.win32.features-h
build/Makefile.win32.inform [new file with mode: 0644]
build/configure.ac.features
build/configure.ac.warnings
cairo-version.h
config.h.in [new file with mode: 0644]
configure [new file with mode: 0755]
configure.ac
debian/changelog
debian/control
debian/rules
doc/.gitignore [new file with mode: 0644]
doc/public/.gitignore [new file with mode: 0644]
doc/public/cairo-docs.xml
doc/public/cairo-sections.txt
doc/public/check-doc-coverage.sh
doc/tutorial/slides/.gitignore [new file with mode: 0644]
doc/tutorial/src/.gitignore [new file with mode: 0644]
packaging/cairo.manifest [new file with mode: 0644]
packaging/cairo.spec
perf/.gitignore [new file with mode: 0644]
perf/Makefile.in [new file with mode: 0644]
perf/README
perf/cairo-analyse-trace.c
perf/cairo-perf-chart.c
perf/cairo-perf-graph-files.c
perf/cairo-perf-micro.c
perf/cairo-perf-print.c
perf/cairo-perf-report.c
perf/cairo-perf-trace.c
perf/cairo-perf.c
perf/cairo-perf.h
perf/cairo-stats.c
perf/micro/Makefile.in [new file with mode: 0644]
perf/micro/a1-curve.c
perf/micro/a1-line.c
perf/micro/box-outline.c
perf/micro/composite-checker.c
perf/micro/curve.c
perf/micro/disjoint.c
perf/micro/dragon.c
perf/micro/fill-clip.c
perf/micro/fill.c
perf/micro/glyphs.c
perf/micro/hash-table.c
perf/micro/hatching.c
perf/micro/intersections.c
perf/micro/line.c
perf/micro/long-dashed-lines.c
perf/micro/long-lines.c
perf/micro/many-curves.c
perf/micro/many-fills.c
perf/micro/many-strokes.c
perf/micro/mask.c
perf/micro/mosaic.c
perf/micro/paint-with-alpha.c
perf/micro/paint.c
perf/micro/pattern_create_radial.c
perf/micro/pythagoras-tree.c
perf/micro/rectangles.c
perf/micro/rounded-rectangles.c
perf/micro/sierpinski.c
perf/micro/spiral.c
perf/micro/stroke.c
perf/micro/subimage_copy.c
perf/micro/tessellate.c
perf/micro/text.c
perf/micro/tiger.c
perf/micro/twin.c
perf/micro/unaligned-clip.c
perf/micro/wave.c
perf/micro/wide-fills.c
perf/micro/wide-strokes.c
perf/micro/world-map.c
perf/micro/zrusin.c
src/.gitignore [new file with mode: 0644]
src/Makefile.am
src/Makefile.sources
src/Makefile.win32.features
src/cairo-analysis-surface.c
src/cairo-arc.c
src/cairo-bentley-ottmann-rectangular.c
src/cairo-bentley-ottmann-rectilinear.c
src/cairo-bentley-ottmann.c
src/cairo-beos-surface.cpp
src/cairo-botor-scan-converter.c
src/cairo-box-inline.h [new file with mode: 0644]
src/cairo-boxes-intersect.c
src/cairo-boxes-private.h
src/cairo-boxes.c
src/cairo-clip-boxes.c
src/cairo-clip-inline.h [new file with mode: 0644]
src/cairo-clip-polygon.c
src/cairo-clip-private.h
src/cairo-clip-surface.c
src/cairo-clip.c
src/cairo-cogl-context-private.h [new file with mode: 0644]
src/cairo-cogl-context.c [new file with mode: 0644]
src/cairo-cogl-gradient-private.h [new file with mode: 0644]
src/cairo-cogl-gradient.c [new file with mode: 0644]
src/cairo-cogl-private.h [new file with mode: 0644]
src/cairo-cogl-surface.c [new file with mode: 0644]
src/cairo-cogl-utils-private.h [new file with mode: 0644]
src/cairo-cogl-utils.c [new file with mode: 0644]
src/cairo-cogl.h [new file with mode: 0644]
src/cairo-combsort-inline.h [new file with mode: 0644]
src/cairo-compiler-private.h
src/cairo-composite-rectangles-private.h
src/cairo-composite-rectangles.c
src/cairo-compositor-private.h
src/cairo-compositor.c
src/cairo-contour-inline.h [new file with mode: 0644]
src/cairo-contour-private.h
src/cairo-contour.c
src/cairo-damage-private.h [new file with mode: 0644]
src/cairo-damage.c [new file with mode: 0644]
src/cairo-debug.c
src/cairo-default-context-private.h
src/cairo-default-context.c
src/cairo-device.c
src/cairo-directfb-surface.c
src/cairo-egl-context.c
src/cairo-error-inline.h [new file with mode: 0644]
src/cairo-error-private.h
src/cairo-fallback-compositor.c
src/cairo-fixed-private.h
src/cairo-font-face.c
src/cairo-font-options.c
src/cairo-ft-font.c
src/cairo-ft.h
src/cairo-gl-composite.c
src/cairo-gl-device.c
src/cairo-gl-dispatch-private.h
src/cairo-gl-glyphs.c
src/cairo-gl-gradient.c
src/cairo-gl-hairline-stroke.c [new file with mode: 0644]
src/cairo-gl-msaa-compositor.c [new file with mode: 0755]
src/cairo-gl-operand.c
src/cairo-gl-private.h
src/cairo-gl-shaders.c
src/cairo-gl-source.c [new file with mode: 0644]
src/cairo-gl-spans-compositor.c
src/cairo-gl-surface-legacy.c
src/cairo-gl-surface.c
src/cairo-gl-traps-compositor.c
src/cairo-gl.h
src/cairo-glx-context.c
src/cairo-gstate.c
src/cairo-hash.c
src/cairo-image-compositor.c
src/cairo-image-source.c
src/cairo-image-surface-inline.h [new file with mode: 0644]
src/cairo-image-surface-private.h
src/cairo-image-surface.c
src/cairo-list-inline.h [new file with mode: 0644]
src/cairo-list-private.h
src/cairo-malloc-private.h
src/cairo-mask-compositor.c
src/cairo-matrix.c
src/cairo-mesh-pattern-rasterizer.c
src/cairo-misc.c
src/cairo-mono-scan-converter.c
src/cairo-observer.c
src/cairo-os2-surface.c
src/cairo-paginated-surface.c
src/cairo-path-bounds.c
src/cairo-path-fill.c
src/cairo-path-fixed.c
src/cairo-path-stroke-boxes.c
src/cairo-path-stroke-polygon.c
src/cairo-path-stroke-tristrip.c
src/cairo-path-stroke.c
src/cairo-path.c
src/cairo-pattern-inline.h [new file with mode: 0644]
src/cairo-pattern-private.h
src/cairo-pattern.c
src/cairo-pdf-surface-private.h
src/cairo-pdf-surface.c
src/cairo-pdf.h
src/cairo-png.c
src/cairo-polygon-intersect.c
src/cairo-polygon-reduce.c
src/cairo-polygon.c
src/cairo-ps-surface-private.h
src/cairo-ps-surface.c
src/cairo-ps.h
src/cairo-qt-surface.cpp
src/cairo-quartz-font.c
src/cairo-quartz-image-surface.c
src/cairo-quartz-private.h
src/cairo-quartz-surface.c
src/cairo-raster-source-pattern.c [new file with mode: 0644]
src/cairo-recording-surface-inline.h [new file with mode: 0644]
src/cairo-recording-surface-private.h
src/cairo-recording-surface.c
src/cairo-rectangle.c
src/cairo-rectangular-scan-converter.c
src/cairo-region-private.h
src/cairo-region.c
src/cairo-rtree-private.h
src/cairo-rtree.c
src/cairo-scaled-font-subsets-private.h
src/cairo-scaled-font-subsets.c
src/cairo-scaled-font.c
src/cairo-script-surface.c
src/cairo-script.h
src/cairo-shape-mask-compositor.c [new file with mode: 0644]
src/cairo-skia-surface.cpp
src/cairo-spans-compositor-private.h
src/cairo-spans-compositor.c
src/cairo-spline.c
src/cairo-stroke-dash.c
src/cairo-stroke-style.c
src/cairo-surface-backend-private.h
src/cairo-surface-clipper.c
src/cairo-surface-inline.h [new file with mode: 0644]
src/cairo-surface-observer-inline.h [new file with mode: 0644]
src/cairo-surface-observer-private.h
src/cairo-surface-observer.c
src/cairo-surface-offset.c
src/cairo-surface-private.h
src/cairo-surface-snapshot-inline.h [new file with mode: 0644]
src/cairo-surface-snapshot-private.h
src/cairo-surface-snapshot.c
src/cairo-surface-subsurface-inline.h [new file with mode: 0644]
src/cairo-surface-subsurface-private.h
src/cairo-surface-subsurface.c
src/cairo-surface-wrapper.c
src/cairo-surface.c
src/cairo-svg-surface.c
src/cairo-svg.h
src/cairo-tee-surface.c
src/cairo-tor-scan-converter.c
src/cairo-traps-compositor.c
src/cairo-traps-private.h
src/cairo-traps.c
src/cairo-truetype-subset.c
src/cairo-type1-subset.c
src/cairo-type3-glyph-surface.c
src/cairo-types-private.h
src/cairo-user-font.c
src/cairo-version.c
src/cairo-vg-surface.c
src/cairo-wgl-context.c
src/cairo-wideint-private.h
src/cairo-wideint.c
src/cairo-xcb-connection-core.c
src/cairo-xcb-connection.c
src/cairo-xcb-private.h
src/cairo-xcb-screen.c
src/cairo-xcb-shm.c
src/cairo-xcb-surface-core.c
src/cairo-xcb-surface-render.c
src/cairo-xcb-surface.c
src/cairo-xcb.h
src/cairo-xlib-core-compositor.c
src/cairo-xlib-display.c
src/cairo-xlib-fallback-compositor.c
src/cairo-xlib-render-compositor.c
src/cairo-xlib-screen.c
src/cairo-xlib-source.c
src/cairo-xlib-surface.c
src/cairo-xlib-xcb-surface.c
src/cairo-xlib.h
src/cairo-xml-surface.c
src/cairo.c
src/cairo.h
src/cairoint.h
src/check-doc-syntax.awk [new file with mode: 0755]
src/check-doc-syntax.sh
src/drm/cairo-drm-gallium-surface.c
src/drm/cairo-drm-i915-private.h
src/drm/cairo-drm-i915-surface.c
src/drm/cairo-drm-i965-shader.c
src/drm/cairo-drm-i965-surface.c
src/drm/cairo-drm-intel-brw-eu-emit.c
src/drm/cairo-drm-intel-brw-eu.c
src/drm/cairo-drm-intel-brw-eu.h
src/drm/cairo-drm-intel-ioctl-private.h
src/drm/cairo-drm-intel-surface.c
src/drm/cairo-drm-radeon-surface.c
src/drm/cairo-drm-surface.c
src/skia/cairo-skia-context.cpp
src/skia/cairo-skia-surface.cpp
src/test-base-compositor-surface.c
src/test-compositor-surface.c
src/test-null-compositor-surface.c
src/test-paginated-surface.c
src/win32/cairo-win32-debug.c [new file with mode: 0644]
src/win32/cairo-win32-device.c [new file with mode: 0644]
src/win32/cairo-win32-display-surface.c [new file with mode: 0644]
src/win32/cairo-win32-font.c [new file with mode: 0644]
src/win32/cairo-win32-gdi-compositor.c [new file with mode: 0644]
src/win32/cairo-win32-printing-surface.c [new file with mode: 0644]
src/win32/cairo-win32-private.h [new file with mode: 0644]
src/win32/cairo-win32-surface.c [new file with mode: 0644]
src/win32/cairo-win32-system.c [new file with mode: 0644]
test/.gitignore [new file with mode: 0644]
test/Makefile.am
test/Makefile.sources
test/Makefile.win32
test/README
test/any2ppm.c
test/api-special-cases.c
test/arc-direction.c [new file with mode: 0644]
test/buffer-diff.c
test/bug-source-cu.c [new file with mode: 0644]
test/cairo-test-private.h
test/cairo-test-runner.c
test/cairo-test-trace.c
test/cairo-test.c
test/cairo-test.h
test/copy-disjoint.c [new file with mode: 0644]
test/dash-offset.c
test/degenerate-solid-dash.c [new file with mode: 0644]
test/fallback-resolution.c
test/fallback.c [new file with mode: 0644]
test/fill-disjoint.c [new file with mode: 0644]
test/get-xrender-format.c
test/glyph-cache-pressure.c
test/inverted-clip.c [new file with mode: 0644]
test/line-width.c
test/mask-glyphs.c
test/negative-stride-image.c [new file with mode: 0644]
test/pass-through.c
test/pdf-isolated-group.c [new file with mode: 0644]
test/pdiff/.gitignore [new file with mode: 0644]
test/ps-eps.c
test/raster-source.c [new file with mode: 0644]
test/record.c
test/record1414x.c [new file with mode: 0644]
test/record2x.c [new file with mode: 0644]
test/record90.c [new file with mode: 0644]
test/rectilinear-dash-scale.c [new file with mode: 0644]
test/reference/a1-bug.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-bug.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-bug.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-bug.ref.png
test/reference/a1-clip-fill-equal.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill-equal.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill-equal.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill-equal.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill-equal.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill-rule.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill-rule.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill-rule.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-paint.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-stroke.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-clip-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-clip-stroke.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-fill.argb32.ref.png [new file with mode: 0644]
test/reference/a1-fill.base.argb32.ref.png [new file with mode: 0644]
test/reference/a1-fill.base.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-fill.traps.argb32.ref.png [new file with mode: 0644]
test/reference/a1-fill.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-image-sample.argb32.ref.png [new file with mode: 0644]
test/reference/a1-image-sample.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-image-sample.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-image-sample.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-image-sample.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-image-sample.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-image-sample.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-line-width.argb32.ref.png [new file with mode: 0644]
test/reference/a1-line-width.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-line-width.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-line-width.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-line-width.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-mask-sample.argb32.ref.png [new file with mode: 0644]
test/reference/a1-mask-sample.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-mask-sample.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-mask-sample.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-mask-sample.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-rectangles.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-rectangles.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-rectangles.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-rectangles.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-rectangles.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-triangles.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-triangles.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-triangles.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-triangles.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-rasterisation-triangles.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-rectilinear-grid.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rectilinear-grid.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rectilinear-grid.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-rectilinear-grid.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-rectilinear-grid.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-sample.argb32.ref.png [new file with mode: 0644]
test/reference/a1-sample.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-sample.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-sample.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-sample.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-tiger.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-tiger.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-tiger.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-tiger.ref.png
test/reference/a1-traps-sample.argb32.ref.png [new file with mode: 0644]
test/reference/a1-traps-sample.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a1-traps-sample.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a1-traps-sample.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a1-traps-sample.rgb24.ref.png [new file with mode: 0644]
test/reference/a8-clear.argb32.ref.png [new file with mode: 0644]
test/reference/a8-clear.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a8-clear.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a8-clear.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a8-clear.rgb24.ref.png [new file with mode: 0644]
test/reference/a8-mask.argb32.ref.png [new file with mode: 0644]
test/reference/a8-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/a8-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/a8-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/a8-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/aliasing.argb32.ref.png [new file with mode: 0644]
test/reference/aliasing.egl.argb32.ref.png [new file with mode: 0644]
test/reference/aliasing.mask.argb32.ref.png [new file with mode: 0644]
test/reference/aliasing.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/aliasing.rgb24.ref.png [new file with mode: 0644]
test/reference/alpha-similar.argb32.ref.png [new file with mode: 0644]
test/reference/alpha-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/alpha-similar.mask.argb32.ref.png [new file with mode: 0644]
test/reference/alpha-similar.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/alpha-similar.rgb24.ref.png
test/reference/api-special-cases.argb32.ref.png [new file with mode: 0644]
test/reference/api-special-cases.egl.argb32.ref.png [new file with mode: 0644]
test/reference/api-special-cases.mask.argb32.ref.png [new file with mode: 0644]
test/reference/api-special-cases.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/api-special-cases.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-direction.argb32.ref.png [new file with mode: 0644]
test/reference/arc-direction.base.argb32.ref.png [new file with mode: 0644]
test/reference/arc-direction.base.ref.png [new file with mode: 0644]
test/reference/arc-direction.base.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-direction.egl.argb32.ref.png [new file with mode: 0644]
test/reference/arc-direction.mask.argb32.ref.png [new file with mode: 0644]
test/reference/arc-direction.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-direction.ps.ref.png [new file with mode: 0644]
test/reference/arc-direction.ref.png [new file with mode: 0644]
test/reference/arc-direction.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-direction.traps.argb32.ref.png [new file with mode: 0644]
test/reference/arc-direction.traps.ref.png [new file with mode: 0644]
test/reference/arc-direction.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-infinite-loop.argb32.ref.png [new file with mode: 0644]
test/reference/arc-infinite-loop.egl.argb32.ref.png [new file with mode: 0644]
test/reference/arc-infinite-loop.mask.argb32.ref.png [new file with mode: 0644]
test/reference/arc-infinite-loop.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-infinite-loop.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-looping-dash.argb32.ref.png [new file with mode: 0644]
test/reference/arc-looping-dash.egl.argb32.ref.png [new file with mode: 0644]
test/reference/arc-looping-dash.mask.argb32.ref.png [new file with mode: 0644]
test/reference/arc-looping-dash.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/arc-looping-dash.rgb24.ref.png [new file with mode: 0644]
test/reference/big-empty-box.egl.argb32.ref.png [new file with mode: 0644]
test/reference/big-empty-triangle.egl.argb32.ref.png [new file with mode: 0644]
test/reference/big-empty-triangle.mask.argb32.ref.png [new file with mode: 0644]
test/reference/big-empty-triangle.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/big-line.argb32.ref.png [new file with mode: 0644]
test/reference/big-line.egl.argb32.ref.png [new file with mode: 0644]
test/reference/big-line.mask.argb32.ref.png [new file with mode: 0644]
test/reference/big-line.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/big-line.rgb24.ref.png [new file with mode: 0644]
test/reference/big-little-box.egl.argb32.ref.png [new file with mode: 0644]
test/reference/big-little-box.mask.argb32.ref.png [new file with mode: 0644]
test/reference/big-little-box.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/big-little-triangle.argb32.ref.png
test/reference/big-little-triangle.egl.argb32.ref.png [new file with mode: 0644]
test/reference/big-little-triangle.mask.argb32.ref.png [new file with mode: 0644]
test/reference/big-little-triangle.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/big-little-triangle.rgb24.ref.png
test/reference/big-trap.egl.argb32.ref.png [new file with mode: 0644]
test/reference/big-trap.mask.argb32.ref.png [new file with mode: 0644]
test/reference/big-trap.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bilevel-image.argb32.ref.png [new file with mode: 0644]
test/reference/bilevel-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bilevel-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/bilevel-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bilevel-image.rgb24.ref.png [new file with mode: 0644]
test/reference/bilevel-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/bilevel-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/bilevel-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/bilevel-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/bitmap-font.argb32.ref.png [new file with mode: 0644]
test/reference/bitmap-font.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bitmap-font.mask.argb32.ref.png [new file with mode: 0644]
test/reference/bitmap-font.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bitmap-font.rgb24.ref.png
test/reference/bug-40410.argb32.ref.png [new file with mode: 0644]
test/reference/bug-40410.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bug-40410.mask.argb32.ref.png [new file with mode: 0644]
test/reference/bug-40410.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-40410.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-bo-rectangular.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-rectangular.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-rectangular.mask.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-rectangular.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-bo-rectangular.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.base.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.base.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.mask.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.traps.argb32.ref.png [new file with mode: 0644]
test/reference/bug-bo-ricotz.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-extents.argb32.ref.png [new file with mode: 0644]
test/reference/bug-extents.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bug-extents.mask.argb32.ref.png [new file with mode: 0644]
test/reference/bug-extents.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-extents.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-seams.argb32.ref.png [new file with mode: 0644]
test/reference/bug-seams.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bug-seams.mask.argb32.ref.png [new file with mode: 0644]
test/reference/bug-seams.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-seams.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-source-cu.argb32.ref.png [new file with mode: 0644]
test/reference/bug-source-cu.egl.argb32.ref.png [new file with mode: 0644]
test/reference/bug-source-cu.rgb24.ref.png [new file with mode: 0644]
test/reference/bug-source-cu.traps.argb32.ref.png [new file with mode: 0644]
test/reference/bug-source-cu.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-joins-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-joins-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-joins-curve.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins-curve.egl.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins-curve.mask.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins-curve.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-joins-curve.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-joins.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins.egl.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins.mask.argb32.ref.png [new file with mode: 0644]
test/reference/caps-joins.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-joins.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-sub-paths.argb32.ref.png [new file with mode: 0644]
test/reference/caps-sub-paths.egl.argb32.ref.png [new file with mode: 0644]
test/reference/caps-sub-paths.mask.argb32.ref.png [new file with mode: 0644]
test/reference/caps-sub-paths.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-sub-paths.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-tails-curve.argb32.ref.png [new file with mode: 0644]
test/reference/caps-tails-curve.egl.argb32.ref.png [new file with mode: 0644]
test/reference/caps-tails-curve.mask.argb32.ref.png [new file with mode: 0644]
test/reference/caps-tails-curve.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/caps-tails-curve.rgb24.ref.png [new file with mode: 0644]
test/reference/caps.argb32.ref.png [new file with mode: 0644]
test/reference/caps.egl.argb32.ref.png [new file with mode: 0644]
test/reference/caps.mask.argb32.ref.png [new file with mode: 0644]
test/reference/caps.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/caps.rgb24.ref.png [new file with mode: 0644]
test/reference/checkerboard.argb32.ref.png [new file with mode: 0644]
test/reference/checkerboard.egl.argb32.ref.png [new file with mode: 0644]
test/reference/checkerboard.mask.argb32.ref.png [new file with mode: 0644]
test/reference/checkerboard.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/checkerboard.rgb24.ref.png [new file with mode: 0644]
test/reference/clear-source.argb32.ref.png [new file with mode: 0644]
test/reference/clear-source.base.argb32.ref.png
test/reference/clear-source.base.rgb24.ref.png
test/reference/clear-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clear-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clear-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clear-source.rgb24.ref.png [new file with mode: 0644]
test/reference/clear-source.traps.argb32.ref.png
test/reference/clear-source.traps.rgb24.ref.png
test/reference/clear.argb32.ref.png
test/reference/clear.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clear.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clear.rgb24.ref.png
test/reference/clip-all.argb32.ref.png [new file with mode: 0644]
test/reference/clip-all.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-all.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-all.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-all.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-aa.argb32.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-aa.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-aa.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-aa.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-aa.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-mono.argb32.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-mono.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-mono.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-mono.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-complex-shape-eo-mono.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-contexts.argb32.ref.png [new file with mode: 0644]
test/reference/clip-contexts.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-contexts.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-contexts.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-contexts.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-device-offset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-device-offset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-device-offset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-disjoint-hatching.argb32.ref.png [new file with mode: 0644]
test/reference/clip-disjoint-hatching.base.argb32.ref.png
test/reference/clip-disjoint-hatching.base.rgb24.ref.png
test/reference/clip-disjoint-hatching.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-disjoint-hatching.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-disjoint-hatching.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-disjoint-hatching.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-disjoint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-disjoint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-disjoint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-disjoint.ref.png
test/reference/clip-empty-group.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty-group.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty-group.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty-group.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-empty-group.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-empty-save.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty-save.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty-save.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty-save.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-empty-save.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-empty.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-empty.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-empty.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill-eo-unbounded.argb32.ref.png
test/reference/clip-fill-eo-unbounded.base.argb32.ref.png
test/reference/clip-fill-eo-unbounded.base.rgb24.ref.png
test/reference/clip-fill-eo-unbounded.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-eo-unbounded.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill-eo-unbounded.rgb24.ref.png
test/reference/clip-fill-no-op.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-no-op.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-no-op.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-no-op.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill-no-op.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill-nz-unbounded.argb32.ref.png
test/reference/clip-fill-nz-unbounded.base.argb32.ref.png
test/reference/clip-fill-nz-unbounded.base.rgb24.ref.png
test/reference/clip-fill-nz-unbounded.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-nz-unbounded.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill-nz-unbounded.rgb24.ref.png
test/reference/clip-fill-rule-pixel-aligned.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-rule-pixel-aligned.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-rule-pixel-aligned.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-rule-pixel-aligned.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill-rule-pixel-aligned.rgb24.ref.png
test/reference/clip-fill-rule.argb32.ref.png
test/reference/clip-fill-rule.base.argb32.ref.png
test/reference/clip-fill-rule.base.rgb24.ref.png
test/reference/clip-fill-rule.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-rule.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill-rule.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill-rule.rgb24.ref.png
test/reference/clip-fill.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill.base.argb32.ref.png
test/reference/clip-fill.base.rgb24.ref.png
test/reference/clip-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-aligned-rectangles.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-aligned-rectangles.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-aligned-rectangles.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-aligned-rectangles.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-aligned-rectangles.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-circles.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-circles.base.argb32.ref.png
test/reference/clip-group-shapes-circles.base.rgb24.ref.png
test/reference/clip-group-shapes-circles.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-circles.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-circles.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-circles.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-unaligned-rectangles.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-unaligned-rectangles.base.argb32.ref.png
test/reference/clip-group-shapes-unaligned-rectangles.base.rgb24.ref.png
test/reference/clip-group-shapes-unaligned-rectangles.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-unaligned-rectangles.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-unaligned-rectangles.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-group-shapes-unaligned-rectangles.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-image.argb32.ref.png [new file with mode: 0644]
test/reference/clip-image.base.argb32.ref.png
test/reference/clip-image.base.rgb24.ref.png
test/reference/clip-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-image.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-intersect.argb32.ref.png [new file with mode: 0644]
test/reference/clip-intersect.base.argb32.ref.png
test/reference/clip-intersect.base.rgb24.ref.png
test/reference/clip-intersect.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-intersect.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-intersect.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-intersect.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-mixed-antialias.argb32.ref.png [new file with mode: 0644]
test/reference/clip-mixed-antialias.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-mixed-antialias.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-mixed-antialias.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-mixed-antialias.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-nesting.argb32.ref.png
test/reference/clip-nesting.base.argb32.ref.png
test/reference/clip-nesting.base.rgb24.ref.png
test/reference/clip-nesting.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-nesting.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-nesting.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-nesting.rgb24.ref.png
test/reference/clip-operator.argb32.ref.png
test/reference/clip-operator.base.argb32.ref.png
test/reference/clip-operator.base.rgb24.ref.png
test/reference/clip-operator.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-operator.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-operator.rgb24.ref.png
test/reference/clip-operator.traps.argb32.ref.png
test/reference/clip-operator.traps.rgb24.ref.png
test/reference/clip-polygons.argb32.ref.png [new file with mode: 0644]
test/reference/clip-polygons.base.argb32.ref.png [new file with mode: 0644]
test/reference/clip-polygons.base.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-polygons.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-polygons.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-polygons.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-polygons.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-polygons.traps.argb32.ref.png [new file with mode: 0644]
test/reference/clip-polygons.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-push-group.argb32.ref.png [new file with mode: 0644]
test/reference/clip-push-group.base.argb32.ref.png
test/reference/clip-push-group.base.rgb24.ref.png
test/reference/clip-push-group.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-push-group.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-push-group.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-push-group.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.base.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.base.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.traps.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rectilinear.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rotate-image-surface-paint.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rotate-image-surface-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rotate-image-surface-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-rotate-image-surface-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rotate-image-surface-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rotate-image-surface-paint.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-rotate-image-surface-paint.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-shape.argb32.ref.png [new file with mode: 0644]
test/reference/clip-shape.base.argb32.ref.png
test/reference/clip-shape.base.rgb24.ref.png
test/reference/clip-shape.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-shape.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-shape.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-shape.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-stroke-no-op.argb32.ref.png [new file with mode: 0644]
test/reference/clip-stroke-no-op.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-stroke-no-op.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-stroke-no-op.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-stroke-no-op.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-stroke-unbounded.argb32.ref.png
test/reference/clip-stroke-unbounded.base.argb32.ref.png
test/reference/clip-stroke-unbounded.base.rgb24.ref.png
test/reference/clip-stroke-unbounded.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-stroke-unbounded.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-stroke-unbounded.rgb24.ref.png
test/reference/clip-stroke.base.argb32.ref.png
test/reference/clip-stroke.base.rgb24.ref.png
test/reference/clip-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-stroke.ref.png
test/reference/clip-text.argb32.ref.png [new file with mode: 0644]
test/reference/clip-text.base.argb32.ref.png
test/reference/clip-text.base.rgb24.ref.png
test/reference/clip-text.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-text.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-text.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-text.traps.argb32.ref.png
test/reference/clip-text.traps.rgb24.ref.png
test/reference/clip-twice-rectangle.argb32.ref.png [new file with mode: 0644]
test/reference/clip-twice-rectangle.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-twice-rectangle.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-twice-rectangle.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-twice-rectangle.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-twice.argb32.ref.png
test/reference/clip-twice.base.argb32.ref.png
test/reference/clip-twice.base.rgb24.ref.png
test/reference/clip-twice.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-twice.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-twice.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-twice.rgb24.ref.png
test/reference/clip-unbounded.argb32.ref.png [new file with mode: 0644]
test/reference/clip-unbounded.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clip-unbounded.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clip-unbounded.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/clip-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/clip-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/clipped-group.argb32.ref.png [new file with mode: 0644]
test/reference/clipped-group.base.argb32.ref.png
test/reference/clipped-group.base.rgb24.ref.png
test/reference/clipped-group.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clipped-group.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clipped-group.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clipped-group.rgb24.ref.png [new file with mode: 0644]
test/reference/clipped-surface.argb32.ref.png [new file with mode: 0644]
test/reference/clipped-surface.egl.argb32.ref.png [new file with mode: 0644]
test/reference/clipped-surface.mask.argb32.ref.png [new file with mode: 0644]
test/reference/clipped-surface.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/clipped-surface.rgb24.ref.png [new file with mode: 0644]
test/reference/close-path-current-point.argb32.ref.png [new file with mode: 0644]
test/reference/close-path-current-point.egl.argb32.ref.png [new file with mode: 0644]
test/reference/close-path-current-point.mask.argb32.ref.png [new file with mode: 0644]
test/reference/close-path-current-point.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/close-path-current-point.rgb24.ref.png [new file with mode: 0644]
test/reference/close-path.argb32.ref.png [new file with mode: 0644]
test/reference/close-path.egl.argb32.ref.png [new file with mode: 0644]
test/reference/close-path.mask.argb32.ref.png [new file with mode: 0644]
test/reference/close-path.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/close-path.rgb24.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over-repeat.mask.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over-repeat.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over.egl.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over.mask.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-over.rgb24.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-source.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/composite-integer-translate-source.rgb24.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.argb32.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.base.argb32.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.base.rgb24.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.rgb24.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.traps.argb32.ref.png [new file with mode: 0644]
test/reference/copy-disjoint.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/copy-path.argb32.ref.png [new file with mode: 0644]
test/reference/copy-path.egl.argb32.ref.png [new file with mode: 0644]
test/reference/copy-path.mask.argb32.ref.png [new file with mode: 0644]
test/reference/copy-path.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/copy-path.rgb24.ref.png [new file with mode: 0644]
test/reference/create-from-png-stream.argb32.ref.png [new file with mode: 0644]
test/reference/create-from-png-stream.egl.argb32.ref.png [new file with mode: 0644]
test/reference/create-from-png-stream.mask.argb32.ref.png [new file with mode: 0644]
test/reference/create-from-png-stream.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/create-from-png-stream.rgb24.ref.png [new file with mode: 0644]
test/reference/create-from-png.argb32.ref.png [new file with mode: 0644]
test/reference/create-from-png.egl.argb32.ref.png [new file with mode: 0644]
test/reference/create-from-png.mask.argb32.ref.png [new file with mode: 0644]
test/reference/create-from-png.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/create-from-png.rgb24.ref.png [new file with mode: 0644]
test/reference/create-from-png.traps.argb32.ref.png [new file with mode: 0644]
test/reference/create-from-png.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/culled-glyphs.argb32.ref.png [new file with mode: 0644]
test/reference/culled-glyphs.base.argb32.ref.png
test/reference/culled-glyphs.base.rgb24.ref.png
test/reference/culled-glyphs.mask.argb32.ref.png [new file with mode: 0644]
test/reference/culled-glyphs.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/culled-glyphs.rgb24.ref.png [new file with mode: 0644]
test/reference/culled-glyphs.traps.argb32.ref.png
test/reference/culled-glyphs.traps.rgb24.ref.png
test/reference/curve-to-as-line-to.argb32.ref.png [new file with mode: 0644]
test/reference/curve-to-as-line-to.egl.argb32.ref.png [new file with mode: 0644]
test/reference/curve-to-as-line-to.mask.argb32.ref.png [new file with mode: 0644]
test/reference/curve-to-as-line-to.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/curve-to-as-line-to.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-caps-joins.argb32.ref.png [new file with mode: 0644]
test/reference/dash-caps-joins.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-caps-joins.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-caps-joins.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-caps-joins.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-curve.argb32.ref.png [new file with mode: 0644]
test/reference/dash-curve.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-curve.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-curve.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-curve.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-infinite-loop.argb32.ref.png [new file with mode: 0644]
test/reference/dash-infinite-loop.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-infinite-loop.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-infinite-loop.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-infinite-loop.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-no-dash.argb32.ref.png [new file with mode: 0644]
test/reference/dash-no-dash.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-no-dash.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-no-dash.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-no-dash.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-offset-negative.argb32.ref.png [new file with mode: 0644]
test/reference/dash-offset-negative.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-offset-negative.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-offset-negative.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-offset-negative.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-offset.argb32.ref.png [new file with mode: 0644]
test/reference/dash-offset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-offset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-offset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-offset.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-scale.argb32.ref.png [new file with mode: 0644]
test/reference/dash-scale.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-scale.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-scale.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-scale.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-state.argb32.ref.png [new file with mode: 0644]
test/reference/dash-state.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-state.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-state.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-state.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-zero-length.argb32.ref.png [new file with mode: 0644]
test/reference/dash-zero-length.egl.argb32.ref.png [new file with mode: 0644]
test/reference/dash-zero-length.mask.argb32.ref.png [new file with mode: 0644]
test/reference/dash-zero-length.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/dash-zero-length.rgb24.ref.png
test/reference/degenerate-arc.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-arc.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-arc.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-arc.ref.png
test/reference/degenerate-arcs.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-arcs.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-arcs.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-arcs.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-arcs.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-curve-to.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-curve-to.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-curve-to.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-curve-to.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-curve-to.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-dash.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-dash.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-dash.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-dash.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-dash.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-linear-gradient.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-linear-gradient.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-linear-gradient.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-linear-gradient.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-linear-gradient.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-path.argb32.ref.png
test/reference/degenerate-path.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-path.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-path.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-path.rgb24.ref.png
test/reference/degenerate-pen.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-pen.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-pen.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-pen.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-pen.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-radial-gradient.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-radial-gradient.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-radial-gradient.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-radial-gradient.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-radial-gradient.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-rel-curve-to.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-rel-curve-to.egl.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-rel-curve-to.mask.argb32.ref.png [new file with mode: 0644]
test/reference/degenerate-rel-curve-to.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-rel-curve-to.rgb24.ref.png [new file with mode: 0644]
test/reference/degenerate-solid-dash.ref.png [new file with mode: 0644]
test/reference/device-offset-fractional.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-fractional.egl.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-fractional.mask.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-fractional.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/device-offset-fractional.rgb24.ref.png [new file with mode: 0644]
test/reference/device-offset-positive.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-positive.egl.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-positive.mask.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-positive.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/device-offset-positive.rgb24.ref.png
test/reference/device-offset-scale.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-scale.egl.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-scale.mask.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset-scale.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/device-offset-scale.rgb24.ref.png [new file with mode: 0644]
test/reference/device-offset.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/device-offset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/device-offset.rgb24.ref.png
test/reference/drunkard-tails.argb32.ref.png [new file with mode: 0644]
test/reference/drunkard-tails.egl.argb32.ref.png [new file with mode: 0644]
test/reference/drunkard-tails.mask.argb32.ref.png [new file with mode: 0644]
test/reference/drunkard-tails.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/drunkard-tails.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-pad-border.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad-border.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad-border.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad-border.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-pad-border.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-pad-similar.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad-similar.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad-similar.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-pad-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-pad.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extend-pad.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-pad.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-reflect-similar.argb32.ref.png [new file with mode: 0644]
test/reference/extend-reflect-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extend-reflect-similar.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extend-reflect-similar.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-reflect-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-reflect.argb32.ref.png [new file with mode: 0644]
test/reference/extend-reflect.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extend-reflect.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extend-reflect.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-reflect.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-repeat-similar.argb32.ref.png [new file with mode: 0644]
test/reference/extend-repeat-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extend-repeat-similar.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extend-repeat-similar.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-repeat-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/extend-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extend-repeat.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extend-repeat.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extend-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/extended-blend-alpha-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-alpha-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-alpha-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extended-blend-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extended-blend-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extended-blend-solid-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-solid-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-solid-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extended-blend-solid.argb32.ref.png
test/reference/extended-blend-solid.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-solid.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend-solid.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/extended-blend.argb32.ref.png
test/reference/extended-blend.egl.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend.mask.argb32.ref.png [new file with mode: 0644]
test/reference/extended-blend.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fallback-resolution.ppi144x144.ref.png
test/reference/fallback-resolution.ppi144x72.ref.png
test/reference/fallback-resolution.ppi288x72.ref.png
test/reference/fallback-resolution.ppi576x72.ref.png
test/reference/fallback-resolution.ppi72x144.ref.png
test/reference/fallback-resolution.ppi72x288.ref.png
test/reference/fallback-resolution.ppi72x576.ref.png
test/reference/fallback-resolution.ppi72x72.ref.png
test/reference/fallback.argb32.ref.png [new file with mode: 0644]
test/reference/fallback.base.argb32.ref.png [new file with mode: 0644]
test/reference/fallback.base.rgb24.ref.png [new file with mode: 0644]
test/reference/fallback.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fallback.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/fallback.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fallback.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/fallback.traps.argb32.ref.png [new file with mode: 0644]
test/reference/fallback.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-alpha-pattern.argb32.ref.png [new file with mode: 0644]
test/reference/fill-alpha-pattern.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-alpha-pattern.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-alpha-pattern.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-alpha-pattern.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/fill-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha-add.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha-add.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha-add.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha-add.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha-add.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke.argb32.ref.png
test/reference/fill-and-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-and-stroke.rgb24.ref.png
test/reference/fill-degenerate-sort-order.argb32.ref.png
test/reference/fill-degenerate-sort-order.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-degenerate-sort-order.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-degenerate-sort-order.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-degenerate-sort-order.rgb24.ref.png
test/reference/fill-disjoint.argb32.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.base.argb32.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.base.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.traps.argb32.ref.png [new file with mode: 0644]
test/reference/fill-disjoint.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-empty.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-empty.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-empty.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-image.argb32.ref.png [new file with mode: 0644]
test/reference/fill-image.base.argb32.ref.png
test/reference/fill-image.base.rgb24.ref.png
test/reference/fill-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-image.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-image.traps.argb32.ref.png
test/reference/fill-image.traps.rgb24.ref.png
test/reference/fill-missed-stop.argb32.ref.png [new file with mode: 0644]
test/reference/fill-missed-stop.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-missed-stop.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-missed-stop.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-missed-stop.rgb24.ref.png
test/reference/fill-rule.argb32.ref.png [new file with mode: 0644]
test/reference/fill-rule.egl.argb32.ref.png [new file with mode: 0644]
test/reference/fill-rule.mask.argb32.ref.png [new file with mode: 0644]
test/reference/fill-rule.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-rule.rgb24.ref.png
test/reference/fill-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/fill-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/fill-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/filter-bilinear-extents.argb32.ref.png [new file with mode: 0644]
test/reference/filter-bilinear-extents.egl.argb32.ref.png [new file with mode: 0644]
test/reference/filter-bilinear-extents.mask.argb32.ref.png [new file with mode: 0644]
test/reference/filter-bilinear-extents.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/filter-bilinear-extents.rgb24.ref.png [new file with mode: 0644]
test/reference/filter-nearest-offset.argb32.ref.png [new file with mode: 0644]
test/reference/filter-nearest-offset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/filter-nearest-offset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/filter-nearest-offset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/filter-nearest-offset.rgb24.ref.png [new file with mode: 0644]
test/reference/filter-nearest-transformed.argb32.ref.png [new file with mode: 0644]
test/reference/filter-nearest-transformed.egl.argb32.ref.png [new file with mode: 0644]
test/reference/filter-nearest-transformed.mask.argb32.ref.png [new file with mode: 0644]
test/reference/filter-nearest-transformed.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/filter-nearest-transformed.rgb24.ref.png [new file with mode: 0644]
test/reference/finer-grained-fallbacks.argb32.ref.png
test/reference/finer-grained-fallbacks.egl.argb32.ref.png [new file with mode: 0644]
test/reference/finer-grained-fallbacks.mask.argb32.ref.png [new file with mode: 0644]
test/reference/finer-grained-fallbacks.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/finer-grained-fallbacks.rgb24.ref.png
test/reference/font-matrix-translation.argb32.ref.png [new file with mode: 0644]
test/reference/font-matrix-translation.base.argb32.ref.png
test/reference/font-matrix-translation.base.rgb24.ref.png
test/reference/font-matrix-translation.mask.argb32.ref.png [new file with mode: 0644]
test/reference/font-matrix-translation.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/font-matrix-translation.rgb24.ref.png [new file with mode: 0644]
test/reference/font-matrix-translation.traps.argb32.ref.png
test/reference/font-matrix-translation.traps.ref.png [new file with mode: 0644]
test/reference/font-matrix-translation.traps.rgb24.ref.png
test/reference/ft-show-glyphs-positioning.argb32.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-positioning.base.argb32.ref.png
test/reference/ft-show-glyphs-positioning.base.rgb24.ref.png
test/reference/ft-show-glyphs-positioning.mask.argb32.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-positioning.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-positioning.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-positioning.traps.argb32.ref.png
test/reference/ft-show-glyphs-positioning.traps.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-positioning.traps.rgb24.ref.png
test/reference/ft-show-glyphs-table.argb32.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-table.base.argb32.ref.png
test/reference/ft-show-glyphs-table.base.rgb24.ref.png
test/reference/ft-show-glyphs-table.mask.argb32.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-table.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-table.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-table.traps.argb32.ref.png
test/reference/ft-show-glyphs-table.traps.ref.png [new file with mode: 0644]
test/reference/ft-show-glyphs-table.traps.rgb24.ref.png
test/reference/ft-text-antialias-none.argb32.ref.png [new file with mode: 0644]
test/reference/ft-text-antialias-none.mask.argb32.ref.png [new file with mode: 0644]
test/reference/ft-text-antialias-none.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-text-antialias-none.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type1.argb32.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type1.mask.argb32.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type1.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type1.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type3.argb32.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type3.mask.argb32.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type3.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/ft-text-vertical-layout-type3.rgb24.ref.png [new file with mode: 0644]
test/reference/get-group-target.argb32.ref.png [new file with mode: 0644]
test/reference/get-group-target.egl.argb32.ref.png [new file with mode: 0644]
test/reference/get-group-target.mask.argb32.ref.png [new file with mode: 0644]
test/reference/get-group-target.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/get-group-target.rgb24.ref.png [new file with mode: 0644]
test/reference/gl-surface-source.base.argb32.ref.png [new file with mode: 0644]
test/reference/gl-surface-source.base.rgb24.ref.png [new file with mode: 0644]
test/reference/gl-surface-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/gl-surface-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/gl-surface-source.traps.argb32.ref.png [new file with mode: 0644]
test/reference/gl-surface-source.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/glyph-cache-pressure.argb32.ref.png [new file with mode: 0644]
test/reference/glyph-cache-pressure.base.argb32.ref.png
test/reference/glyph-cache-pressure.base.rgb24.ref.png
test/reference/glyph-cache-pressure.mask.argb32.ref.png [new file with mode: 0644]
test/reference/glyph-cache-pressure.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/glyph-cache-pressure.rgb24.ref.png [new file with mode: 0644]
test/reference/glyph-cache-pressure.traps.argb32.ref.png
test/reference/glyph-cache-pressure.traps.ref.png [new file with mode: 0644]
test/reference/glyph-cache-pressure.traps.rgb24.ref.png
test/reference/gradient-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/gradient-constant-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-constant-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-constant-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-constant-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops.egl.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops.mask.argb32.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/gradient-zero-stops.rgb24.ref.png
test/reference/group-clip.argb32.ref.png [new file with mode: 0644]
test/reference/group-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/group-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/group-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/group-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/group-paint.argb32.ref.png [new file with mode: 0644]
test/reference/group-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/group-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/group-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/group-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/group-unaligned.argb32.ref.png [new file with mode: 0644]
test/reference/group-unaligned.egl.argb32.ref.png [new file with mode: 0644]
test/reference/group-unaligned.mask.argb32.ref.png [new file with mode: 0644]
test/reference/group-unaligned.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/group-unaligned.rgb24.ref.png [new file with mode: 0644]
test/reference/halo-transform.argb32.ref.png [new file with mode: 0644]
test/reference/halo-transform.base.argb32.ref.png
test/reference/halo-transform.base.rgb24.ref.png
test/reference/halo-transform.mask.argb32.ref.png [new file with mode: 0644]
test/reference/halo-transform.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/halo-transform.rgb24.ref.png [new file with mode: 0644]
test/reference/halo-transform.traps.argb32.ref.png
test/reference/halo-transform.traps.ref.png [new file with mode: 0644]
test/reference/halo-transform.traps.rgb24.ref.png
test/reference/halo.argb32.ref.png [new file with mode: 0644]
test/reference/halo.base.argb32.ref.png
test/reference/halo.base.rgb24.ref.png
test/reference/halo.mask.argb32.ref.png [new file with mode: 0644]
test/reference/halo.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/halo.rgb24.ref.png [new file with mode: 0644]
test/reference/halo.traps.argb32.ref.png
test/reference/halo.traps.ref.png [new file with mode: 0644]
test/reference/halo.traps.rgb24.ref.png
test/reference/hatchings.base.argb32.ref.png
test/reference/hatchings.base.rgb24.ref.png
test/reference/hatchings.egl.argb32.ref.png [new file with mode: 0644]
test/reference/hatchings.mask.argb32.ref.png [new file with mode: 0644]
test/reference/hatchings.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/hatchings.ref.png
test/reference/horizontal-clip.argb32.ref.png [new file with mode: 0644]
test/reference/horizontal-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/horizontal-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/horizontal-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/horizontal-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/huge-linear.argb32.ref.png [new file with mode: 0644]
test/reference/huge-linear.egl.argb32.ref.png [new file with mode: 0644]
test/reference/huge-linear.mask.argb32.ref.png [new file with mode: 0644]
test/reference/huge-linear.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/huge-linear.rgb24.ref.png [new file with mode: 0644]
test/reference/huge-radial.argb32.ref.png [new file with mode: 0644]
test/reference/huge-radial.egl.argb32.ref.png [new file with mode: 0644]
test/reference/huge-radial.mask.argb32.ref.png [new file with mode: 0644]
test/reference/huge-radial.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/huge-radial.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-aligned.argb32.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-aligned.egl.argb32.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-aligned.mask.argb32.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-aligned.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-aligned.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-aligned.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-aligned.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-unaligned.argb32.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-unaligned.egl.argb32.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-unaligned.mask.argb32.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-unaligned.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-unaligned.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-unaligned.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/image-bug-710072-unaligned.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/image-surface-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/image-surface-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/image-surface-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/image-surface-source.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/image-surface-source.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/implicit-close.argb32.ref.png [new file with mode: 0644]
test/reference/implicit-close.egl.argb32.ref.png [new file with mode: 0644]
test/reference/implicit-close.mask.argb32.ref.png [new file with mode: 0644]
test/reference/implicit-close.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/implicit-close.rgb24.ref.png [new file with mode: 0644]
test/reference/infinite-join.argb32.ref.png [new file with mode: 0644]
test/reference/infinite-join.egl.argb32.ref.png [new file with mode: 0644]
test/reference/infinite-join.mask.argb32.ref.png [new file with mode: 0644]
test/reference/infinite-join.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/infinite-join.rgb24.ref.png [new file with mode: 0644]
test/reference/inverse-text.base.argb32.ref.png
test/reference/inverse-text.base.rgb24.ref.png
test/reference/inverse-text.mask.argb32.ref.png [new file with mode: 0644]
test/reference/inverse-text.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/inverse-text.traps.argb32.ref.png
test/reference/inverse-text.traps.ref.png [new file with mode: 0644]
test/reference/inverse-text.traps.rgb24.ref.png
test/reference/inverted-clip.base.xfail.png [new file with mode: 0644]
test/reference/inverted-clip.traps.xfail.png [new file with mode: 0644]
test/reference/inverted-clip.xfail.png [new file with mode: 0644]
test/reference/joins-loop.argb32.ref.png [new file with mode: 0644]
test/reference/joins-loop.egl.argb32.ref.png [new file with mode: 0644]
test/reference/joins-loop.mask.argb32.ref.png [new file with mode: 0644]
test/reference/joins-loop.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/joins-loop.rgb24.ref.png [new file with mode: 0644]
test/reference/joins-retrace.argb32.ref.png [new file with mode: 0644]
test/reference/joins-retrace.egl.argb32.ref.png [new file with mode: 0644]
test/reference/joins-retrace.mask.argb32.ref.png [new file with mode: 0644]
test/reference/joins-retrace.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/joins-retrace.rgb24.ref.png [new file with mode: 0644]
test/reference/joins-star.argb32.ref.png [new file with mode: 0644]
test/reference/joins-star.egl.argb32.ref.png [new file with mode: 0644]
test/reference/joins-star.mask.argb32.ref.png [new file with mode: 0644]
test/reference/joins-star.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/joins-star.rgb24.ref.png [new file with mode: 0644]
test/reference/joins.argb32.ref.png [new file with mode: 0644]
test/reference/joins.egl.argb32.ref.png [new file with mode: 0644]
test/reference/joins.mask.argb32.ref.png [new file with mode: 0644]
test/reference/joins.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/joins.rgb24.ref.png [new file with mode: 0644]
test/reference/large-clip.argb32.ref.png [new file with mode: 0644]
test/reference/large-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/large-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/large-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/large-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/large-font.argb32.ref.png [new file with mode: 0644]
test/reference/large-font.egl.argb32.ref.png [new file with mode: 0644]
test/reference/large-font.mask.argb32.ref.png [new file with mode: 0644]
test/reference/large-font.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/large-font.rgb24.ref.png [new file with mode: 0644]
test/reference/large-source-roi.argb32.ref.png [new file with mode: 0644]
test/reference/large-source-roi.egl.argb32.ref.png [new file with mode: 0644]
test/reference/large-source-roi.mask.argb32.ref.png [new file with mode: 0644]
test/reference/large-source-roi.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/large-source-roi.rgb24.ref.png [new file with mode: 0644]
test/reference/large-source.argb32.ref.png [new file with mode: 0644]
test/reference/large-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/large-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/large-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/large-source.rgb24.ref.png [new file with mode: 0644]
test/reference/large-twin-antialias-mixed.argb32.ref.png [new file with mode: 0644]
test/reference/large-twin-antialias-mixed.base.argb32.ref.png
test/reference/large-twin-antialias-mixed.base.rgb24.ref.png
test/reference/large-twin-antialias-mixed.egl.argb32.ref.png [new file with mode: 0644]
test/reference/large-twin-antialias-mixed.mask.argb32.ref.png [new file with mode: 0644]
test/reference/large-twin-antialias-mixed.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/large-twin-antialias-mixed.rgb24.ref.png [new file with mode: 0644]
test/reference/large-twin-antialias-mixed.traps.argb32.ref.png
test/reference/large-twin-antialias-mixed.traps.rgb24.ref.png
test/reference/leaky-dash.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dash.egl.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dash.mask.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dash.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/leaky-dash.rgb24.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-rectangle.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-rectangle.egl.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-rectangle.mask.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-rectangle.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-rectangle.rgb24.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-stroke.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/leaky-dashed-stroke.rgb24.ref.png [new file with mode: 0644]
test/reference/leaky-polygon.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-polygon.egl.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-polygon.mask.argb32.ref.png [new file with mode: 0644]
test/reference/leaky-polygon.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/leaky-polygon.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-dashed.base.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-dashed.base.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-dashed.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-dashed.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-dashed.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-dashed.ref.png
test/reference/line-width-large-overlap-dashed.traps.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-dashed.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.base.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.base.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.traps.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flipped.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.base.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.base.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.traps.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-flopped.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.base.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.base.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.traps.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-offset.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.base.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.base.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.traps.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap-rotated.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.base.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.base.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.traps.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-large-overlap.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-dashed.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-dashed.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-dashed.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-dashed.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flipped.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flipped.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flipped.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flipped.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flipped.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flopped.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flopped.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flopped.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flopped.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-flopped.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-offset.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-offset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-offset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-offset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-offset.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-offset.traps.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-offset.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-rotated.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-rotated.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-rotated.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-rotated.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap-rotated.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-overlap.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-overlap.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-scale.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-scale.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-scale.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-scale.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-scale.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-tolerance.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-tolerance.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-tolerance.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width-tolerance.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width-tolerance.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width.argb32.ref.png [new file with mode: 0644]
test/reference/line-width.egl.argb32.ref.png [new file with mode: 0644]
test/reference/line-width.mask.argb32.ref.png [new file with mode: 0644]
test/reference/line-width.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/line-width.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-extend.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-extend.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-extend.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-extend.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-extend.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-large.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-large.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-large.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-large.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-large.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-one-stop.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-one-stop.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-one-stop.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-reflect.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-reflect.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-reflect.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-reflect.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-reflect.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-subset.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-subset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-subset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient-subset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient-subset.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-gradient.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-gradient.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-step-function.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-step-function.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-step-function.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-uniform.argb32.ref.png [new file with mode: 0644]
test/reference/linear-uniform.egl.argb32.ref.png [new file with mode: 0644]
test/reference/linear-uniform.mask.argb32.ref.png [new file with mode: 0644]
test/reference/linear-uniform.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/linear-uniform.rgb24.ref.png [new file with mode: 0644]
test/reference/long-dashed-lines.argb32.ref.png [new file with mode: 0644]
test/reference/long-dashed-lines.egl.argb32.ref.png [new file with mode: 0644]
test/reference/long-dashed-lines.mask.argb32.ref.png [new file with mode: 0644]
test/reference/long-dashed-lines.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/long-dashed-lines.rgb24.ref.png [new file with mode: 0644]
test/reference/long-lines.egl.argb32.ref.png [new file with mode: 0644]
test/reference/long-lines.mask.argb32.ref.png [new file with mode: 0644]
test/reference/long-lines.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/map-all-to-image.argb32.ref.png [new file with mode: 0644]
test/reference/map-all-to-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/map-all-to-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/map-all-to-image.rgb24.ref.png [new file with mode: 0644]
test/reference/map-all-to-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/map-all-to-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/map-all-to-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/map-all-to-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/map-bit-to-image.argb32.ref.png [new file with mode: 0644]
test/reference/map-bit-to-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/map-bit-to-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/map-bit-to-image.rgb24.ref.png [new file with mode: 0644]
test/reference/map-bit-to-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/map-bit-to-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/map-bit-to-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/map-bit-to-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/map-to-image-fill.argb32.ref.png [new file with mode: 0644]
test/reference/map-to-image-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/map-to-image-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/map-to-image-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/map-to-image-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/map-to-image-fill.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/map-to-image-fill.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-alpha.argb32.ref.png
test/reference/mask-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mask-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mask-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-alpha.rgb24.ref.png
test/reference/mask-ctm.argb32.ref.png [new file with mode: 0644]
test/reference/mask-ctm.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mask-ctm.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mask-ctm.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-ctm.rgb24.ref.png
test/reference/mask-surface-ctm.argb32.ref.png [new file with mode: 0644]
test/reference/mask-surface-ctm.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mask-surface-ctm.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mask-surface-ctm.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-surface-ctm.rgb24.ref.png
test/reference/mask-transformed-image.argb32.ref.png [new file with mode: 0644]
test/reference/mask-transformed-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mask-transformed-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mask-transformed-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-transformed-image.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-transformed-similar.argb32.ref.png [new file with mode: 0644]
test/reference/mask-transformed-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mask-transformed-similar.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mask-transformed-similar.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-transformed-similar.recording.ref.png [new file with mode: 0644]
test/reference/mask-transformed-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-transformed-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-transformed-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/mask-transformed-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/mask-transformed-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/mask.argb32.ref.png
test/reference/mask.base.argb32.ref.png
test/reference/mask.base.rgb24.ref.png
test/reference/mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mask.rgb24.ref.png
test/reference/mesh-pattern-accuracy.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-accuracy.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-accuracy.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-accuracy.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-accuracy.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-conical.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-conical.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-conical.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-conical.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-conical.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-control-points.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-control-points.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-control-points.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-control-points.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-control-points.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-fold.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-fold.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-fold.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-fold.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-fold.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-overlap.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-overlap.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-overlap.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-overlap.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-overlap.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-transformed.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-transformed.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-transformed.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-transformed.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern-transformed.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mesh-pattern.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mesh-pattern.rgb24.ref.png [new file with mode: 0644]
test/reference/mime-data.argb32.ref.png [new file with mode: 0644]
test/reference/mime-data.egl.argb32.ref.png [new file with mode: 0644]
test/reference/mime-data.mask.argb32.ref.png [new file with mode: 0644]
test/reference/mime-data.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/mime-data.rgb24.ref.png [new file with mode: 0644]
test/reference/miter-precision.argb32.ref.png [new file with mode: 0644]
test/reference/miter-precision.egl.argb32.ref.png [new file with mode: 0644]
test/reference/miter-precision.mask.argb32.ref.png [new file with mode: 0644]
test/reference/miter-precision.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/miter-precision.rgb24.ref.png [new file with mode: 0644]
test/reference/move-to-show-surface.argb32.ref.png [new file with mode: 0644]
test/reference/move-to-show-surface.egl.argb32.ref.png [new file with mode: 0644]
test/reference/move-to-show-surface.mask.argb32.ref.png [new file with mode: 0644]
test/reference/move-to-show-surface.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/move-to-show-surface.rgb24.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.argb32.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.base.argb32.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.base.rgb24.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.image16.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.ps.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.rgb24.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.traps.argb32.ref.png [new file with mode: 0644]
test/reference/negative-stride-image.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/new-sub-path.argb32.ref.png
test/reference/new-sub-path.egl.argb32.ref.png [new file with mode: 0644]
test/reference/new-sub-path.mask.argb32.ref.png [new file with mode: 0644]
test/reference/new-sub-path.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/new-sub-path.rgb24.ref.png
test/reference/nil-surface.argb32.ref.png [new file with mode: 0644]
test/reference/nil-surface.egl.argb32.ref.png [new file with mode: 0644]
test/reference/nil-surface.mask.argb32.ref.png [new file with mode: 0644]
test/reference/nil-surface.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/nil-surface.rgb24.ref.png
test/reference/operator-alpha-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/operator-alpha-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/operator-alpha-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/operator-alpha-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/operator-alpha-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/operator-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/operator-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/operator-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/operator-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/operator-alpha.rgb24.ref.png
test/reference/operator-clear.argb32.ref.png
test/reference/operator-clear.base.argb32.ref.png
test/reference/operator-clear.base.rgb24.ref.png
test/reference/operator-clear.mask.argb32.ref.png [new file with mode: 0644]
test/reference/operator-clear.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/operator-clear.rgb24.ref.png
test/reference/operator-clear.traps.argb32.ref.png
test/reference/operator-clear.traps.rgb24.ref.png
test/reference/operator-source.argb32.ref.png
test/reference/operator-source.base.argb32.ref.png
test/reference/operator-source.base.rgb24.ref.png
test/reference/operator-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/operator-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/operator-source.rgb24.ref.png
test/reference/operator-source.traps.argb32.ref.png
test/reference/operator-source.traps.rgb24.ref.png
test/reference/operator.argb32.ref.png [new file with mode: 0644]
test/reference/operator.egl.argb32.ref.png [new file with mode: 0644]
test/reference/operator.mask.argb32.ref.png [new file with mode: 0644]
test/reference/operator.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/operator.rgb24.ref.png
test/reference/over-above-source.argb32.ref.png [new file with mode: 0644]
test/reference/over-above-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/over-above-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/over-above-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/over-above-source.rgb24.ref.png
test/reference/over-around-source.argb32.ref.png [new file with mode: 0644]
test/reference/over-around-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/over-around-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/over-around-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/over-around-source.rgb24.ref.png
test/reference/over-below-source.argb32.ref.png [new file with mode: 0644]
test/reference/over-below-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/over-below-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/over-below-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/over-below-source.rgb24.ref.png
test/reference/over-between-source.argb32.ref.png [new file with mode: 0644]
test/reference/over-between-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/over-between-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/over-between-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/over-between-source.rgb24.ref.png
test/reference/overlapping-boxes.egl.argb32.ref.png [new file with mode: 0644]
test/reference/overlapping-boxes.mask.argb32.ref.png [new file with mode: 0644]
test/reference/overlapping-boxes.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/overlapping-dash-caps.argb32.ref.png [new file with mode: 0644]
test/reference/overlapping-dash-caps.egl.argb32.ref.png [new file with mode: 0644]
test/reference/overlapping-dash-caps.mask.argb32.ref.png [new file with mode: 0644]
test/reference/overlapping-dash-caps.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/overlapping-dash-caps.rgb24.ref.png [new file with mode: 0644]
test/reference/overlapping-glyphs.argb32.ref.png
test/reference/overlapping-glyphs.base.argb32.ref.png
test/reference/overlapping-glyphs.base.rgb24.ref.png
test/reference/overlapping-glyphs.egl.argb32.ref.png [new file with mode: 0644]
test/reference/overlapping-glyphs.mask.argb32.ref.png [new file with mode: 0644]
test/reference/overlapping-glyphs.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/overlapping-glyphs.rgb24.ref.png
test/reference/overlapping-glyphs.traps.argb32.ref.png
test/reference/overlapping-glyphs.traps.rgb24.ref.png
test/reference/paint-clip-fill-aa.argb32.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-aa.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-aa.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-aa.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-aa.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-mono.argb32.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-mono.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-mono.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-mono.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-clip-fill-mono.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/paint-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-repeat.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-repeat.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-source-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/paint-source-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-source-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-source-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-source-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip-mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip-mask.base.argb32.ref.png
test/reference/paint-with-alpha-clip-mask.base.rgb24.ref.png
test/reference/paint-with-alpha-clip-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip.base.argb32.ref.png
test/reference/paint-with-alpha-clip.base.rgb24.ref.png
test/reference/paint-with-alpha-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-solid-clip.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-solid-clip.base.argb32.ref.png
test/reference/paint-with-alpha-solid-clip.base.rgb24.ref.png
test/reference/paint-with-alpha-solid-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-solid-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-solid-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha-solid-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint-with-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/paint.argb32.ref.png [new file with mode: 0644]
test/reference/paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/paint.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-bottom.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-bottom.base.argb32.ref.png
test/reference/partial-clip-text-bottom.base.rgb24.ref.png
test/reference/partial-clip-text-bottom.egl.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-bottom.mask.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-bottom.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-bottom.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-bottom.traps.argb32.ref.png
test/reference/partial-clip-text-bottom.traps.rgb24.ref.png
test/reference/partial-clip-text-left.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-left.base.argb32.ref.png
test/reference/partial-clip-text-left.base.rgb24.ref.png
test/reference/partial-clip-text-left.egl.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-left.mask.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-left.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-left.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-left.traps.argb32.ref.png
test/reference/partial-clip-text-left.traps.rgb24.ref.png
test/reference/partial-clip-text-right.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-right.base.argb32.ref.png
test/reference/partial-clip-text-right.base.rgb24.ref.png
test/reference/partial-clip-text-right.egl.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-right.mask.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-right.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-right.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-right.traps.argb32.ref.png
test/reference/partial-clip-text-right.traps.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-right.traps.rgb24.ref.png
test/reference/partial-clip-text-top.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-top.base.argb32.ref.png
test/reference/partial-clip-text-top.base.rgb24.ref.png
test/reference/partial-clip-text-top.egl.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-top.mask.argb32.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-top.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-top.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-top.traps.argb32.ref.png
test/reference/partial-clip-text-top.traps.ref.png [new file with mode: 0644]
test/reference/partial-clip-text-top.traps.rgb24.ref.png
test/reference/partial-coverage-half-reference.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-half-reference.egl.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-half-reference.mask.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-half-reference.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-coverage-half-reference.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-coverage-reference.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-reference.egl.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-reference.mask.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-reference.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-coverage-reference.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-coverage-three-quarter-reference.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-three-quarter-reference.egl.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-three-quarter-reference.mask.argb32.ref.png [new file with mode: 0644]
test/reference/partial-coverage-three-quarter-reference.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/partial-coverage-three-quarter-reference.rgb24.ref.png [new file with mode: 0644]
test/reference/pass-through.argb32.ref.png [new file with mode: 0644]
test/reference/pass-through.base.argb32.ref.png [new file with mode: 0644]
test/reference/pass-through.base.rgb24.ref.png [new file with mode: 0644]
test/reference/pass-through.egl.argb32.ref.png [new file with mode: 0644]
test/reference/pass-through.mask.argb32.ref.png [new file with mode: 0644]
test/reference/pass-through.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pass-through.rgb24.ref.png
test/reference/pass-through.traps.argb32.ref.png [new file with mode: 0644]
test/reference/pass-through.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/path-append.argb32.ref.png [new file with mode: 0644]
test/reference/path-append.egl.argb32.ref.png [new file with mode: 0644]
test/reference/path-append.mask.argb32.ref.png [new file with mode: 0644]
test/reference/path-append.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/path-append.rgb24.ref.png [new file with mode: 0644]
test/reference/path-stroke-twice.argb32.ref.png [new file with mode: 0644]
test/reference/path-stroke-twice.egl.argb32.ref.png [new file with mode: 0644]
test/reference/path-stroke-twice.mask.argb32.ref.png [new file with mode: 0644]
test/reference/path-stroke-twice.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/path-stroke-twice.rgb24.ref.png [new file with mode: 0644]
test/reference/pattern-getters.argb32.ref.png [new file with mode: 0644]
test/reference/pattern-getters.egl.argb32.ref.png [new file with mode: 0644]
test/reference/pattern-getters.mask.argb32.ref.png [new file with mode: 0644]
test/reference/pattern-getters.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pattern-getters.rgb24.ref.png [new file with mode: 0644]
test/reference/pdf-isolated-group.base.argb32.ref.png [new file with mode: 0644]
test/reference/pdf-isolated-group.base.rgb24.ref.png [new file with mode: 0644]
test/reference/pdf-isolated-group.egl.argb32.ref.png [new file with mode: 0644]
test/reference/pdf-isolated-group.ref.png [new file with mode: 0644]
test/reference/pdf-surface-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/pdf-surface-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/pdf-surface-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pixman-rotate.argb32.ref.png [new file with mode: 0644]
test/reference/pixman-rotate.egl.argb32.ref.png [new file with mode: 0644]
test/reference/pixman-rotate.mask.argb32.ref.png [new file with mode: 0644]
test/reference/pixman-rotate.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pixman-rotate.rgb24.ref.png
test/reference/ps-surface-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/ps-surface-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/ps-surface-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pthread-same-source.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-same-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-same-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-same-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pthread-same-source.rgb24.ref.png [new file with mode: 0644]
test/reference/pthread-show-text.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-show-text.base.argb32.ref.png
test/reference/pthread-show-text.base.rgb24.ref.png
test/reference/pthread-show-text.mask.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-show-text.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pthread-show-text.rgb24.ref.png [new file with mode: 0644]
test/reference/pthread-show-text.traps.argb32.ref.png
test/reference/pthread-show-text.traps.ref.png [new file with mode: 0644]
test/reference/pthread-show-text.traps.rgb24.ref.png
test/reference/pthread-similar.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-similar.mask.argb32.ref.png [new file with mode: 0644]
test/reference/pthread-similar.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/pthread-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/push-group-color.argb32.ref.png [new file with mode: 0644]
test/reference/push-group-color.egl.argb32.ref.png [new file with mode: 0644]
test/reference/push-group-color.mask.argb32.ref.png [new file with mode: 0644]
test/reference/push-group-color.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/push-group-color.rgb24.ref.png [new file with mode: 0644]
test/reference/push-group-path-offset.argb32.ref.png [new file with mode: 0644]
test/reference/push-group-path-offset.egl.argb32.ref.png [new file with mode: 0644]
test/reference/push-group-path-offset.mask.argb32.ref.png [new file with mode: 0644]
test/reference/push-group-path-offset.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/push-group-path-offset.rgb24.ref.png [new file with mode: 0644]
test/reference/push-group.argb32.ref.png [new file with mode: 0644]
test/reference/push-group.egl.argb32.ref.png [new file with mode: 0644]
test/reference/push-group.mask.argb32.ref.png [new file with mode: 0644]
test/reference/push-group.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/push-group.rgb24.ref.png
test/reference/radial-gradient-extend.egl.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-extend.mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-extend.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask-source.traps.rgb24.ref.png
test/reference/radial-gradient-mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient-one-stop.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-one-stop.egl.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-one-stop.mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-one-stop.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient-one-stop.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient.egl.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient.mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-gradient.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-gradient.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-outer-focus.base.argb32.ref.png [new file with mode: 0644]
test/reference/radial-outer-focus.base.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-outer-focus.egl.argb32.ref.png [new file with mode: 0644]
test/reference/radial-outer-focus.mask.argb32.ref.png [new file with mode: 0644]
test/reference/radial-outer-focus.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/radial-outer-focus.traps.argb32.ref.png [new file with mode: 0644]
test/reference/radial-outer-focus.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/random-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/random-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/random-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/random-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/random-clip.ref.png
test/reference/random-clip.traps.argb32.ref.png
test/reference/random-clip.traps.rgb24.ref.png
test/reference/random-intersections-curves-eo.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-eo.egl.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-eo.mask.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-eo.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-eo.ref.png
test/reference/random-intersections-curves-eo.rgb24.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-nz.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-nz.egl.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-nz.mask.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-nz.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/random-intersections-curves-nz.ref.png
test/reference/random-intersections-curves-nz.rgb24.ref.png [new file with mode: 0644]
test/reference/random-intersections-eo.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-eo.egl.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-eo.mask.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-eo.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/random-intersections-eo.rgb24.ref.png [new file with mode: 0644]
test/reference/random-intersections-nonzero.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-nonzero.egl.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-nonzero.mask.argb32.ref.png [new file with mode: 0644]
test/reference/random-intersections-nonzero.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/random-intersections-nonzero.rgb24.ref.png [new file with mode: 0644]
test/reference/raster-source.argb32.ref.png [new file with mode: 0644]
test/reference/raster-source.base.argb32.ref.png [new file with mode: 0644]
test/reference/raster-source.base.rgb24.ref.png [new file with mode: 0644]
test/reference/raster-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/raster-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/raster-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/raster-source.ps.ref.png [new file with mode: 0644]
test/reference/raster-source.ref.png [new file with mode: 0644]
test/reference/raster-source.rgb24.ref.png [new file with mode: 0644]
test/reference/raster-source.traps.argb32.ref.png [new file with mode: 0644]
test/reference/raster-source.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-none-similar.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-none-similar.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-none-similar.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-none-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-none-similar.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-none-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-none.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-none.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-none.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-none.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-none.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-none.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-pad-similar.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-pad-similar.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-pad-similar.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-pad-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-pad-similar.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-pad-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-pad.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-pad.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-pad.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-pad.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-pad.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-pad.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect-similar.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect-similar.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect-similar.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect-similar.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-reflect.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat-similar.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat-similar.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat-similar.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat-similar.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-extend-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/record-fill-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record-fill-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-fill-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-fill-alpha.base.xfail.png [new file with mode: 0644]
test/reference/record-fill-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-fill-alpha.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-fill-alpha.ref.png
test/reference/record-fill-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record-fill-alpha.xfail.png [new file with mode: 0644]
test/reference/record-mesh.argb32.ref.png [new file with mode: 0644]
test/reference/record-mesh.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-mesh.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-mesh.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-mesh.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-mesh.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.base.xfail.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.ref.png
test/reference/record-paint-alpha-clip-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip-mask.xfail.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-solid-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-solid-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-solid-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-solid-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-solid-clip.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha-solid-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-paint.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/record-select-font-face.argb32.ref.png [new file with mode: 0644]
test/reference/record-select-font-face.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-select-font-face.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-select-font-face.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-select-font-face.ref.png
test/reference/record-select-font-face.rgb24.ref.png [new file with mode: 0644]
test/reference/record-self-intersecting.argb32.ref.png [new file with mode: 0644]
test/reference/record-self-intersecting.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-self-intersecting.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-self-intersecting.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record-self-intersecting.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-self-intersecting.rgb24.ref.png [new file with mode: 0644]
test/reference/record-text-transform.argb32.ref.png [new file with mode: 0644]
test/reference/record-text-transform.base.argb32.ref.png [new file with mode: 0644]
test/reference/record-text-transform.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record-text-transform.image16.rgb24.ref.png [new file with mode: 0644]
test/reference/record-text-transform.ref.png
test/reference/record-text-transform.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-fill-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-fill-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-fill-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-fill-alpha.base.xfail.png [new file with mode: 0644]
test/reference/record1414x-fill-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-fill-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-fill-alpha.xfail.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip-mask.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip-mask.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip-mask.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-solid-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-solid-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-solid-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-solid-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha-solid-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-select-font-face.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-select-font-face.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-select-font-face.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-select-font-face.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-select-font-face.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-self-intersecting.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-self-intersecting.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-self-intersecting.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-self-intersecting.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-self-intersecting.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-text-transform.base.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-text-transform.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record1414x-text-transform.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record1414x-text-transform.ref.png [new file with mode: 0644]
test/reference/record2x-fill-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-fill-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-fill-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-fill-alpha.base.xfail.png [new file with mode: 0644]
test/reference/record2x-fill-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-fill-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-fill-alpha.xfail.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip-mask.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip-mask.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip-mask.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-solid-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-solid-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-solid-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-solid-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha-solid-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-select-font-face.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-select-font-face.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-select-font-face.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-select-font-face.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-select-font-face.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-self-intersecting.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-self-intersecting.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-self-intersecting.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-self-intersecting.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-self-intersecting.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-text-transform.base.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-text-transform.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record2x-text-transform.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record2x-text-transform.ref.png [new file with mode: 0644]
test/reference/record90-fill-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record90-fill-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-fill-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-fill-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-fill-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-fill-alpha.xfail.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip-mask.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip-mask.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip-mask.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip-mask.xfail.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-clip.xfail.png [new file with mode: 0644]
test/reference/record90-paint-alpha-solid-clip.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-solid-clip.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-solid-clip.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-solid-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha-solid-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-select-font-face.argb32.ref.png [new file with mode: 0644]
test/reference/record90-select-font-face.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-select-font-face.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-select-font-face.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-select-font-face.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-self-intersecting.argb32.ref.png [new file with mode: 0644]
test/reference/record90-self-intersecting.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-self-intersecting.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-self-intersecting.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-self-intersecting.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-text-transform.argb32.ref.png [new file with mode: 0644]
test/reference/record90-text-transform.base.argb32.ref.png [new file with mode: 0644]
test/reference/record90-text-transform.base.rgb24.ref.png [new file with mode: 0644]
test/reference/record90-text-transform.egl.argb32.ref.png [new file with mode: 0644]
test/reference/record90-text-transform.rgb24.ref.png [new file with mode: 0644]
test/reference/recording-surface-extend-none.egl.argb32.ref.png [new file with mode: 0644]
test/reference/recording-surface-extend-pad.egl.argb32.ref.png [new file with mode: 0644]
test/reference/recording-surface-extend-reflect.egl.argb32.ref.png [new file with mode: 0644]
test/reference/recording-surface-extend-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/recording-surface-over.egl.argb32.ref.png [new file with mode: 0644]
test/reference/recording-surface-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rectangle-rounding-error.argb32.ref.png [new file with mode: 0644]
test/reference/rectangle-rounding-error.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rectangle-rounding-error.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rectangle-rounding-error.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rectangle-rounding-error.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash-scale-unaligned.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash-scale-unaligned.traps.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash-scale.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-dash.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-fill.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-grid.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-grid.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-grid.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-grid.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-grid.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-miter-limit.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-miter-limit.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-miter-limit.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-miter-limit.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-miter-limit.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-stroke.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rectilinear-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rectilinear-stroke.rgb24.ref.png [new file with mode: 0644]
test/reference/reflected-stroke.argb32.ref.png [new file with mode: 0644]
test/reference/reflected-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/reflected-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/reflected-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/reflected-stroke.rgb24.ref.png [new file with mode: 0644]
test/reference/rel-path.argb32.ref.png [new file with mode: 0644]
test/reference/rel-path.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rel-path.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rel-path.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rel-path.rgb24.ref.png
test/reference/rgb24-ignore-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/rgb24-ignore-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rgb24-ignore-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rgb24-ignore-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rgb24-ignore-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-clip-image-surface-paint.argb32.ref.png [new file with mode: 0644]
test/reference/rotate-clip-image-surface-paint.base.argb32.ref.png
test/reference/rotate-clip-image-surface-paint.base.rgb24.ref.png
test/reference/rotate-clip-image-surface-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rotate-clip-image-surface-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rotate-clip-image-surface-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-clip-image-surface-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-clip-image-surface-paint.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-clip-image-surface-paint.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-image-surface-paint.argb32.ref.png [new file with mode: 0644]
test/reference/rotate-image-surface-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rotate-image-surface-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rotate-image-surface-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-image-surface-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-image-surface-paint.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/rotate-image-surface-paint.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/rotated-clip.argb32.ref.png [new file with mode: 0644]
test/reference/rotated-clip.base.argb32.ref.png
test/reference/rotated-clip.base.rgb24.ref.png
test/reference/rotated-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rotated-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rotated-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rotated-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-fill.argb32.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-stroke.argb32.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/rounded-rectangle-stroke.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-down-source-surface-paint.argb32.ref.png [new file with mode: 0644]
test/reference/scale-down-source-surface-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/scale-down-source-surface-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/scale-down-source-surface-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-down-source-surface-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-offset-image.argb32.ref.png [new file with mode: 0644]
test/reference/scale-offset-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/scale-offset-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/scale-offset-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-offset-image.ref.png
test/reference/scale-offset-image.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-offset-similar.argb32.ref.png [new file with mode: 0644]
test/reference/scale-offset-similar.egl.argb32.ref.png [new file with mode: 0644]
test/reference/scale-offset-similar.mask.argb32.ref.png [new file with mode: 0644]
test/reference/scale-offset-similar.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-offset-similar.ref.png
test/reference/scale-offset-similar.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-offset-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-offset-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-offset-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/scale-offset-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-source-surface-paint.argb32.ref.png [new file with mode: 0644]
test/reference/scale-source-surface-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/scale-source-surface-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/scale-source-surface-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/scale-source-surface-paint.rgb24.ref.png
test/reference/select-font-face.argb32.ref.png [new file with mode: 0644]
test/reference/select-font-face.base.argb32.ref.png
test/reference/select-font-face.base.rgb24.ref.png
test/reference/select-font-face.mask.argb32.ref.png [new file with mode: 0644]
test/reference/select-font-face.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/select-font-face.rgb24.ref.png [new file with mode: 0644]
test/reference/select-font-face.traps.argb32.ref.png
test/reference/select-font-face.traps.ref.png [new file with mode: 0644]
test/reference/select-font-face.traps.rgb24.ref.png
test/reference/self-copy-overlap.egl.argb32.ref.png [new file with mode: 0644]
test/reference/self-copy-overlap.mask.argb32.ref.png [new file with mode: 0644]
test/reference/self-copy-overlap.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/self-copy.argb32.ref.png [new file with mode: 0644]
test/reference/self-copy.egl.argb32.ref.png [new file with mode: 0644]
test/reference/self-copy.mask.argb32.ref.png [new file with mode: 0644]
test/reference/self-copy.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/self-copy.rgb24.ref.png [new file with mode: 0644]
test/reference/self-intersecting.argb32.ref.png [new file with mode: 0644]
test/reference/self-intersecting.egl.argb32.ref.png [new file with mode: 0644]
test/reference/self-intersecting.mask.argb32.ref.png [new file with mode: 0644]
test/reference/self-intersecting.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/self-intersecting.rgb24.ref.png [new file with mode: 0644]
test/reference/set-source.argb32.ref.png [new file with mode: 0644]
test/reference/set-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/set-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/set-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/set-source.rgb24.ref.png
test/reference/shape-general-convex.argb32.ref.png [new file with mode: 0644]
test/reference/shape-general-convex.egl.argb32.ref.png [new file with mode: 0644]
test/reference/shape-general-convex.mask.argb32.ref.png [new file with mode: 0644]
test/reference/shape-general-convex.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/shape-general-convex.rgb24.ref.png [new file with mode: 0644]
test/reference/shape-sierpinski.argb32.ref.png [new file with mode: 0644]
test/reference/shape-sierpinski.egl.argb32.ref.png [new file with mode: 0644]
test/reference/shape-sierpinski.mask.argb32.ref.png [new file with mode: 0644]
test/reference/shape-sierpinski.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/shape-sierpinski.rgb24.ref.png [new file with mode: 0644]
test/reference/show-glyphs-advance.argb32.ref.png [new file with mode: 0644]
test/reference/show-glyphs-advance.base.argb32.ref.png
test/reference/show-glyphs-advance.base.rgb24.ref.png
test/reference/show-glyphs-advance.egl.argb32.ref.png [new file with mode: 0644]
test/reference/show-glyphs-advance.mask.argb32.ref.png [new file with mode: 0644]
test/reference/show-glyphs-advance.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/show-glyphs-advance.rgb24.ref.png [new file with mode: 0644]
test/reference/show-glyphs-advance.traps.argb32.ref.png
test/reference/show-glyphs-advance.traps.ref.png [new file with mode: 0644]
test/reference/show-glyphs-advance.traps.rgb24.ref.png
test/reference/show-glyphs-many.argb32.ref.png [new file with mode: 0644]
test/reference/show-glyphs-many.egl.argb32.ref.png [new file with mode: 0644]
test/reference/show-glyphs-many.mask.argb32.ref.png [new file with mode: 0644]
test/reference/show-glyphs-many.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/show-glyphs-many.rgb24.ref.png [new file with mode: 0644]
test/reference/show-text-current-point.argb32.ref.png [new file with mode: 0644]
test/reference/show-text-current-point.base.argb32.ref.png
test/reference/show-text-current-point.base.rgb24.ref.png
test/reference/show-text-current-point.mask.argb32.ref.png [new file with mode: 0644]
test/reference/show-text-current-point.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/show-text-current-point.rgb24.ref.png [new file with mode: 0644]
test/reference/show-text-current-point.traps.argb32.ref.png
test/reference/show-text-current-point.traps.ref.png [new file with mode: 0644]
test/reference/show-text-current-point.traps.rgb24.ref.png
test/reference/skew-extreme.argb32.ref.png [new file with mode: 0644]
test/reference/skew-extreme.egl.argb32.ref.png [new file with mode: 0644]
test/reference/skew-extreme.mask.argb32.ref.png [new file with mode: 0644]
test/reference/skew-extreme.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/skew-extreme.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-fill.argb32.ref.png [new file with mode: 0644]
test/reference/smask-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/smask-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-image-mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-image-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/smask-image-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-image-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-image-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-image-mask.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-image-mask.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/smask-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-paint.argb32.ref.png [new file with mode: 0644]
test/reference/smask-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/smask-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-paint.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-stroke.argb32.ref.png [new file with mode: 0644]
test/reference/smask-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/smask-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-stroke.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-text.argb32.ref.png [new file with mode: 0644]
test/reference/smask-text.base.argb32.ref.png
test/reference/smask-text.base.rgb24.ref.png
test/reference/smask-text.mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask-text.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-text.rgb24.ref.png [new file with mode: 0644]
test/reference/smask-text.traps.argb32.ref.png
test/reference/smask-text.traps.ref.png [new file with mode: 0644]
test/reference/smask-text.traps.rgb24.ref.png
test/reference/smask.argb32.ref.png [new file with mode: 0644]
test/reference/smask.base.argb32.ref.png
test/reference/smask.base.rgb24.ref.png
test/reference/smask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/smask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/smask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask.rgb24.ref.png [new file with mode: 0644]
test/reference/smask.traps.argb32.ref.png
test/reference/smask.traps.ref.png [new file with mode: 0644]
test/reference/smask.traps.rgb24.ref.png
test/reference/solid-pattern-cache-stress.argb32.ref.png [new file with mode: 0644]
test/reference/solid-pattern-cache-stress.egl.argb32.ref.png [new file with mode: 0644]
test/reference/solid-pattern-cache-stress.mask.argb32.ref.png [new file with mode: 0644]
test/reference/solid-pattern-cache-stress.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/solid-pattern-cache-stress.rgb24.ref.png [new file with mode: 0644]
test/reference/source-clip-scale.argb32.ref.png [new file with mode: 0644]
test/reference/source-clip-scale.egl.argb32.ref.png [new file with mode: 0644]
test/reference/source-clip-scale.mask.argb32.ref.png [new file with mode: 0644]
test/reference/source-clip-scale.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/source-clip-scale.recording.ref.png [new file with mode: 0644]
test/reference/source-clip-scale.rgb24.ref.png [new file with mode: 0644]
test/reference/source-clip.argb32.ref.png [new file with mode: 0644]
test/reference/source-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/source-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/source-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/source-clip.rgb24.ref.png [new file with mode: 0644]
test/reference/source-surface-scale-paint.argb32.ref.png [new file with mode: 0644]
test/reference/source-surface-scale-paint.egl.argb32.ref.png [new file with mode: 0644]
test/reference/source-surface-scale-paint.mask.argb32.ref.png [new file with mode: 0644]
test/reference/source-surface-scale-paint.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/source-surface-scale-paint.rgb24.ref.png
test/reference/spline-decomposition.argb32.ref.png [new file with mode: 0644]
test/reference/spline-decomposition.egl.argb32.ref.png [new file with mode: 0644]
test/reference/spline-decomposition.mask.argb32.ref.png [new file with mode: 0644]
test/reference/spline-decomposition.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/spline-decomposition.rgb24.ref.png [new file with mode: 0644]
test/reference/stride-12-image.argb32.ref.png [new file with mode: 0644]
test/reference/stride-12-image.base.argb32.ref.png [new file with mode: 0644]
test/reference/stride-12-image.base.rgb24.ref.png [new file with mode: 0644]
test/reference/stride-12-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/stride-12-image.image16.ref.png [new file with mode: 0644]
test/reference/stride-12-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/stride-12-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/stride-12-image.ps.ref.png [new file with mode: 0644]
test/reference/stride-12-image.ref.png [new file with mode: 0644]
test/reference/stride-12-image.rgb24.ref.png [new file with mode: 0644]
test/reference/stride-12-image.traps.argb32.ref.png [new file with mode: 0644]
test/reference/stride-12-image.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/stride-12-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/stride-12-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/stride-12-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/stride-12-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-ctm-caps.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-ctm-caps.egl.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-ctm-caps.mask.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-ctm-caps.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-ctm-caps.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-image.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-image.base.argb32.ref.png
test/reference/stroke-image.base.rgb24.ref.png
test/reference/stroke-image.egl.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-image.mask.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-image.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-image.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-image.traps.argb32.ref.png
test/reference/stroke-image.traps.rgb24.ref.png
test/reference/stroke-open-box.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-open-box.egl.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-open-box.mask.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-open-box.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-open-box.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.base.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.base.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.egl.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.mask.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.traps.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.traps.ref.png [new file with mode: 0644]
test/reference/stroke-pattern.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/stroke-xlib.argb32.ref.png [new file with mode: 0644]
test/reference/stroke-xlib.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-image-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-image-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-image-repeat.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-image-repeat.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-image-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-image-repeat.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-image-repeat.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-child.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-child.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-child.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-child.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-child.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-parent.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-parent.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-parent.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-parent.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-modify-parent.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-outside-target.base.argb32.ref.png
test/reference/subsurface-outside-target.base.rgb24.ref.png
test/reference/subsurface-outside-target.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-outside-target.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-outside-target.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-outside-target.traps.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-outside-target.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-pad.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-pad.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-pad.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-pad.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-pad.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-reflect.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-reflect.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-reflect.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-reflect.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-reflect.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-repeat.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-repeat.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.base.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.base.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.traps.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-scale.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-similar-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-similar-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-similar-repeat.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface-similar-repeat.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface-similar-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface.base.argb32.ref.png
test/reference/subsurface.base.rgb24.ref.png
test/reference/subsurface.egl.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface.mask.argb32.ref.png [new file with mode: 0644]
test/reference/subsurface.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface.rgb24.ref.png [new file with mode: 0644]
test/reference/subsurface.traps.argb32.ref.png
test/reference/subsurface.traps.rgb24.ref.png
test/reference/surface-pattern-big-scale-down.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-big-scale-down.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-big-scale-down.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-big-scale-down.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-big-scale-down.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-operator.argb32.ref.png
test/reference/surface-pattern-operator.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-operator.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-operator.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-operator.rgb24.ref.png
test/reference/surface-pattern-scale-down-extend-none.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-none.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-none.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-none.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-none.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-pad.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-pad.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-pad.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-pad.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-pad.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-reflect.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-reflect.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-reflect.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-reflect.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-reflect.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-repeat.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-repeat.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-repeat.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-repeat.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down-extend-repeat.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-down.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-up.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-up.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-up.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-up.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern-scale-up.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern.egl.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern.mask.argb32.ref.png [new file with mode: 0644]
test/reference/surface-pattern.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/surface-pattern.rgb24.ref.png [new file with mode: 0644]
test/reference/svg-surface-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/svg-surface-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/svg-surface-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-gray.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-gray.base.argb32.ref.png
test/reference/text-antialias-gray.base.rgb24.ref.png
test/reference/text-antialias-gray.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-gray.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-gray.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-gray.traps.argb32.ref.png
test/reference/text-antialias-gray.traps.ref.png [new file with mode: 0644]
test/reference/text-antialias-gray.traps.rgb24.ref.png
test/reference/text-antialias-none.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-none.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-none.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-none.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-none.traps.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.base.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.base.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.egl.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.image16.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.traps.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.traps.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-bgr.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.base.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.base.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.egl.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.image16.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.traps.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.traps.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-rgb.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.base.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.base.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.egl.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.image16.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.traps.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.traps.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vbgr.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.base.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.base.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.egl.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.image16.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.traps.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.traps.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel-vrgb.traps.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.base.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.base.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.rgb24.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.traps.argb32.ref.png
test/reference/text-antialias-subpixel.traps.ref.png [new file with mode: 0644]
test/reference/text-antialias-subpixel.traps.rgb24.ref.png
test/reference/text-glyph-range.argb32.ref.png [new file with mode: 0644]
test/reference/text-glyph-range.base.argb32.ref.png
test/reference/text-glyph-range.base.rgb24.ref.png
test/reference/text-glyph-range.egl.argb32.ref.png [new file with mode: 0644]
test/reference/text-glyph-range.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-glyph-range.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-glyph-range.rgb24.ref.png [new file with mode: 0644]
test/reference/text-glyph-range.traps.argb32.ref.png
test/reference/text-glyph-range.traps.ref.png [new file with mode: 0644]
test/reference/text-glyph-range.traps.rgb24.ref.png
test/reference/text-pattern.argb32.ref.png [new file with mode: 0644]
test/reference/text-pattern.base.argb32.ref.png
test/reference/text-pattern.base.rgb24.ref.png
test/reference/text-pattern.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-pattern.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-pattern.rgb24.ref.png [new file with mode: 0644]
test/reference/text-pattern.traps.argb32.ref.png
test/reference/text-pattern.traps.rgb24.ref.png
test/reference/text-rotate.base.argb32.ref.png
test/reference/text-rotate.base.rgb24.ref.png
test/reference/text-rotate.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-rotate.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-rotate.ref.png
test/reference/text-rotate.traps.argb32.ref.png
test/reference/text-rotate.traps.ref.png [new file with mode: 0644]
test/reference/text-rotate.traps.rgb24.ref.png
test/reference/text-transform.argb32.ref.png [new file with mode: 0644]
test/reference/text-transform.mask.argb32.ref.png [new file with mode: 0644]
test/reference/text-transform.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/text-transform.rgb24.ref.png [new file with mode: 0644]
test/reference/tiger.argb32.ref.png [new file with mode: 0644]
test/reference/tiger.egl.argb32.ref.png [new file with mode: 0644]
test/reference/tiger.mask.argb32.ref.png [new file with mode: 0644]
test/reference/tiger.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/tiger.ref.png
test/reference/tiger.rgb24.ref.png [new file with mode: 0644]
test/reference/tighten-bounds.argb32.ref.png
test/reference/tighten-bounds.base.argb32.ref.png
test/reference/tighten-bounds.base.rgb24.ref.png
test/reference/tighten-bounds.rgb24.ref.png
test/reference/transforms.argb32.ref.png [new file with mode: 0644]
test/reference/transforms.egl.argb32.ref.png [new file with mode: 0644]
test/reference/transforms.mask.argb32.ref.png [new file with mode: 0644]
test/reference/transforms.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/transforms.rgb24.ref.png [new file with mode: 0644]
test/reference/translate-show-surface.argb32.ref.png [new file with mode: 0644]
test/reference/translate-show-surface.egl.argb32.ref.png [new file with mode: 0644]
test/reference/translate-show-surface.mask.argb32.ref.png [new file with mode: 0644]
test/reference/translate-show-surface.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/translate-show-surface.rgb24.ref.png [new file with mode: 0644]
test/reference/trap-clip.argb32.ref.png [new file with mode: 0644]
test/reference/trap-clip.base.argb32.ref.png
test/reference/trap-clip.base.rgb24.ref.png
test/reference/trap-clip.egl.argb32.ref.png [new file with mode: 0644]
test/reference/trap-clip.mask.argb32.ref.png [new file with mode: 0644]
test/reference/trap-clip.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/trap-clip.rgb24.ref.png
test/reference/twin-antialias-gray.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-gray.base.argb32.ref.png
test/reference/twin-antialias-gray.base.rgb24.ref.png
test/reference/twin-antialias-gray.egl.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-gray.mask.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-gray.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-gray.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-gray.traps.argb32.ref.png
test/reference/twin-antialias-gray.traps.rgb24.ref.png
test/reference/twin-antialias-mixed.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-mixed.base.argb32.ref.png
test/reference/twin-antialias-mixed.base.rgb24.ref.png
test/reference/twin-antialias-mixed.egl.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-mixed.mask.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-mixed.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-mixed.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-mixed.traps.argb32.ref.png
test/reference/twin-antialias-mixed.traps.rgb24.ref.png
test/reference/twin-antialias-none.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-none.base.argb32.ref.png
test/reference/twin-antialias-none.base.rgb24.ref.png
test/reference/twin-antialias-none.egl.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-none.mask.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-none.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-none.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-none.traps.argb32.ref.png
test/reference/twin-antialias-none.traps.rgb24.ref.png
test/reference/twin-antialias-subpixel.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-subpixel.base.argb32.ref.png
test/reference/twin-antialias-subpixel.base.rgb24.ref.png
test/reference/twin-antialias-subpixel.egl.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-subpixel.mask.argb32.ref.png [new file with mode: 0644]
test/reference/twin-antialias-subpixel.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-subpixel.rgb24.ref.png [new file with mode: 0644]
test/reference/twin-antialias-subpixel.traps.argb32.ref.png
test/reference/twin-antialias-subpixel.traps.rgb24.ref.png
test/reference/twin.argb32.ref.png [new file with mode: 0644]
test/reference/twin.base.argb32.ref.png
test/reference/twin.base.rgb24.ref.png
test/reference/twin.egl.argb32.ref.png [new file with mode: 0644]
test/reference/twin.mask.argb32.ref.png [new file with mode: 0644]
test/reference/twin.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/twin.rgb24.ref.png [new file with mode: 0644]
test/reference/twin.traps.argb32.ref.png
test/reference/twin.traps.rgb24.ref.png
test/reference/unaligned-box.argb32.ref.png [new file with mode: 0644]
test/reference/unaligned-box.egl.argb32.ref.png [new file with mode: 0644]
test/reference/unaligned-box.mask.argb32.ref.png [new file with mode: 0644]
test/reference/unaligned-box.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/unaligned-box.rgb24.ref.png [new file with mode: 0644]
test/reference/unantialiased-shapes.argb32.ref.png [new file with mode: 0644]
test/reference/unantialiased-shapes.egl.argb32.ref.png [new file with mode: 0644]
test/reference/unantialiased-shapes.mask.argb32.ref.png [new file with mode: 0644]
test/reference/unantialiased-shapes.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/unantialiased-shapes.rgb24.ref.png [new file with mode: 0644]
test/reference/unbounded-operator.argb32.ref.png
test/reference/unbounded-operator.base.argb32.ref.png
test/reference/unbounded-operator.base.rgb24.ref.png
test/reference/unbounded-operator.mask.argb32.ref.png [new file with mode: 0644]
test/reference/unbounded-operator.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/unbounded-operator.rgb24.ref.png
test/reference/unbounded-operator.traps.argb32.ref.png
test/reference/unbounded-operator.traps.rgb24.ref.png
test/reference/unclosed-strokes.argb32.ref.png [new file with mode: 0644]
test/reference/unclosed-strokes.egl.argb32.ref.png [new file with mode: 0644]
test/reference/unclosed-strokes.mask.argb32.ref.png [new file with mode: 0644]
test/reference/unclosed-strokes.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/unclosed-strokes.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font-mask.argb32.ref.png [new file with mode: 0644]
test/reference/user-font-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/user-font-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/user-font-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font-mask.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font-proxy.argb32.ref.png [new file with mode: 0644]
test/reference/user-font-proxy.base.argb32.ref.png
test/reference/user-font-proxy.base.rgb24.ref.png
test/reference/user-font-proxy.mask.argb32.ref.png [new file with mode: 0644]
test/reference/user-font-proxy.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font-proxy.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font-proxy.traps.argb32.ref.png
test/reference/user-font-proxy.traps.ref.png [new file with mode: 0644]
test/reference/user-font-proxy.traps.rgb24.ref.png
test/reference/user-font-rescale.argb32.ref.png [new file with mode: 0644]
test/reference/user-font-rescale.base.argb32.ref.png
test/reference/user-font-rescale.base.rgb24.ref.png
test/reference/user-font-rescale.mask.argb32.ref.png [new file with mode: 0644]
test/reference/user-font-rescale.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font-rescale.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font-rescale.traps.argb32.ref.png
test/reference/user-font-rescale.traps.ref.png [new file with mode: 0644]
test/reference/user-font-rescale.traps.rgb24.ref.png
test/reference/user-font.argb32.ref.png [new file with mode: 0644]
test/reference/user-font.base.argb32.ref.png
test/reference/user-font.base.rgb24.ref.png
test/reference/user-font.egl.argb32.ref.png [new file with mode: 0644]
test/reference/user-font.mask.argb32.ref.png [new file with mode: 0644]
test/reference/user-font.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font.rgb24.ref.png [new file with mode: 0644]
test/reference/user-font.traps.argb32.ref.png
test/reference/user-font.traps.rgb24.ref.png
test/reference/white-in-noop.argb32.ref.png [new file with mode: 0644]
test/reference/white-in-noop.egl.argb32.ref.png [new file with mode: 0644]
test/reference/white-in-noop.mask.argb32.ref.png [new file with mode: 0644]
test/reference/white-in-noop.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/white-in-noop.rgb24.ref.png [new file with mode: 0644]
test/reference/world-map-fill.argb32.ref.png [new file with mode: 0644]
test/reference/world-map-fill.egl.argb32.ref.png [new file with mode: 0644]
test/reference/world-map-fill.mask.argb32.ref.png [new file with mode: 0644]
test/reference/world-map-fill.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/world-map-fill.rgb24.ref.png [new file with mode: 0644]
test/reference/world-map-stroke.argb32.ref.png [new file with mode: 0644]
test/reference/world-map-stroke.egl.argb32.ref.png [new file with mode: 0644]
test/reference/world-map-stroke.mask.argb32.ref.png [new file with mode: 0644]
test/reference/world-map-stroke.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/world-map-stroke.rgb24.ref.png [new file with mode: 0644]
test/reference/world-map.argb32.ref.png [new file with mode: 0644]
test/reference/world-map.egl.argb32.ref.png [new file with mode: 0644]
test/reference/world-map.mask.argb32.ref.png [new file with mode: 0644]
test/reference/world-map.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/world-map.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-huge-image-shm.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-huge-image-shm.egl.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-huge-image-shm.mask.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-huge-image-shm.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-huge-image-shm.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-huge-image-shm.xlib-fallback.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-huge-image-shm.xlib-window.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-snapshot-assert.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-snapshot-assert.egl.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-snapshot-assert.mask.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-snapshot-assert.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-snapshot-assert.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-stress-cache.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-stress-cache.egl.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-stress-cache.mask.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-stress-cache.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-stress-cache.rgb24.ref.png [new file with mode: 0644]
test/reference/xcb-surface-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-surface-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/xcb-surface-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/xcomposite-projection.argb32.ref.png [new file with mode: 0644]
test/reference/xcomposite-projection.egl.argb32.ref.png [new file with mode: 0644]
test/reference/xcomposite-projection.mask.argb32.ref.png [new file with mode: 0644]
test/reference/xcomposite-projection.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/xcomposite-projection.rgb24.ref.png [new file with mode: 0644]
test/reference/xlib-expose-event.argb32.ref.png [new file with mode: 0644]
test/reference/xlib-expose-event.egl.argb32.ref.png [new file with mode: 0644]
test/reference/xlib-expose-event.mask.argb32.ref.png [new file with mode: 0644]
test/reference/xlib-expose-event.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/xlib-expose-event.rgb24.ref.png [new file with mode: 0644]
test/reference/xlib-surface-source.egl.argb32.ref.png [new file with mode: 0644]
test/reference/xlib-surface-source.mask.argb32.ref.png [new file with mode: 0644]
test/reference/xlib-surface-source.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/zero-alpha.argb32.ref.png [new file with mode: 0644]
test/reference/zero-alpha.egl.argb32.ref.png [new file with mode: 0644]
test/reference/zero-alpha.mask.argb32.ref.png [new file with mode: 0644]
test/reference/zero-alpha.mask.rgb24.ref.png [new file with mode: 0644]
test/reference/zero-alpha.rgb24.ref.png [new file with mode: 0644]
test/reference/zero-mask.argb32.ref.png [new file with mode: 0644]
test/reference/zero-mask.egl.argb32.ref.png [new file with mode: 0644]
test/reference/zero-mask.mask.argb32.ref.png [new file with mode: 0644]
test/reference/zero-mask.mask.rgb24.ref.png [new file with mode: 0644]
test/stride-12-image.c [new file with mode: 0644]
test/subsurface-image-repeat.c
test/subsurface-modify-child.c
test/subsurface-modify-parent.c
test/subsurface-outside-target.c
test/subsurface-pad.c
test/subsurface-reflect.c
test/subsurface-repeat.c
test/subsurface-scale.c
test/subsurface-similar-repeat.c
test/subsurface.c
test/text-antialias-subpixel.c [new file with mode: 0644]
test/xlib-surface.c
util/.gitignore [new file with mode: 0644]
util/Makefile.am
util/cairo-missing/cairo-missing.h
util/cairo-script/.gitignore [new file with mode: 0644]
util/cairo-script/cairo-script-operators.c
util/cairo-script/cairo-script-scanner.c
util/cairo-sphinx/.gitignore [new file with mode: 0644]
util/cairo-sphinx/sphinx.c
util/cairo-trace/.gitignore [new file with mode: 0644]
util/cairo-trace/cairo-trace.in
util/cairo-trace/trace.c

index 7c03294..03fa352 100644 (file)
@@ -5,6 +5,7 @@ EXTRA_DIST += \
        README.win32 \
        Makefile.win32 \
        build/Makefile.win32.common \
+       build/Makefile.win32.inform \
        build/Makefile.win32.features \
        build/Makefile.win32.features-h \
        $(NULL)
@@ -13,7 +14,7 @@ EXTRA_DIST += \
 #      $(srcdir)/build/Makefile.win32.features-h \
 #      $(NULL)
 
-ACLOCAL_AMFLAGS = -I build
+ACLOCAL_AMFLAGS = -I build ${ACLOCAL_FLAGS}
 
 DIST_SUBDIRS = src doc util boilerplate test perf
 SUBDIRS = src doc util
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..3e2055d
--- /dev/null
@@ -0,0 +1,1393 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Creating ChangeLog files from git log:
+
+# We always create a ChangeLog that contains the most recent changes, and
+# multiple others for changes between major releases (other than the last such
+# segment that we put in 'ChangeLog'.  The old ones are named
+# ChangeLog.pre-X.Y where X.Y is the version number of the major release.
+
+# Some custom targets to make it easier to release things.
+#
+# To make real stable releases or devel snapshots, use either:
+#              make release-check
+# or           make release-publish
+#
+# To make a quick properly named (date and git hash stamped) tarball:
+#              make snapshot
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/build/Makefile.am.analysis \
+       $(srcdir)/build/Makefile.am.changelog \
+       $(srcdir)/build/Makefile.am.releasing $(srcdir)/config.h.in \
+       $(top_srcdir)/build/Makefile.am.common $(top_srcdir)/configure \
+       $(top_srcdir)/src/cairo-features-uninstalled.pc.in \
+       $(top_srcdir)/src/cairo-uninstalled.pc.in AUTHORS COPYING \
+       ChangeLog INSTALL NEWS build/compile build/config.guess \
+       build/config.sub build/depcomp build/install-sh \
+       build/ltmain.sh build/missing config.guess config.sub
+EXTRA_PROGRAMS =
+TESTS =
+check_PROGRAMS =
+# libpng is required for our test programs
+@CAIRO_HAS_PNG_FUNCTIONS_TRUE@am__append_1 = boilerplate test perf
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \
+       $(top_srcdir)/build/aclocal.compare.m4 \
+       $(top_srcdir)/build/aclocal.enable.m4 \
+       $(top_srcdir)/build/aclocal.float.m4 \
+       $(top_srcdir)/build/aclocal.makefile.m4 \
+       $(top_srcdir)/build/aclocal.pkg.m4 \
+       $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \
+       $(top_srcdir)/build/ltoptions.m4 \
+       $(top_srcdir)/build/ltsugar.m4 \
+       $(top_srcdir)/build/ltversion.m4 \
+       $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/cairo-version.h \
+       $(top_srcdir)/build/configure.ac.version \
+       $(top_srcdir)/build/configure.ac.tools \
+       $(top_srcdir)/build/configure.ac.features \
+       $(top_srcdir)/build/configure.ac.warnings \
+       $(top_srcdir)/build/configure.ac.system \
+       $(top_srcdir)/build/configure.ac.analysis \
+       $(top_srcdir)/build/configure.ac.noversion \
+       $(top_srcdir)/build/configure.ac.pthread \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = cairo-uninstalled.pc cairo-xlib-uninstalled.pc \
+       cairo-xlib-xrender-uninstalled.pc cairo-xcb-uninstalled.pc \
+       cairo-xlib-xcb-uninstalled.pc cairo-xcb-shm-uninstalled.pc \
+       cairo-qt-uninstalled.pc cairo-quartz-uninstalled.pc \
+       cairo-quartz-font-uninstalled.pc \
+       cairo-quartz-image-uninstalled.pc cairo-win32-uninstalled.pc \
+       cairo-win32-font-uninstalled.pc cairo-skia-uninstalled.pc \
+       cairo-os2-uninstalled.pc cairo-beos-uninstalled.pc \
+       cairo-drm-uninstalled.pc cairo-gallium-uninstalled.pc \
+       cairo-png-uninstalled.pc cairo-gl-uninstalled.pc \
+       cairo-glesv2-uninstalled.pc cairo-cogl-uninstalled.pc \
+       cairo-directfb-uninstalled.pc cairo-vg-uninstalled.pc \
+       cairo-egl-uninstalled.pc cairo-glx-uninstalled.pc \
+       cairo-wgl-uninstalled.pc cairo-script-uninstalled.pc \
+       cairo-ft-uninstalled.pc cairo-fc-uninstalled.pc \
+       cairo-ps-uninstalled.pc cairo-pdf-uninstalled.pc \
+       cairo-svg-uninstalled.pc cairo-tee-uninstalled.pc \
+       cairo-xml-uninstalled.pc cairo-gobject-uninstalled.pc
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+GZIP_ENV = --best
+DIST_ARCHIVES = $(distdir).tar.xz
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LDFLAGS = @CAIRO_LDFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@
+CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@
+CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@
+CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@
+CAIRO_REQUIRES = @CAIRO_REQUIRES@
+CAIRO_TEST_MODE = @CAIRO_TEST_MODE@
+CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@
+CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@
+CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@
+CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@
+CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FIND = @FIND@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_CONFIG = @FREETYPE_CONFIG@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GS = @GS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@
+LIBRSVG_LIBS = @LIBRSVG_LIBS@
+LIBS = @LIBS@
+LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@
+LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LTP = @LTP@
+LTP_GENHTML = @LTP_GENHTML@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+POPPLER_CFLAGS = @POPPLER_CFLAGS@
+POPPLER_LIBS = @POPPLER_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SHLIB_EXT = @SHLIB_EXT@
+SHM_LIBS = @SHM_LIBS@
+SHTOOL = @SHTOOL@
+STRIP = @STRIP@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VERSION = @VERSION@
+XARGS = @XARGS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+cogl_CFLAGS = @cogl_CFLAGS@
+cogl_LIBS = @cogl_LIBS@
+datadir = @datadir@
+datarootdir = @datarootdir@
+directfb_CFLAGS = @directfb_CFLAGS@
+directfb_LIBS = @directfb_LIBS@
+docdir = @docdir@
+drm_CFLAGS = @drm_CFLAGS@
+drm_LIBS = @drm_LIBS@
+dvidir = @dvidir@
+egl_CFLAGS = @egl_CFLAGS@
+egl_LIBS = @egl_LIBS@
+exec_prefix = @exec_prefix@
+gallium_DIR = @gallium_DIR@
+gl_CFLAGS = @gl_CFLAGS@
+gl_LIBS = @gl_LIBS@
+glesv2_CFLAGS = @glesv2_CFLAGS@
+glesv2_LIBS = @glesv2_LIBS@
+glib_CFLAGS = @glib_CFLAGS@
+glib_LIBS = @glib_LIBS@
+gtk_CFLAGS = @gtk_CFLAGS@
+gtk_LIBS = @gtk_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mesa_DIR = @mesa_DIR@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pixman_CFLAGS = @pixman_CFLAGS@
+pixman_LIBS = @pixman_LIBS@
+png_CFLAGS = @png_CFLAGS@
+png_LIBS = @png_LIBS@
+png_REQUIRES = @png_REQUIRES@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pthread_CFLAGS = @pthread_CFLAGS@
+pthread_LIBS = @pthread_LIBS@
+qt_CFLAGS = @qt_CFLAGS@
+qt_LIBS = @qt_LIBS@
+real_pthread_CFLAGS = @real_pthread_CFLAGS@
+real_pthread_LIBS = @real_pthread_LIBS@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shm_LIBS = @shm_LIBS@
+skia_DIR = @skia_DIR@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+xcb_CFLAGS = @xcb_CFLAGS@
+xcb_LIBS = @xcb_LIBS@
+xcb_shm_CFLAGS = @xcb_shm_CFLAGS@
+xcb_shm_LIBS = @xcb_shm_LIBS@
+xlib_CFLAGS = @xlib_CFLAGS@
+xlib_LIBS = @xlib_LIBS@
+xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@
+xlib_xcb_LIBS = @xlib_xcb_LIBS@
+xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@
+xlib_xrender_LIBS = @xlib_xrender_LIBS@
+BUILT_SOURCES = 
+CLEANFILES = *.i *.s *.gch $(EXTRA_LTLIBRARIES) $(EXTRA_PROGRAMS) \
+       $(check_PROGRAMS)
+DISTCLEANFILES = $(BUILT_SOURCES) config.cache \
+       $(srcdir)/ChangeLog.cache-* ChangeLog.cache-*
+EXTRA_DIST = KNOWN_ISSUES README.win32 Makefile.win32 \
+       build/Makefile.win32.common build/Makefile.win32.inform \
+       build/Makefile.win32.features build/Makefile.win32.features-h \
+       $(NULL) AUTHORS BIBLIOGRAPHY BUGS CODING_STYLE COPYING \
+       COPYING-LGPL-2.1 COPYING-MPL-1.1 HACKING INSTALL NEWS \
+       PORTING_GUIDE README RELEASING autogen.sh cairo-version.h \
+       $(NULL)
+EXTRA_LTLIBRARIES = 
+MAINTAINERCLEANFILES = Makefile.in $(srcdir)/aclocal.m4 \
+       $(srcdir)/autoscan.log $(srcdir)/build/compile \
+       $(srcdir)/build/config.guess $(srcdir)/build/config.sub \
+       $(srcdir)/build/depcomp $(srcdir)/build/install-sh \
+       $(srcdir)/build/ltmain.sh $(srcdir)/build/missing \
+       $(srcdir)/build/mkinstalldirs $(srcdir)/config.h.in \
+       $(srcdir)/configure.scan $(NULL) $(srcdir)/ChangeLog \
+       $(srcdir)/ChangeLog.pre-*
+#MAINTAINERCLEANFILES += \
+#      $(srcdir)/build/Makefile.win32.features \
+#      $(srcdir)/build/Makefile.win32.features-h \
+#      $(NULL)
+ACLOCAL_AMFLAGS = -I build ${ACLOCAL_FLAGS}
+DIST_SUBDIRS = src doc util boilerplate test perf
+SUBDIRS = src doc util $(am__append_1)
+DISTCHECK_CONFIGURE_FLAGS = \
+       --enable-gtk-doc \
+       --enable-test-surfaces \
+       --enable-full-testing \
+       $(NULL)
+
+CURR_CHANGELOG_VERSION = $(CAIRO_VERSION_MAJOR).$$(echo "($(CAIRO_VERSION_MINOR)+1)/2*2" | bc)
+# examines $version
+PREV_CHANGELOG_VERSION = $$(if test "x$$(echo "($$version-0.1)*2/2"|bc)" = "x$$(echo "$$version*2/2"|bc)"; \
+                         then echo "$$version-$$(echo "$$version" | sed 's/[0-9]/0/g;s/[0-9]$$/2/')"; \
+                         else echo "$$version-1.0"; \
+                         fi | bc | sed 's/[.]0*/./;s/^0[.]\?$$/initial/;s/[.]$$/.0/')
+
+CHANGELOGS = ChangeLog \
+       `version=$(CURR_CHANGELOG_VERSION); \
+       version=$(PREV_CHANGELOG_VERSION); \
+       while test "x$$version" != xinitial; do \
+               echo ChangeLog.pre-$$version; \
+               version=$(PREV_CHANGELOG_VERSION); \
+       done`
+
+TAR_OPTIONS = --owner=0 --group=0
+RELEASE_OR_SNAPSHOT = $$(if test "x$(CAIRO_VERSION_MINOR)" = "x$$(echo "$(CAIRO_VERSION_MINOR)/2*2" | bc)" ; then echo release; else echo snapshot; fi)
+RELEASE_UPLOAD_HOST = cairographics.org
+RELEASE_UPLOAD_BASE = /srv/cairo.freedesktop.org/www
+RELEASE_UPLOAD_DIR = $(RELEASE_UPLOAD_BASE)/$(RELEASE_OR_SNAPSHOT)s
+RELEASE_URL_BASE = http://cairographics.org/$(RELEASE_OR_SNAPSHOT)s
+RELEASE_ANNOUNCE_LIST = cairo-announce@cairographics.org (and CC gnome-announce-list@gnome.org)
+MANUAL_VERSIONED = manual-$(VERSION)
+MANUAL_TAR_FILE = $(MANUAL_VERSIONED).tar.gz
+MANUAL_UPLOAD_DIR = $(RELEASE_UPLOAD_BASE)
+tar_file = $(PACKAGE)-$(VERSION).tar.xz
+sha1_file = $(tar_file).sha1
+gpg_file = $(sha1_file).asc
+
+# Win32 package zipfiles
+@OS_WIN32_TRUE@runtime_zip_file = $(PACKAGE)-$(VERSION).zip
+@OS_WIN32_TRUE@developer_zip_file = $(PACKAGE)-dev-$(VERSION).zip
+all: $(BUILT_SOURCES) config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/build/Makefile.am.common $(srcdir)/build/Makefile.am.changelog $(srcdir)/build/Makefile.am.releasing $(srcdir)/build/Makefile.am.analysis $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+             $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+       @if test ! -f $@; then \
+         rm -f stamp-h1; \
+         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+       else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+cairo-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-xlib-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-xlib-xrender-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-xcb-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-xlib-xcb-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-xcb-shm-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-qt-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-quartz-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-quartz-font-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-quartz-image-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-win32-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-win32-font-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-skia-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-os2-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-beos-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-drm-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-gallium-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-png-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-gl-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-glesv2-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-cogl-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-directfb-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-vg-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-egl-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-glx-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-wgl-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-script-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-ft-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-fc-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-ps-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-pdf-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-svg-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-tee-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-xml-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+cairo-gobject-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/cairo-features-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       $(am__tty_colors); \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=XPASS; \
+             ;; \
+             *) \
+               col=$$grn; res=PASS; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               col=$$lgn; res=XFAIL; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=FAIL; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             col=$$blu; res=SKIP; \
+           fi; \
+           echo "$${col}$$res$${std}: $$tst"; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         if test "$$failed" -eq 0; then \
+           echo "$$grn$$dashes"; \
+         else \
+           echo "$$red$$dashes"; \
+         fi; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes$$std"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d "$(distdir)" || mkdir "$(distdir)"
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+       -test -n "$(am__skip_mode_fix)" \
+       || find "$(distdir)" -type d ! -perm -755 \
+               -exec chmod u+rwx,go+rx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzma: distdir
+       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+       $(am__remove_distdir)
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lzma*) \
+         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.xz*) \
+         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       test -d $(distdir)/_build || exit 0; \
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && am__cwd=`pwd` \
+         && $(am__cd) $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+         && cd "$$am__cwd" \
+         || exit 1
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @$(am__cd) '$(distuninstallcheck_dir)' \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+@CAIRO_HAS_LCOV_FALSE@html-local:
+clean: clean-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+       distclean-libtool distclean-local distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am: html-local
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+       check-am ctags-recursive install install-am install-strip \
+       tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \
+       dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \
+       distclean distclean-generic distclean-hdr distclean-libtool \
+       distclean-local distclean-tags distcleancheck distdir \
+       distuninstallcheck dvi dvi-am html html-am html-local info \
+       info-am install install-am install-data install-data-am \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-html install-html-am install-info install-info-am \
+       install-man install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+
+configure: cairo-version.h
+
+doc:
+       cd doc && $(MAKE) $(AM_MAKEFLAGS) $@
+test retest recheck: all
+       cd test && $(MAKE) $(AM_MAKEFLAGS) $@
+perf: all
+       cd perf && $(MAKE) $(AM_MAKEFLAGS) $@
+check-valgrind: all
+       cd test && $(MAKE) $(AM_MAKEFLAGS) check-valgrind
+       cd perf && $(MAKE) $(AM_MAKEFLAGS) check-valgrind
+.PHONY: doc test retest recheck perf check-valgrind
+
+changelogs:
+       @$(MAKE) $(AM_MAKEFLAGS) $(CHANGELOGS)
+
+dist-hook: changelogs
+       changelogs="$(CHANGELOGS)"; \
+       for changelog in $$changelogs; do \
+               cp $(srcdir)/$$changelog $(distdir)/ 2>/dev/null || \
+               cp $$changelog $(distdir)/; \
+       done
+
+$(srcdir)/ChangeLog:
+       @if test -d "$(srcdir)/.git"; then \
+               version=$(CURR_CHANGELOG_VERSION); \
+               prev=$(PREV_CHANGELOG_VERSION).0; \
+               nearest_tag=`git describe | sed 's/-.*//'`; \
+               before=$(srcdir)/ChangeLog.cache-$$prev..$$nearest_tag; \
+               after=$(srcdir)/ChangeLog.cache-$$nearest_tag..; \
+               $(MAKE) $(AM_MAKEFLAGS) $$before $$after && \
+               echo Creating $@ && \
+               { echo '# Generated by configure.  Do not edit.'; echo; \
+                 cat $$after; echo; cat $$before; } > $@; \
+       else \
+               test -f $@ || \
+               (echo A git checkout is required to generate $@ >&2 && \
+                echo A git checkout is required to generate this file >> $@); \
+       fi
+
+ChangeLog.cache-*..: .git
+
+ChangeLog%: $(srcdir)/ChangeLog%
+
+$(srcdir)/ChangeLog.cache-% $(srcdir)/ChangeLog.pre-%:
+       @echo Creating $@
+       @if test -d "$(srcdir)/.git"; then \
+         (cd "$(srcdir)" && \
+         version=$$(echo "$@" | sed 's/.*ChangeLog\([.].*-\)\?//'); \
+         if echo "$@" | grep -q '^ChangeLog[.]cache'; then \
+               spec=$$version; \
+         else \
+               to=$$version; \
+               test "x$$version" = x && version=$(CURR_CHANGELOG_VERSION); \
+               from=$(PREV_CHANGELOG_VERSION); \
+               test "x$$to" = x || to=$$to.0; \
+               test "x$$from" = xinitial || from=$$from.0; \
+               spec=$$from..$$to; \
+         fi; \
+         $(top_srcdir)/build/missing --run git log --stat "$$spec") > $@.tmp \
+         && mv -f $@.tmp $@ \
+         || ($(RM) $@.tmp; \
+             echo Failed to generate $@, your $@ may be outdated >&2); \
+       else \
+         echo A git checkout is required to generate $@ >&2; \
+       fi
+
+.PHONY: changelogs ChangeLog $(srcdir)/ChangeLog
+
+dist-hook: dist-clear-sticky-bits
+
+# Clean up any sticky bits we may inherit from parent dir
+dist-clear-sticky-bits:
+       chmod -R a-s $(distdir)
+
+snapshot:
+       distdir="$(distdir)-`date '+%Y%m%d'`"; \
+       test -d "$(srcdir)/.git" && distdir=$$distdir-`cd "$(srcdir)" && git rev-parse HEAD | cut -c 1-6`; \
+       TAR_OPTIONS="$(TAR_OPTIONS)" $(MAKE) $(AM_MAKEFLAGS) distdir="$$distdir" snapshot-dist
+
+snapshot-dist: dist
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+
+$(sha1_file): $(tar_file)
+       sha1sum $^ > $@
+
+$(gpg_file): $(sha1_file)
+       @echo "Please enter your GPG password to sign the checksum."
+       gpg --armor --sign $^ 
+
+release-verify-sane-changelogs: changelogs
+       @echo -n "Checking that the ChangeLog files are sane..."
+       @if grep -q "is required to generate" $(CHANGELOGS); then \
+               (echo "Ouch." && echo "Some of the ChangeLogs are not generated correctly." \
+               && echo "Remove ChangeLog* and make changelogs" \
+               && false); else :; fi
+       @echo "Good."
+
+release-verify-sane-tests:
+       @echo "Checking that the test suite is sane..."
+       @cd test && $(MAKE) $(AM_MAKEFLAGS) release-verify-sane-tests
+
+release-verify-even-micro:
+       @echo -n "Checking that $(VERSION) has an even micro component..."
+       @test "$(CAIRO_VERSION_MICRO)" = "`echo $(CAIRO_VERSION_MICRO)/2*2 | bc`" \
+               || (echo "Ouch." && echo "The version micro component '$(CAIRO_VERSION_MICRO)' is not an even number." \
+               && echo "The version in configure.in must be incremented before a new release." \
+               && false)
+       @echo "Good."
+
+release-verify-newer:
+       @echo -n "Checking that no $(VERSION) release already exists..."
+       @ssh $(RELEASE_UPLOAD_HOST) test ! -e $(RELEASE_UPLOAD_DIR)/$(tar_file) \
+               || (echo "Ouch." && echo "Found: $(RELEASE_UPLOAD_HOST):$(RELEASE_UPLOAD_DIR)/$(tar_file)" \
+               && echo "Are you sure you have an updated checkout?" \
+               && echo "This should never happen." \
+               && false)
+       @echo "Good."
+
+release-remove-old:
+       $(RM) $(tar_file) $(sha1_file) $(gpg_file)
+
+# Strict ordering enforced for parallel make to work
+release-check: \
+       release-verify-even-micro \
+       release-verify-sane-changelogs \
+       release-verify-sane-tests \
+       release-verify-newer \
+       $(NULL)
+       $(MAKE) $(AM_MAKEFLAGS) release-remove-old
+       TAR_OPTIONS="$(TAR_OPTIONS)" $(MAKE) $(AM_MAKEFLAGS) distcheck
+
+release-upload: $(tar_file) $(sha1_file) $(gpg_file)
+       mkdir -p releases
+       scp $(tar_file) $(sha1_file) $(gpg_file) $(RELEASE_UPLOAD_HOST):$(RELEASE_UPLOAD_DIR)
+       mv $(tar_file) $(sha1_file) $(gpg_file) releases
+       ssh $(RELEASE_UPLOAD_HOST) "rm -f $(RELEASE_UPLOAD_DIR)/LATEST-$(PACKAGE)-[0-9]* && ln -s $(tar_file) $(RELEASE_UPLOAD_DIR)/LATEST-$(PACKAGE)-$(VERSION)"
+       git tag -s  -m "cairo $(CAIRO_VERSION_MAJOR).$(CAIRO_VERSION_MINOR).$(CAIRO_VERSION_MICRO) release" $(CAIRO_VERSION_MAJOR).$(CAIRO_VERSION_MINOR).$(CAIRO_VERSION_MICRO)
+
+release-publish-message: releases/$(sha1_file)
+       @echo "Please follow the instructions in RELEASING to push stuff out and"
+       @echo "send out the announcement mails.  Here is the excerpt you need:"
+       @echo ""
+       @echo "Subject: $(PACKAGE) $(RELEASE_OR_SNAPSHOT) $(VERSION) now available"
+       @echo ""
+       @echo "============================== CUT HERE =============================="
+       @echo "A new $(PACKAGE) $(RELEASE_OR_SNAPSHOT) $(VERSION) is now available from:"
+       @echo ""
+       @echo " $(RELEASE_URL_BASE)/$(tar_file)"
+       @echo ""
+       @echo "    which can be verified with:"
+       @echo ""
+       @echo " $(RELEASE_URL_BASE)/$(sha1_file)"
+       @echo -n "      "
+       @cat releases/$(sha1_file)
+       @echo ""
+       @echo " $(RELEASE_URL_BASE)/$(gpg_file)"
+       @echo " (signed by `getent passwd "$$USER" | cut -d: -f 5 | cut -d, -f 1`)"
+       @echo ""
+       @echo "  Additionally, a git clone of the source tree:"
+       @echo ""
+       @echo " git clone git://git.cairographics.org/git/cairo"
+       @echo ""
+       @echo "    will include a signed $(VERSION) tag which points to a commit named:"
+       @echo " `git cat-file tag $(VERSION) | grep ^object | sed -e 's,object ,,'`"
+       @echo ""
+       @echo "    which can be verified with:"
+       @echo " git verify-tag $(VERSION)"
+       @echo ""
+       @echo "    and can be checked out with a command such as:"
+       @echo " git checkout -b build $(VERSION)"
+       @echo ""
+       @echo "============================== CUT HERE =============================="
+
+doc-publish-versioned: doc
+       rm -rf ./$(MANUAL_VERSIONED)
+       cp -a doc/public/html $(MANUAL_VERSIONED)
+       tar czf $(MANUAL_TAR_FILE) $(MANUAL_VERSIONED)
+       scp $(MANUAL_TAR_FILE) $(RELEASE_UPLOAD_HOST):$(MANUAL_UPLOAD_DIR)
+       ssh $(RELEASE_UPLOAD_HOST) "cd $(MANUAL_UPLOAD_DIR) && tar xzf $(MANUAL_TAR_FILE) && ln -sf $(MANUAL_TAR_FILE) cairo-$(MANUAL_TAR_FILE)"
+
+doc-publish-symlinks:
+       ssh $(RELEASE_UPLOAD_HOST) "cd $(MANUAL_UPLOAD_DIR) && rm -f manual && ln -s $(MANUAL_VERSIONED) manual && ln -sf $(MANUAL_TAR_FILE) cairo-manual.tar.gz"
+
+doc-publish:
+       $(MAKE) $(AM_MAKEFLAGS) doc-publish-versioned
+       @if test "$(RELEASE_OR_SNAPSHOT)" = release; then $(MAKE) $(AM_MAKEFLAGS) doc-publish-symlinks; fi
+
+# Strict ordering enforced for parallel make to work
+release-publish: release-check
+       $(MAKE) $(AM_MAKEFLAGS) release-upload
+       $(MAKE) $(AM_MAKEFLAGS) doc-publish
+       $(MAKE) $(AM_MAKEFLAGS) release-publish-message
+
+@OS_WIN32_TRUE@$(runtime_zip_file): install
+@OS_WIN32_TRUE@        -$(RM) $@
+@OS_WIN32_TRUE@        pwd=`pwd`; cd $(prefix); \
+@OS_WIN32_TRUE@        zip "$$pwd"/$@ bin/libcairo-$(CAIRO_VERSION_SONUM).dll
+
+@OS_WIN32_TRUE@$(developer_zip_file): install
+@OS_WIN32_TRUE@        -$(RM) $@
+@OS_WIN32_TRUE@        pwd=`pwd`; cd $(prefix); \
+@OS_WIN32_TRUE@        zip -r "$$pwd"/$@ include/cairo lib/libcairo.dll.a lib/cairo.lib lib/pkgconfig/cairo.pc lib/pkgconfig/cairo-*.pc share/gtk-doc/html/cairo
+
+@OS_WIN32_TRUE@zips: $(runtime_zip_file) $(developer_zip_file)
+
+.PHONY: \
+       dist-clear-sticky-bits \
+       doc-publish \
+       doc-publish-symlinks \
+       doc-publish-versioned \
+       release-check \
+       release-publish \
+       release-publish-message \
+       release-remove-old \
+       release-upload \
+       release-verify-even-micro \
+       release-verify-newer \
+       release-verify-sane-changelogs \
+       release-verify-sane-tests \
+       snapshot \
+       snapshot-dist \
+       $(NULL)
+# use recursive makes in order to ignore errors during check/perf
+@CAIRO_HAS_LCOV_TRUE@lcov:
+@CAIRO_HAS_LCOV_TRUE@  -$(MAKE) $(AM_MAKEFLAGS) check
+@CAIRO_HAS_LCOV_TRUE@  $(MAKE) $(AM_MAKEFLAGS) genlcov
+@CAIRO_HAS_LCOV_TRUE@lcov-perf:
+@CAIRO_HAS_LCOV_TRUE@  -$(MAKE) $(AM_MAKEFLAGS) perf
+@CAIRO_HAS_LCOV_TRUE@  $(MAKE) $(AM_MAKEFLAGS) genlcov
+
+# we have to massage the lcov.info file slightly to hide the effect of libtool
+# placing the objects files in the .libs/ directory separate from the *.c
+@CAIRO_HAS_LCOV_TRUE@genlcov:
+@CAIRO_HAS_LCOV_TRUE@  $(LTP) --directory $(top_builddir) --path $(top_builddir) --capture --output-file cairo-lcov.info --test-name CAIRO_TEST --no-checksum
+@CAIRO_HAS_LCOV_TRUE@  $(SED) -e 's#.libs/##' \
+@CAIRO_HAS_LCOV_TRUE@         -e 's#boilerplate/src#src#' \
+@CAIRO_HAS_LCOV_TRUE@         -e 's#$(shell pwd)#$(shell cd $(top_srcdir) && pwd)#' \
+@CAIRO_HAS_LCOV_TRUE@         < cairo-lcov.info > cairo-lcov.info.tmp
+@CAIRO_HAS_LCOV_TRUE@  LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory cairo-lcov --title "Cairo Code Coverage" --show-details cairo-lcov.info.tmp
+@CAIRO_HAS_LCOV_TRUE@  $(RM) cairo-lcov.info.tmp
+
+@CAIRO_HAS_LCOV_TRUE@html-local: lcov
+@CAIRO_HAS_LCOV_FALSE@lcov lcov-perf genlcov:
+@CAIRO_HAS_LCOV_FALSE@ @echo You need to configure Cairo with support for gcov enabled.
+@CAIRO_HAS_LCOV_FALSE@ @echo e.g, ./configure --enable-gcov
+
+lcov-clean:
+@CAIRO_HAS_LCOV_TRUE@  -$(LTP) --directory $(top_builddir) -z
+       -$(RM) -r cairo-lcov.info cairo-lcov
+       -$(FIND) -name '*.gcda' -print | $(XARGS) $(RM)
+
+distclean-local: lcov-clean
+
+.PHONY: lcov lcov-perf genlcov lcov-clean
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
index f475246..fbad7f3 100644 (file)
@@ -1,8 +1,10 @@
+default: all
+
 # Do not edit this file.
 # Edit build/Makefile.win32.common for customization
 
 top_srcdir = .
-include $(top_srcdir)/build/Makefile.win32.common
+include $(top_srcdir)/build/Makefile.win32.inform
 
 all: cairo
 
@@ -14,3 +16,9 @@ perf: inform
 
 test: inform
        @$(MAKE) -C test -f Makefile.win32 test
+
+clean:
+       @$(MAKE) -C boilerplate -f Makefile.win32 clean
+       @$(MAKE) -C perf -f Makefile.win32 clean
+       @$(MAKE) -C src -f Makefile.win32 clean
+       @$(MAKE) -C test -f Makefile.win32 clean
diff --git a/NEWS b/NEWS
index 8ec1577..7f1e5cc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,211 @@
+Release 1.12.2 (2012-04-29 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+After such a long gestation period for the release of Cairo 1.12, we
+inevitably accumulated a few bugs that were flushed out by broadening the
+test base. Thanks to everybody who tried the release, apologies to any one
+unfortunate enough to encounter a bug and many thanks for reporting it. As
+a result Adrian Johnson, Alexandros Frantzis, Andrea Canciani, Kalev
+Lember, Maarten Bosman, Marcus Meissner, Nis Martensen and Uli Schlachter
+have squashed many more bugs and improved the documentation. I would
+strongly recommend everyone to upgrade to cairo-1.12.2.
+-Chris
+
+Bug fixes
+---------
+
+ Allow applications to create 0x0 xlib surfaces, such as used by LibreOffice.
+ https://bugs.freedesktop.org/show_bug.cgi?id=49118
+ Trim composite extents for SOURCE/CLEAR operators to the mask.
+
+ Use fallback fonts in PDF for unhandled computed glyph widths
+ https://bugs.freedesktop.org/show_bug.cgi?id=48349
+
+ Handle snapshots of recording surfaces for analysing pattern extents.
+ Fixes a regression of reporting the PDF bounding box as being the page size.
+
+ Fix allocation size for PDF pattern ids.
+ Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49089
+
+ Fix emission of rectilinear dashed segments, with and without scaling, and
+ application of degenerate line joins.
+
+ Clamp unbounded fixup polygons to the clip extents.
+
+ Prevent infinite loop due to rounding errors whilst incrementing along dashes.
+
+ Prevent overflow for inline a8 span filling.
+
+ Miscellaneous build fixes for Cygwin on Windows and Solaris.
+
+Release 1.12.0 (2012-03-23 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+It's taken over 18 months, but the wait is finally over. A new cairo release!
+We are pleased to annouce a new stable release of Cairo that brings many
+new features and performance improvements, all whilst maintaining
+compatibility with cairo-1.0 and all releases since. We recommend anyone
+using a previous release of Cairo to upgrade to 1.12.0.
+
+The major feature of this release is the introduction of a new procedural
+pattern; the mesh gradient. This, albeit complex, gradient is constructed
+from a set of cubic Bezier patches and is a superset of all other gradient
+surfaces which allows for the construction of incredibily detailed patterns.
+In PDF parlance, the mesh gradient corresponds with type 7 patterns. Many
+thanks to Andrea Canciani for bringing this to Cairo, and for his work on
+making gradient handling robust.
+
+Not content with just adding another procedural pattern, Cairo 1.12 also
+adds new API to create a callback pattern,
+cairo_pattern_create_raster_source, that allows the application to
+provide the pixel data for the region of interest at the time of
+rendering. This can be used for instance, by an application to decode
+compressed images on demand and to keep a cache of those decompressed
+images, independently of Cairo. When combined with the recording
+surface, it should form a useful basis for a deferred renderer.
+
+With the release of cairo-1.12, we also introduce a new supported
+backend for interoperating with X using XCB. Uli Schlachter, also
+maintainer of awesome and contributor to libxcb, has volunteered to
+maintain cairo-xcb for us. Thanks Uli!
+
+For cairo-1.12, we have also added some common API to address any
+surface as an image and so allow direct modification of the raster data.
+Previously, only the Quartz and Win32 backends supported a very narrow
+interface to allow for efficient pixel upload. Now with
+cairo_surface_create_similar_image, cairo_surface_map_to_image, and
+cairo_surface_unmap_image, Cairo exports a consistent method for
+treating those surfaces as an image and so allow modification inplace.
+These are the same routines used internally, and should support
+efficient transfer or direct mapping of the target surfaces as
+applicable.
+
+Another focus over the past year has been to address many performance
+issues, without sacrificing the composition model. To accomplish the
+goal, once again the rasterisation pipeline was overhauled and made
+explicit, giving the backends the freedom to implement their own
+specific pipeline whilst also providing a library of common routines
+from which to build the pipeline. For instance, this allows the image
+backend and the gl backend to composite scan line primitives inplace,
+and to then implement custom fallbacks to catch the corner cases that do
+not map onto their fastest paths. Similarly, this allows for the Xlib
+backend to implement trapezoidation without compromising the other
+backends, yet still allow for the pipeline to be used elsewhere for
+testing and fallbacks. Clipping was once again overhauled, so that the
+common cases for the raster pipelines could be captured and processed
+with fast paths with the emphasis on performing geometric clipping to
+reduce the frequency of using multi-pass clipmasks. Stroking was made
+faster, both by providing specialised fast-paths for simple, yet frequent,
+cases (such as stroking around a rectangle) and by reducing the number
+of edges generated by the general stroker.
+
+As part of the focus on performance, Cairo 1.12 introduces some
+antialias hints (NONE,FAST, GOOD, BEST) that are interpolated by the
+raserisers to fine tune their performance versus quality. Cairo 1.12
+also introduces a new observation architecture,
+cairo_surface_observer_t, which can be used to analyse the amount of
+time consumed by drawing commands and help identify inefficiencies in
+both Cairo and the application.
+
+Last, but by no means least, the OpenGL backend has seen significant
+work including the port to GLESv2 and the exploitation of advanced
+hardware features. Interesting times.
+
+As always, I would like to thank everyone who contributed to Cairo,
+not only through writing code, but also submitting documentation, bug
+reports, suggestions and generally having fun with Cairo! In particular
+though this release could not have happened without the efforts of
+Adrian Johnson, Alexandros Frantiz, Andrea Canicani, Martin Robinson,
+Nis Martensen, and Uli Schlachter. Thanks.
+-Chris
+
+Snapshot 1.11.4 (2012-13-12)
+============================
+The cairo community is pleased to finally announce the long aniticpated
+release candidate for 1.12, 1.11.4, of the cairo graphics library. This
+is the first major update to cairo in over a year and brings a large
+number of new features; undoubtably a few bugs as well.
+
+While many people have contributed and have helped to test the release,
+providing feedback on 1.10 and suggesting improvements, this release
+is the result of a few persevering souls who deserve recognition for their
+outstanding contributions: Andrea Canciani (all round bug fixing,
+performance tuning and master of the gradients), Adrian Johnson (PDF
+supremo) and Uli Schlachter (who stepped forward as maintainer for the
+XCB backend).
+
+Major additions since 1.11.2:
+
+ * cairo_surface_map_to_image API for pixel level access to any surface
+
+ * New antialias hints to control the trade-off between speed and quality
+
+ * A callback pattern, cairo_pattern_create_raster_source, for lazy
+   decoding of image data.
+
+ * cairo_surface_observer_t, a new type of surface to gather performance
+   statistics
+
+ * XCB as a supported backend
+
+ * A rewritten compositor pipeline for performance improvements for, but not
+   limited to, the xlib and image backends.
+   From ION and PineView through to SandyBridge, every machine I have shows
+   across the board performance improvement on the cairo-traces:
+
+   i5-2520m    gnome-system-monitor:   5.97x speedup
+   pnv         gnome-system-monitor:   4.86x speedup
+   i5-2520m    firefox-asteroids:      4.66x speedup
+   pnv         firefox-asteroids:      4.43x speedup
+   image       firefox-canvas:         3.82x speedup
+   i5-2520m    firefox-canvas-alpha:   3.49x speedup
+   image       firefox-asteroids:      2.87x speedup
+   pnv         firefox-talos-svg:      2.83x speedup
+   ion         grads-heat-map:         2.75x speedup
+   pnv         firefox-canvas-alpha:   2.66x speedup
+   image       gnome-system-monitor:   2.66x speedup
+   image       swfdec-giant-steps:     2.46x speedup
+   image       firefox-canvas-alpha:   2.14x speedup
+   i5-2520m    firefox-talos-svg:      2.03x speedup
+   image       grads-heat-map:         2.02x speedup
+   ion         gnome-system-monitor:   2.00x speedup
+   pnv         firefox-particles:      1.99x speedup
+   i5-2520m    grads-heat-map:         1.96x speedup
+   pnv         firefox-canvas:         1.92x speedup
+   ion         firefox-particles:      1.80x speedup
+   image       poppler-reseau:         1.77x speedup
+   pnv         xfce4-terminal-a1:      1.72x speedup
+   image       firefox-talos-svg:      1.65x speedup
+   pnv         grads-heat-map:         1.63x speedup
+   i5-2520m    firefox-canvas:         1.63x speedup
+   pnv         swfdec-youtube:         1.62x speedup
+   image       ocitysmap:              1.59x speedup
+   i5-2520m    firefox-fishbowl:       1.56x speedup
+   i5-2520m    poppler-reseau:         1.50x speedup
+   i5-2520m    evolution:              1.50x speedup
+   i5-2520m    midori-zoomed:          1.43x speedup
+   pnv         firefox-planet-gnome:   1.42x speedup
+   i5-2520m    firefox-talos-gfx:      1.41x speedup
+   i5-2520m    gvim:                   1.41x speedup
+   pnv         ocitysmap:              1.37x speedup
+   image       poppler:                1.31x speedup
+   ion         firefox-canvas-alpha:   1.35x speedup
+   ion          firefox-talos-svg:     1.34x speedup
+   i5-2520m    ocitysmap:              1.32x speedup
+   pnv         poppler-reseau:         1.31x speedup
+   i5-2520m    firefox-planet-gnome:   1.31x speedup
+   pnv         firefox-fishbowl:       1.30x speedup
+   pnv         evolution:              1.28x speedup
+   image       gvim:                   1.27x speedup
+   i5-2520m    swfdec-youtube:         1.25x speedup
+   pnv         gnome-terminal-vim:     1.27x speedup
+   pnv         gvim:                   1.25x speedup
+   image       firefox-planet-gnome:   1.25x speedup
+   image       swfdec-youtube:         1.25x speedup
+   ...
+
+And a plethora of minor improvements everywhere!
+-Chris
+
 Snapshot 1.11.2 (2011-01-23)
 ===========================
 
diff --git a/README b/README
index ee7bd50..67ce4f5 100644 (file)
--- a/README
+++ b/README
@@ -5,9 +5,9 @@ What is cairo
 =============
 Cairo is a 2D graphics library with support for multiple output
 devices. Currently supported output targets include the X Window
-System, quartz, win32, and image buffers, as well as PDF, PostScript,
-and SVG file output. Experimental backends include OpenGL, XCB, BeOS,
-OS/2, and DirectFB.
+System (via both Xlib and XCB), quartz, win32, and image buffers,
+as well as PDF, PostScript, and SVG file output. Experimental backends
+include OpenGL, BeOS, OS/2, and DirectFB.
 
 Cairo is designed to produce consistent output on all output media
 while taking advantage of display hardware acceleration when available
@@ -125,6 +125,10 @@ Supported, "platform" surface backends
        -------------
        Microsoft Windows 2000 or newer[*].
 
+       xcb backend
+       -----------
+       XCB                     http://xcb.freedesktop.org
+
 Font backends (required to have at least one)
 ---------------------------------------------
        freetype font backend
@@ -163,10 +167,6 @@ Font backends (required to have at least one)
 
 Experimental surface backends
 -----------------------------
-       xcb backend
-       -----------
-       XCB                     http://xcb.freedesktop.org
-
        beos backend
        ------------
        No dependencies in itself other than an installed BeOS system, but cairo
diff --git a/TC/_export_env.sh b/TC/_export_env.sh
new file mode 100755 (executable)
index 0000000..5b67c3b
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. ./config
+export TET_INSTALL_PATH=$TET_INSTALL_HOST_PATH # tetware root path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target # tetware target path
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export TET_ROOT=$TET_TARGET_PATH
+export CAIRO_TC_ROOT_PATH=/mnt/nfs/DTS/cairo/test
diff --git a/TC/_export_target_env.sh b/TC/_export_target_env.sh
new file mode 100755 (executable)
index 0000000..5ddaa53
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ./config
+export TET_INSTALL_PATH=$TET_INSTALL_TARGET_PATH # path to path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export TET_ROOT=$TET_TARGET_PATH
diff --git a/TC/build.sh b/TC/build.sh
new file mode 100755 (executable)
index 0000000..72aad6c
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. ./_export_env.sh                              # setting environment variables
+
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+HTML_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -c -p ./
+tcc -b -j $JOURNAL_RESULT -p ./
+grw -c 7 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
diff --git a/TC/clean.sh b/TC/clean.sh
new file mode 100755 (executable)
index 0000000..29743e0
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. ./_export_env.sh                              # setting environment variables
+
+export TET_SUITE_ROOT=`pwd`
+RESULT_DIR=results
+
+tcc -c -p ./                                # executing tcc, with clean option (-c)
+rm -r $RESULT_DIR
+rm -r tet_tmp_dir
+rm testcase/tet_captured
diff --git a/TC/config b/TC/config
new file mode 100755 (executable)
index 0000000..e8c668e
--- /dev/null
+++ b/TC/config
@@ -0,0 +1,2 @@
+TET_INSTALL_HOST_PATH=/view/DTS/TETware
+TET_INSTALL_TARGET_PATH=/mnt/nfs/DTS/TETware
diff --git a/TC/execute.sh b/TC/execute.sh
new file mode 100755 (executable)
index 0000000..a4f6095
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. ./_export_target_env.sh                    # setting environment variables
+
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+HTML_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -e -j $JOURNAL_RESULT -p ./
+grw -c 3 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
diff --git a/TC/perf/Makefile b/TC/perf/Makefile
new file mode 100644 (file)
index 0000000..bc9ebc5
--- /dev/null
@@ -0,0 +1,15 @@
+CC = gcc
+
+all : fill stroke image
+
+fill: main.c common.c fill.c
+        $(CC) main.c common.c fill.c -g -o fill `pkg-config --cflags --libs cairo elementary opengl-es-20` -lecore_x -levas -lecore
+
+stroke: main.c common.c stroke.c
+        $(CC) main.c common.c stroke.c -g -o stroke `pkg-config --cflags --libs cairo elementary opengl-es-20` -lecore_x -levas -lecore
+
+image: main.c common.c image.c
+        $(CC) main.c common.c image.c -g -o image `pkg-config --cflags --libs cairo elementary opengl-es-20` -lecore_x -levas -lecore
+
+clean:
+        rm -rf *.0 fill stroke image
diff --git a/TC/perf/common.c b/TC/perf/common.c
new file mode 100755 (executable)
index 0000000..8b2818b
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Cairo Performance Test Framework
+ * (c) 2012 Samsung Electronics, Inc.
+ * All rights reserved.
+ *
+ * Measures rendering performance for image, gl backends
+ *
+ * This software is a confidential and proprietary information of Samsung
+ * Electronics, Inc. ("Confidential Information"). You shall not disclose such
+ * Confidential Information and shall use it only in accordance with the terms
+ * of the license agreement you entered into with Samsung Electronics.
+ *
+ * Author: Dongyeon Kim <dy5.kim@samsung.com>
+ */
+
+#include "common.h"
+
+void clearCairo(cairo_t *cr, double width, double height)
+{
+    cairo_set_source_rgba(cr, 1, 1, 1, 1);
+    cairo_rectangle(cr, 0.0, 0.0, width, height);
+    cairo_fill(cr);
+}
+
+void cairoSquare(cairo_t *cr, double x, double y, double length)
+{
+    cairo_rectangle(cr, x, y, length, length);
+    cairo_fill(cr);
+}
+
+void cairoSquareStroke(cairo_t *cr, double x, double y, double length)
+{
+    cairo_rectangle(cr, x, y, length, length);
+    cairo_stroke(cr);
+}
+
+void cairoCircle(cairo_t *cr, double x, double y, double radius)
+{
+    cairo_arc(cr, x, y, radius, 0.0, 2.0 * M_PI);
+    cairo_fill(cr);
+}
+
+void cairoCircleStroke(cairo_t *cr, double x, double y, double radius)
+{
+    cairo_arc(cr, x, y, radius, 0.0, 2.0 * M_PI);
+    cairo_stroke(cr);
+}
+
+void cairoTriangle(cairo_t *cr, double x, double y, double side)
+{
+    cairo_move_to(cr, x, y);
+    cairo_line_to(cr, x + side, y + side);
+    cairo_line_to(cr, x, y + side);
+    cairo_close_path(cr);
+    cairo_fill(cr);
+}
+
+void cairoTriangleStroke(cairo_t *cr, double x, double y, double side)
+{
+    cairo_move_to(cr, x, y);
+    cairo_line_to(cr, x + side, y);
+    cairo_line_to(cr, x, y + side);
+    cairo_close_path(cr);
+    cairo_stroke(cr);
+}
diff --git a/TC/perf/common.h b/TC/perf/common.h
new file mode 100755 (executable)
index 0000000..647a6d7
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Cairo Performance Test Framework
+ * (c) 2012 Samsung Electronics, Inc.
+ * All rights reserved.
+ *
+ * Measures rendering performance for image, gl backends
+ *
+ * This software is a confidential and proprietary information of Samsung
+ * Electronics, Inc. ("Confidential Information"). You shall not disclose such
+ * Confidential Information and shall use it only in accordance with the terms
+ * of the license agreement you entered into with Samsung Electronics.
+ *
+ * Author: Dongyeon Kim <dy5.kim@samsung.com>
+ */
+
+#include <Ecore_X.h>
+#include <Elementary.h>
+#include <cairo.h>
+#include <cairo-gl.h>
+
+void clearCairo(cairo_t *cr, double width, double height);
+void cairoSquare(cairo_t *cr, double x, double y, double length);
+void cairoSquareStroke(cairo_t *cr, double x, double y, double length);
+void cairoCircle(cairo_t *cr, double x, double y, double radius);
+void cairoCircleStroke(cairo_t *cr, double x, double y, double radius);
+void cairoTriangle(cairo_t *cr, double x, double y, double side);
+void cairoTriangleStroke(cairo_t *cr, double x, double y, double side);
+
diff --git a/TC/perf/fill b/TC/perf/fill
new file mode 100755 (executable)
index 0000000..c44d12f
Binary files /dev/null and b/TC/perf/fill differ
diff --git a/TC/perf/fill.c b/TC/perf/fill.c
new file mode 100755 (executable)
index 0000000..4d1395d
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Cairo Performance Test Framework
+ * (c) 2012 Samsung Electronics, Inc.
+ * All rights reserved.
+ *
+ * Measures rendering performance for image, gl backends
+ *
+ * This software is a confidential and proprietary information of Samsung
+ * Electronics, Inc. ("Confidential Information"). You shall not disclose such
+ * Confidential Information and shall use it only in accordance with the terms
+ * of the license agreement you entered into with Samsung Electronics.
+ *
+ * Author: Dongyeon Kim <dy5.kim@samsung.com>
+ */
+
+#include "common.h"
+
+#define RENDER_LOOP 100
+
+extern int WIDTH, HEIGHT;
+
+int preRender(cairo_t *cr)
+{
+    return 1;
+}
+
+int render(cairo_t *cr)
+{
+    int i;
+    double r, g, b, a;
+
+    clearCairo(cr, WIDTH, HEIGHT);
+    cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
+
+    for(i = 0; i < RENDER_LOOP; i++)
+    {
+        r = drand48();
+        g = drand48();
+        b = drand48();
+        a = drand48();
+        float x = drand48() * WIDTH;
+        float y = drand48() * HEIGHT;
+        float side = drand48() * 300;
+        int shape = drand48() * 3;
+
+        cairo_set_source_rgba(cr, r, g, b, a);
+
+        if(shape == 0)
+            cairoSquare(cr, x, y, side);
+        else if(shape == 1)
+            cairoCircle(cr, x, y, side/2);
+        else
+            cairoTriangle(cr, x, y, side);
+    }
+
+    return 1;
+}
+
+int postRender(cairo_t *cr)
+{
+    return 1;
+}
+
diff --git a/TC/perf/image b/TC/perf/image
new file mode 100755 (executable)
index 0000000..5df743d
Binary files /dev/null and b/TC/perf/image differ
diff --git a/TC/perf/image.c b/TC/perf/image.c
new file mode 100755 (executable)
index 0000000..f8f6587
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Cairo Performance Test Framework
+ * (c) 2012 Samsung Electronics, Inc.
+ * All rights reserved.
+ *
+ * Measures rendering performance for image, gl backends
+ *
+ * This software is a confidential and proprietary information of Samsung
+ * Electronics, Inc. ("Confidential Information"). You shall not disclose such
+ * Confidential Information and shall use it only in accordance with the terms
+ * of the license agreement you entered into with Samsung Electronics.
+ *
+ * Author: Dongyeon Kim <dy5.kim@samsung.com>
+ */
+
+#include "common.h"
+
+#define RENDER_LOOP 100
+
+extern int WIDTH, HEIGHT;
+
+extern cairo_device_t *cairo_device;
+cairo_pattern_t *pattern1, *pattern2;
+int image_width, image_height;
+
+int preRender(cairo_t *cr)
+{
+    { // Image 1
+        cairo_surface_t *image_surface = cairo_image_surface_create_from_png("./image1.png");
+        image_width = cairo_image_surface_get_width(image_surface);
+        image_height = cairo_image_surface_get_height(image_surface);
+
+        if(cairo_surface_get_type(cairo_get_target(cr)) == CAIRO_SURFACE_TYPE_IMAGE) {
+            pattern1 = cairo_pattern_create_for_surface(image_surface);
+        } else {
+            cairo_surface_t *gl_surface = cairo_gl_surface_create(cairo_device, CAIRO_CONTENT_COLOR_ALPHA,
+                        image_width, image_height);
+            cairo_t *cr_gl = cairo_create(gl_surface);
+            cairo_set_source_surface(cr_gl, image_surface, 0, 0);
+            cairo_paint(cr_gl);
+
+            pattern1 = cairo_pattern_create_for_surface(gl_surface);
+
+            cairo_surface_destroy(gl_surface);
+            cairo_destroy(cr_gl);
+        }
+        cairo_surface_destroy(image_surface);
+    }
+    { // Image 2
+        cairo_surface_t *image_surface = cairo_image_surface_create_from_png("./image2.png");
+        image_width = cairo_image_surface_get_width(image_surface);
+        image_height = cairo_image_surface_get_height(image_surface);
+
+        if(cairo_surface_get_type(cairo_get_target(cr)) == CAIRO_SURFACE_TYPE_IMAGE) {
+            pattern2 = cairo_pattern_create_for_surface(image_surface);
+        } else {
+            cairo_surface_t *gl_surface = cairo_gl_surface_create(cairo_device, CAIRO_CONTENT_COLOR_ALPHA,
+                        image_width, image_height);
+            cairo_t *cr_gl = cairo_create(gl_surface);
+            cairo_set_source_surface(cr_gl, image_surface, 0, 0);
+            cairo_paint(cr_gl);
+
+            pattern2 = cairo_pattern_create_for_surface(gl_surface);
+
+            cairo_surface_destroy(gl_surface);
+            cairo_destroy(cr_gl);
+        }
+        cairo_surface_destroy(image_surface);
+    }
+
+    return 1;
+}
+
+int render(cairo_t *cr)
+{
+    int i;
+
+    clearCairo(cr, WIDTH, HEIGHT);
+    cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
+
+    for(i = 0; i < RENDER_LOOP; i++)
+    {
+        float x = drand48() * WIDTH - image_width / 2;
+        float y = drand48() * HEIGHT - image_height / 2;
+        int index = drand48() * 2;
+
+        cairo_identity_matrix(cr);
+        cairo_translate(cr, x, y);
+        if(index == 0)
+            cairo_set_source(cr, pattern1);
+        else
+            cairo_set_source(cr, pattern2);
+        cairoSquare(cr, 0, 0, image_width);
+    }
+
+    return 1;
+}
+
+int postRender(cairo_t *cr)
+{
+    cairo_pattern_destroy(pattern1);
+    cairo_pattern_destroy(pattern2);
+    return 1;
+}
+
diff --git a/TC/perf/image1.png b/TC/perf/image1.png
new file mode 100755 (executable)
index 0000000..b45c7bd
Binary files /dev/null and b/TC/perf/image1.png differ
diff --git a/TC/perf/image2.png b/TC/perf/image2.png
new file mode 100755 (executable)
index 0000000..0ec9cf5
Binary files /dev/null and b/TC/perf/image2.png differ
diff --git a/TC/perf/main.c b/TC/perf/main.c
new file mode 100755 (executable)
index 0000000..b0fa8b7
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * Cairo Performance Test Framework
+ * (c) 2012 Samsung Electronics, Inc.
+ * All rights reserved.
+ *
+ * Measures rendering performance for image, gl backends
+ *
+ * This software is a confidential and proprietary information of Samsung
+ * Electronics, Inc. ("Confidential Information"). You shall not disclose such
+ * Confidential Information and shall use it only in accordance with the terms
+ * of the license agreement you entered into with Samsung Electronics.
+ *
+ * Author: Dongyeon Kim <dy5.kim@samsung.com>
+ */
+
+#include <Ecore_X.h>
+#include <Elementary.h>
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <cairo.h>
+#include <cairo-gl.h>
+
+#define SURFACE_TYPE_IMAGE  0
+#define SURFACE_TYPE_GL     1
+#define TOTAL_TIME      100
+
+int WIDTH, HEIGHT;
+
+//Ecore Evas variables
+Ecore_X_Window window;
+Evas_Object *img;
+
+//EGL variables
+EGLDisplay egl_display;
+EGLSurface egl_surface;
+EGLContext egl_context;
+
+//Cairo variables
+cairo_device_t *cairo_device;
+cairo_surface_t *cairo_surface;
+cairo_t *cr;
+
+Eina_Bool renderMain(void *data)
+{
+    static int counter = 0;
+    static float totalTime = 0;
+    static float totalPaint = 0;
+    static float totalUpdate = 0;
+    struct timeval paintStart, paintStop, updateStop;
+
+    cairo_save(cr);
+    gettimeofday(&paintStart, NULL);
+    /* ########## PAINT : START ########## */
+    render(cr);
+    /* ########## PAINT : END ########## */
+    gettimeofday(&paintStop, NULL);
+    /* ########## UPDATE : START ########## */
+    if(cairo_surface_get_type(cairo_get_target(cr)) == CAIRO_SURFACE_TYPE_GL) {
+        cairo_gl_surface_swapbuffers(cairo_get_target(cr));
+    } else {
+        unsigned char *imageData = cairo_image_surface_get_data(cairo_get_target(cr));
+        evas_object_image_data_set(img, imageData);
+        evas_object_image_data_update_add(img, 0, 0, WIDTH, HEIGHT);
+        ecore_x_sync();
+    }
+    /* ########## UPDATE : END ########## */
+    gettimeofday(&updateStop, NULL);
+    cairo_restore(cr);
+
+    totalTime += updateStop.tv_usec - paintStart.tv_usec;
+    totalTime += (updateStop.tv_sec - paintStart.tv_sec)*1000000;
+    totalPaint += (paintStop.tv_usec - paintStart.tv_usec);
+    totalPaint += (paintStop.tv_sec - paintStart.tv_sec)*1000000;
+    totalUpdate += (updateStop.tv_usec - paintStop.tv_usec);
+    totalUpdate += (updateStop.tv_sec - paintStop.tv_sec)*1000000;
+    counter++;
+
+    if(counter == TOTAL_TIME)
+    {
+        float fps =  TOTAL_TIME / totalTime * 1000000.0f;
+        printf("fps = %0.2f\n", fps);
+        printf("average paint time = %0.1f usec, update time = %0.1f usec\n", totalPaint/TOTAL_TIME, totalUpdate/TOTAL_TIME);
+
+        elm_exit();
+        return 0;
+    }
+}
+
+void initELMWindow(int surface_type)
+{
+    Evas_Object *win = elm_win_add(NULL, "cairotest", ELM_WIN_BASIC);
+    elm_win_autodel_set(win, EINA_TRUE);
+    ecore_x_screen_size_get(ecore_x_default_screen_get(), &WIDTH, &HEIGHT);
+    evas_object_resize(win, WIDTH, HEIGHT);
+    evas_object_show(win);
+
+    if (surface_type == SURFACE_TYPE_IMAGE) {
+        Evas_Object *img_win = elm_image_add(win);
+        img = evas_object_image_filled_add(evas_object_evas_get(img_win));
+        elm_win_resize_object_add(win, img);
+        evas_object_image_content_hint_set(img, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
+        evas_object_image_size_set(img, WIDTH, HEIGHT);
+        evas_object_image_colorspace_set(img, EVAS_COLORSPACE_ARGB8888);
+        evas_object_image_alpha_set(img, 0);
+        evas_object_show(img_win);
+        evas_object_show(img);
+    } else if(surface_type == SURFACE_TYPE_GL) {
+        window = ecore_x_window_new(0, 0, 0, WIDTH, HEIGHT);
+        ecore_x_icccm_title_set(window, "window");
+        ecore_x_netwm_name_set(window, "window");
+        ecore_x_input_multi_select(window);
+        ecore_x_icccm_transient_for_set(window, elm_win_xwindow_get(win));
+        ecore_x_window_show(window);
+    }
+}
+
+void initEGL(int surface_type)
+{
+    if(surface_type != SURFACE_TYPE_GL)
+        return;
+
+    setenv("ELM_ENGINE", "gl", 1);
+
+    egl_display = eglGetDisplay((EGLNativeDisplayType) ecore_x_display_get());
+    if(egl_display == EGL_NO_DISPLAY)
+    {
+        printf("cannot get egl display\n");
+        exit(1);
+    }
+
+    EGLint major, minor;
+    if(!eglInitialize(egl_display, &major, &minor))
+    {
+        printf("cannot initialize egl\n");
+        exit(-1);
+    }
+
+    if(!eglBindAPI(EGL_OPENGL_ES_API))
+    {
+        printf("cannot bind egl to gles2 API\n");
+        exit(-1);
+    }
+
+    EGLConfig egl_config;
+    EGLint num;
+
+    EGLint attr[] =
+    {
+        EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+        EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+        EGL_STENCIL_SIZE, 0,
+        EGL_SAMPLES, 4,
+        EGL_RED_SIZE, 8,
+        EGL_GREEN_SIZE, 8,
+        EGL_BLUE_SIZE, 8,
+        EGL_ALPHA_SIZE, 8,
+        EGL_NONE
+    };
+
+
+    if(!eglChooseConfig(egl_display, attr, &egl_config, 1, &num))
+    {
+        printf("cannot choose config\n");
+        exit(-1);
+    }
+
+    if(num != 1)
+    {
+        printf("did not get exactly one config = %d\n", num);
+        exit(-1);
+    }
+
+    egl_surface = eglCreateWindowSurface(egl_display,
+        egl_config, (NativeWindowType) window, NULL);
+    if(egl_surface == EGL_NO_SURFACE)
+    {
+        printf("cannot create surface\n");
+        exit(-1);
+    }
+
+    EGLint e = eglGetError();
+    //printf("egl error = %x\n", e);
+
+    EGLint ctxattr[] =
+    {
+        EGL_CONTEXT_CLIENT_VERSION, 2,
+        EGL_NONE
+    };
+
+    egl_context = eglCreateContext(egl_display, egl_config, EGL_NO_CONTEXT, ctxattr);
+    if(egl_context == EGL_NO_CONTEXT)
+    {
+        EGLint e = eglGetError();
+        printf("cannot create context, error = %x\n", e);
+        exit(-1);
+    }
+
+    EGLint value;
+    EGLBoolean result = eglQueryContext(egl_display, egl_context, EGL_CONTEXT_CLIENT_VERSION, &value);
+    //printf("Context version = %x, result = %d\n", value, result);
+
+    eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context);
+}
+
+void destroyEGL(int surface_type)
+{
+    if(surface_type != SURFACE_TYPE_GL)
+        return;
+
+    eglDestroyContext(egl_display, egl_context);
+    eglDestroySurface(egl_display, egl_surface);
+    eglTerminate(egl_display);
+}
+
+void initCairo(int surface_type)
+{
+    if(surface_type == SURFACE_TYPE_IMAGE) {
+        printf("== CREATE IMAGE SURFACE ==\n");
+        cairo_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, WIDTH, HEIGHT);
+    } else if(surface_type == SURFACE_TYPE_GL) {
+        printf("== CREATE GL SURFACE ==\n");
+        setenv("CAIRO_GL_COMPOSITOR", "msaa", 1);
+        cairo_device = cairo_egl_device_create(egl_display, egl_context);
+        cairo_gl_device_set_thread_aware(cairo_device, 0);
+        cairo_surface = cairo_gl_surface_create_for_egl(cairo_device, egl_surface, WIDTH, HEIGHT);
+    }
+    cr = cairo_create(cairo_surface);
+}
+
+void destroyCairo(int surface_type)
+{
+    cairo_surface_destroy(cairo_surface);
+    cairo_destroy(cr);
+
+    if(surface_type == SURFACE_TYPE_GL) {
+        cairo_device_destroy(cairo_device);
+    }
+}
+
+int main(int argc, char **argv)
+{
+    int surface_type = SURFACE_TYPE_GL;
+
+    if(argc == 2)
+        surface_type = atoi(argv[1]);
+
+    elm_init(argc, argv);
+
+    initELMWindow(surface_type);
+    initEGL(surface_type);
+    initCairo(surface_type);
+
+    preRender(cr);
+    Ecore_Animator *animator = ecore_animator_add(renderMain, (void *)cr);
+    elm_run();
+    postRender(cr);
+
+    destroyCairo(surface_type);
+    destroyEGL(surface_type);
+    elm_shutdown();
+
+    return 0;
+}
+
diff --git a/TC/perf/stroke b/TC/perf/stroke
new file mode 100755 (executable)
index 0000000..809ad22
Binary files /dev/null and b/TC/perf/stroke differ
diff --git a/TC/perf/stroke.c b/TC/perf/stroke.c
new file mode 100755 (executable)
index 0000000..317f004
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Cairo Performance Test Framework
+ * (c) 2012 Samsung Electronics, Inc.
+ * All rights reserved.
+ *
+ * Measures rendering performance for image, gl backends
+ *
+ * This software is a confidential and proprietary information of Samsung
+ * Electronics, Inc. ("Confidential Information"). You shall not disclose such
+ * Confidential Information and shall use it only in accordance with the terms
+ * of the license agreement you entered into with Samsung Electronics.
+ *
+ * Author: Dongyeon Kim <dy5.kim@samsung.com>
+ */
+
+#include "common.h"
+
+#define RENDER_LOOP 100
+
+extern int WIDTH, HEIGHT;
+
+int preRender(cairo_t *cr)
+{
+    return 1;
+}
+
+int render(cairo_t *cr)
+{
+    int i;
+    double r, g, b, a;
+
+    clearCairo(cr, WIDTH, HEIGHT);
+    cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
+
+    for(i = 0; i < RENDER_LOOP; i++)
+    {
+        r = drand48();
+        g = drand48();
+        b = drand48();
+        a = drand48();
+        float x = drand48() * WIDTH;
+        float y = drand48() * HEIGHT;
+        float side = drand48() * 300;
+        int shape = drand48() *3;
+        float width = drand48() * 50 + 1;
+        int line_cap = drand48() * 3;
+        cairo_line_cap_t line_cap_style = CAIRO_LINE_CAP_BUTT;
+        if(line_cap == 1)
+            line_cap_style = CAIRO_LINE_CAP_ROUND;
+        else if(line_cap == 2)
+            line_cap_style = CAIRO_LINE_CAP_SQUARE;
+        int line_join = drand48() * 3;
+        cairo_line_join_t line_join_style = CAIRO_LINE_JOIN_MITER;
+        if(line_join == 1)
+            line_join_style = CAIRO_LINE_JOIN_ROUND;
+        else if(line_join == 2)
+            line_join_style = CAIRO_LINE_JOIN_BEVEL;
+
+        double dash[] = {0.0, 0.0};
+        dash[0] = drand48() * 50;
+        dash[1] = drand48() * 50;
+
+        cairo_set_dash(cr, dash, 2, 0);
+        cairo_set_line_width(cr, width);
+        cairo_set_line_join(cr, line_join_style);
+        cairo_set_line_cap(cr, line_cap_style);
+
+        cairo_set_source_rgba(cr, r, g, b, a);
+
+        if(shape == 0)
+            cairoSquareStroke(cr, x, y, side);
+        else if(shape == 1)
+            cairoCircleStroke(cr, x, y, side/2);
+        else
+            cairoTriangleStroke(cr, x, y, side);
+    }
+
+    return 1;
+}
+
+int postRender(cairo_t *cr)
+{
+    return 1;
+}
+
diff --git a/TC/testcase/Makefile b/TC/testcase/Makefile
new file mode 100755 (executable)
index 0000000..d4f833e
--- /dev/null
@@ -0,0 +1,24 @@
+CC ?= gcc
+
+C_FILES = $(shell ls *.c)
+
+PKGS = cairo capi-base-common dlog gthread-2.0
+
+LDFLAGS = `pkg-config --libs $(PKGS)`
+LDFLAGS += $(TET_ROOT)/lib/tet3/tcm_s.o
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -ltcm_s
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -lapi_s
+
+CFLAGS = -I. `pkg-config --cflags $(PKGS)`
+CFLAGS += -I$(TET_ROOT)/inc/tet3
+CFLAGS += -Wall
+
+TCS := $(shell ls -1 *.c | cut -d. -f1)
+
+all: $(TCS)
+
+%: %.c
+       $(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)
+
+clean:
+       rm -f $(TCS)
diff --git a/TC/testcase/cairo-test.h b/TC/testcase/cairo-test.h
new file mode 100644 (file)
index 0000000..24ff827
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef _CAIRO_COMMON_H_
+#define _CAIRO_COMMON_H_
+
+//#include "cairo-boilerplate.h"
+
+#include <stdarg.h>
+#include <stdint.h>
+#include <math.h>
+
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define ARRAY_LENGTH(__array) ((int) (sizeof (__array) / sizeof (__array[0])))
+
+#define CAIRO_TEST_OUTPUT_DIR "output"
+#define CAIRO_TEST_LOG_SUFFIX ".log"
+#define CAIRO_TEST_FONT_FAMILY "DejaVu"
+
+/* What is a fail and what isn't?
+ * When running the test suite we want to detect unexpected output. This
+ * can be caused by a change we have made to cairo itself, or a change
+ * in our environment. To capture this we classify the expected output into 3
+ * classes:
+ *
+ *   REF  -- Perfect output.
+ *           Might be different for each backend, due to slight implementation
+ *           differences.
+ *
+ *   NEW  -- A new failure. We have uncovered a bug within cairo and have
+ *           recorded the current failure (along with the expected output
+ *           if possible!) so we can detect any changes in our attempt to
+ *           fix the bug.
+ *
+ *  XFAIL -- An external failure. We believe the cairo output is perfect,
+ *           but an external renderer is causing gross failure.
+ *           (We also use this to capture current WONTFIX issues within cairo,
+ *           such as overflow in internal coordinates, so as not to distract
+ *           us when regression testing.)
+ *
+ *  If no REF is given for a test, then it is assumed to be XFAIL.
+ */
+#define CAIRO_TEST_REF_SUFFIX ".ref"
+#define CAIRO_TEST_XFAIL_SUFFIX ".xfail"
+#define CAIRO_TEST_NEW_SUFFIX ".new"
+
+#define CAIRO_TEST_OUT_SUFFIX ".out"
+#define CAIRO_TEST_DIFF_SUFFIX ".diff"
+
+#define CAIRO_TEST_PNG_EXTENSION ".png"
+#define CAIRO_TEST_OUT_PNG CAIRO_TEST_OUT_SUFFIX CAIRO_TEST_PNG_EXTENSION
+#define CAIRO_TEST_REF_PNG CAIRO_TEST_REF_SUFFIX CAIRO_TEST_PNG_EXTENSION
+#define CAIRO_TEST_DIFF_PNG CAIRO_TEST_DIFF_SUFFIX CAIRO_TEST_PNG_EXTENSION
+
+typedef enum cairo_test_status {
+    CAIRO_TEST_SUCCESS = 0,
+    CAIRO_TEST_NO_MEMORY,
+    CAIRO_TEST_FAILURE,
+    CAIRO_TEST_NEW,
+    CAIRO_TEST_XFAILURE,
+    CAIRO_TEST_ERROR,
+    CAIRO_TEST_CRASHED,
+    CAIRO_TEST_UNTESTED = 77 /* match automake's skipped exit status */
+} cairo_test_status_t;
+
+#define CAIRO_TEST_DOUBLE_EQUALS(a,b)  (fabs((a)-(b)) < 0.00001)
+
+#endif
diff --git a/TC/testcase/tslist b/TC/testcase/tslist
new file mode 100644 (file)
index 0000000..c3e5d9d
--- /dev/null
@@ -0,0 +1,1022 @@
+/testcase/utc_a1_bug_image
+/testcase/utc_a1_clip_paint_image
+/testcase/utc_a1_clip_fill_image
+/testcase/utc_a1_clip_fill_equal_image
+/testcase/utc_a1_clip_stroke_image
+/testcase/utc_a1_fill_image
+/testcase/utc_a1_image_sample_image
+/testcase/utc_a1_mask_image
+/testcase/utc_a1_mask_sample_image
+/testcase/utc_a1_rasterisation_rectangles_image
+/testcase/utc_a1_rasterisation_triangles_image
+/testcase/utc_a1_sample_image
+/testcase/utc_a1_traps_sample_image
+/testcase/utc_a8_clear_image
+/testcase/utc_a8_mask_image
+/testcase/utc_aliasing_image
+/testcase/utc_alpha_similar_image
+/testcase/utc_api_special_cases_image
+/testcase/utc_arc_infinite_loop_image
+/testcase/utc_arc_looping_dash_image
+/testcase/utc_big_empty_box_image
+/testcase/utc_big_empty_triangle_image
+/testcase/utc_big_line_image
+/testcase/utc_big_little_box_image
+/testcase/utc_big_little_triangle_image
+#/testcase/utc_big_trap_image
+/testcase/utc_bilevel_image_image
+/testcase/utc_bitmap_font_image
+/testcase/utc_bug_40410_image
+/testcase/utc_bug_bo_rectangular_image
+/testcase/utc_bug_bo_ricotz_image
+/testcase/utc_bug_extents_image
+/testcase/utc_bug_seams_image
+/testcase/utc_bug_source_cu_image
+/testcase/utc_caps_image
+/testcase/utc_caps_joins_alpha_image
+/testcase/utc_caps_joins_image
+/testcase/utc_caps_joins_curve_image
+/testcase/utc_caps_sub_paths_image
+/testcase/utc_caps_tails_curve_image
+/testcase/utc_checkerboard_image
+#/testcase/utc_clear_image
+/testcase/utc_clear_source_image
+/testcase/utc_clip_all_image
+/testcase/utc_clip_complex_shape_eo_mono_image
+/testcase/utc_clip_complex_shape_eo_aa_image
+/testcase/utc_clip_contexts_image
+/testcase/utc_clip_device_offset_image
+/testcase/utc_clip_disjoint_image
+/testcase/utc_clip_disjoint_hatching_image
+/testcase/utc_clip_double_free_image
+/testcase/utc_clip_stroke_unbounded_image
+/testcase/utc_clip_fill_nz_unbounded_image
+/testcase/utc_clip_fill_eo_unbounded_image
+/testcase/utc_clip_empty_image
+/testcase/utc_clip_empty_group_image
+/testcase/utc_clip_empty_save_image
+/testcase/utc_clip_fill_image
+/testcase/utc_clip_fill_no_op_image
+/testcase/utc_clip_fill_rule_image
+/testcase/utc_a1_clip_fill_rule_image
+/testcase/utc_clip_fill_rule_pixel_aligned_image
+/testcase/utc_clip_group_shapes_aligned_rectangles_image
+/testcase/utc_clip_group_shapes_unaligned_rectangles_image
+/testcase/utc_clip_group_shapes_circles_image
+/testcase/utc_clip_image_image
+/testcase/utc_clip_intersect_image
+/testcase/utc_clip_mixed_antialias_image
+/testcase/utc_clip_nesting_image
+#/testcase/utc_clip_operator_image
+/testcase/utc_clipped_group_image
+/testcase/utc_clipped_surface_image
+#/testcase/utc_clipped_trapezoids_image
+/testcase/utc_clip_polygons_image
+/testcase/utc_clip_push_group_image
+/testcase/utc_clip_rectilinear_image
+/testcase/utc_clip_shape_image
+/testcase/utc_clip_stroke_image
+/testcase/utc_clip_stroke_no_op_image
+#/testcase/utc_clip_text_image
+/testcase/utc_clip_twice_image
+/testcase/utc_clip_twice_rectangle_image
+/testcase/utc_clip_unbounded_image
+/testcase/utc_clip_zero_image
+/testcase/utc_close_path_image
+/testcase/utc_close_path_current_point_image
+/testcase/utc_composite_integer_translate_over_image
+/testcase/utc_composite_integer_translate_over_repeat_image
+/testcase/utc_composite_integer_translate_source_image
+/testcase/utc_copy_disjoint_image
+/testcase/utc_copy_path_image
+#/testcase/utc_coverage_rectangles_image
+#/testcase/utc_coverage_intersecting_quads_image
+#/testcase/utc_coverage_intersecting_triangles_image
+#/testcase/utc_coverage_row_triangles_image
+#/testcase/utc_coverage_column_triangles_image
+#/testcase/utc_coverage_triangles_image
+#/testcase/utc_create_for_stream_image
+/testcase/utc_create_from_png_image
+/testcase/utc_create_from_png_stream_image
+#/testcase/utc_culled_glyphs_image
+/testcase/utc_curve_to_as_line_to_image
+/testcase/utc_dash_caps_joins_image
+/testcase/utc_dash_curve_image
+/testcase/utc_dash_infinite_loop_image
+/testcase/utc_dash_no_dash_image
+/testcase/utc_dash_offset_image
+/testcase/utc_dash_offset_negative_image
+/testcase/utc_dash_scale_image
+/testcase/utc_dash_state_image
+/testcase/utc_dash_zero_length_image
+/testcase/utc_degenerate_arc_image
+/testcase/utc_degenerate_arcs_image
+/testcase/utc_degenerate_curve_to_image
+/testcase/utc_degenerate_dash_image
+/testcase/utc_degenerate_linear_gradient_image
+/testcase/utc_degenerate_path_image
+/testcase/utc_degenerate_pen_image
+/testcase/utc_degenerate_radial_gradient_image
+/testcase/utc_degenerate_rel_curve_to_image
+/testcase/utc_degenerate_solid_dash_image
+/testcase/utc_device_offset_image
+/testcase/utc_device_offset_fractional_image
+/testcase/utc_device_offset_positive_image
+/testcase/utc_device_offset_scale_image
+/testcase/utc_drunkard_tails_image
+/testcase/utc_error_setters_image
+/testcase/utc_extended_blend_image
+/testcase/utc_extended_blend_alpha_image
+/testcase/utc_extended_blend_mask_image
+/testcase/utc_extended_blend_alpha_mask_image
+/testcase/utc_extended_blend_solid_image
+/testcase/utc_extended_blend_solid_alpha_image
+/testcase/utc_extend_pad_border_image
+/testcase/utc_extend_pad_image
+/testcase/utc_extend_pad_similar_image
+/testcase/utc_extend_reflect_image
+/testcase/utc_extend_reflect_similar_image
+/testcase/utc_extend_repeat_image
+/testcase/utc_extend_repeat_similar_image
+/testcase/utc_fallback_image
+#/testcase/utc_fallback_resolution_image
+/testcase/utc_fill_alpha_image
+/testcase/utc_fill_alpha_pattern_image
+/testcase/utc_fill_and_stroke_alpha_add_image
+/testcase/utc_fill_and_stroke_alpha_image
+/testcase/utc_fill_and_stroke_image
+/testcase/utc_fill_degenerate_sort_order_image
+/testcase/utc_fill_disjoint_image
+/testcase/utc_fill_empty_image
+/testcase/utc_fill_image_image
+/testcase/utc_fill_missed_stop_image
+/testcase/utc_fill_rule_image
+/testcase/utc_filter_bilinear_extents_image
+/testcase/utc_filter_nearest_offset_image
+/testcase/utc_filter_nearest_transformed_image
+/testcase/utc_finer_grained_fallbacks_image
+/testcase/utc_font_face_get_type_image
+#/testcase/utc_font_matrix_translation_image
+/testcase/utc_font_options_image
+/testcase/utc_ft_font_create_for_ft_face_image
+#/testcase/utc_ft_show_glyphs_positioning_image
+#/testcase/utc_ft_show_glyphs_table_image
+#/testcase/utc_ft_text_antialias_none_image
+#/testcase/utc_ft_text_vertical_layout_type1_image
+#/testcase/utc_ft_text_vertical_layout_type3_image
+/testcase/utc_get_and_set_image
+/testcase/utc_get_clip_image
+/testcase/utc_get_group_target_image
+#/testcase/utc_get_path_extents_image
+#/testcase/utc_get_xrender_format_image
+#/testcase/utc_gl_surface_source_image
+#/testcase/utc_glyph_cache_pressure_image
+/testcase/utc_gradient_alpha_image
+/testcase/utc_gradient_constant_alpha_image
+/testcase/utc_gradient_zero_stops_image
+/testcase/utc_gradient_zero_stops_mask_image
+/testcase/utc_group_clip_image
+/testcase/utc_group_paint_image
+/testcase/utc_group_state_image
+/testcase/utc_group_unaligned_image
+#/testcase/utc_half_coverage_rectangles_image
+#/testcase/utc_half_coverage_triangles_image
+#/testcase/utc_halo_image
+#/testcase/utc_halo_transform_image
+/testcase/utc_hatchings_image
+/testcase/utc_horizontal_clip_image
+/testcase/utc_huge_linear_image
+/testcase/utc_huge_radial_image
+/testcase/utc_image_bug_710072_aligned_image
+/testcase/utc_image_bug_710072_unaligned_image
+/testcase/utc_image_surface_source_image
+/testcase/utc_implicit_close_image
+#/testcase/utc_in_fill_empty_trapezoid_image
+/testcase/utc_in_fill_trapezoid_image
+/testcase/utc_infinite_join_image
+/testcase/utc_invalid_matrix_image
+#/testcase/utc_inverse_text_image
+#/testcase/utc_inverted_clip_image
+/testcase/utc_joins_image
+/testcase/utc_joins_loop_image
+/testcase/utc_joins_retrace_image
+/testcase/utc_joins_star_image
+/testcase/utc_large_clip_image
+/testcase/utc_large_font_image
+/testcase/utc_large_source_image
+/testcase/utc_large_source_roi_image
+/testcase/utc_large_twin_antialias_mixed_image
+/testcase/utc_leaky_dash_image
+/testcase/utc_leaky_dashed_rectangle_image
+/testcase/utc_leaky_dashed_stroke_image
+/testcase/utc_leaky_polygon_image
+/testcase/utc_linear_gradient_image
+/testcase/utc_linear_gradient_extend_image
+/testcase/utc_linear_gradient_large_image
+/testcase/utc_linear_gradient_one_stop_image
+/testcase/utc_linear_gradient_reflect_image
+/testcase/utc_linear_gradient_subset_image
+#/testcase/utc_linear_step_function_image
+/testcase/utc_linear_uniform_image
+/testcase/utc_line_width_image
+/testcase/utc_a1_line_width_image
+/testcase/utc_line_width_large_overlap_image
+/testcase/utc_line_width_large_overlap_offset_image
+/testcase/utc_line_width_large_overlap_rotated_image
+/testcase/utc_line_width_large_overlap_flipped_image
+/testcase/utc_line_width_large_overlap_flopped_image
+/testcase/utc_line_width_large_overlap_dashed_image
+/testcase/utc_line_width_overlap_image
+/testcase/utc_line_width_overlap_offset_image
+/testcase/utc_line_width_overlap_rotated_image
+/testcase/utc_line_width_overlap_flipped_image
+/testcase/utc_line_width_overlap_flopped_image
+/testcase/utc_line_width_overlap_dashed_image
+/testcase/utc_line_width_scale_image
+/testcase/utc_line_width_tolerance_image
+/testcase/utc_line_width_zero_image
+/testcase/utc_long_dashed_lines_image
+#/testcase/utc_long_lines_image
+/testcase/utc_map_all_to_image_image
+/testcase/utc_map_bit_to_image_image
+/testcase/utc_map_to_image_fill_image
+/testcase/utc_mask_alpha_image
+/testcase/utc_mask_image
+/testcase/utc_mask_ctm_image
+#/testcase/utc_mask_glyphs_image
+/testcase/utc_mask_surface_ctm_image
+/testcase/utc_mask_transformed_image_image
+/testcase/utc_mask_transformed_similar_image
+/testcase/utc_mesh_pattern_accuracy_image
+/testcase/utc_mesh_pattern_image
+/testcase/utc_mesh_pattern_conical_image
+/testcase/utc_mesh_pattern_control_points_image
+/testcase/utc_mesh_pattern_fold_image
+/testcase/utc_mesh_pattern_overlap_image
+/testcase/utc_mesh_pattern_transformed_image
+/testcase/utc_mime_data_image
+/testcase/utc_mime_surface_api_image
+#/testcase/utc_mime_surface_image
+/testcase/utc_miter_precision_image
+/testcase/utc_move_to_show_surface_image
+#/testcase/utc_multi_page_image
+/testcase/utc_negative_stride_image_image
+/testcase/utc_new_sub_path_image
+/testcase/utc_nil_surface_image
+/testcase/utc_operator_alpha_alpha_image
+/testcase/utc_operator_alpha_image
+/testcase/utc_operator_image
+#/testcase/utc_operator_clear_image
+#/testcase/utc_operator_source_image
+/testcase/utc_over_above_source_image
+/testcase/utc_over_around_source_image
+/testcase/utc_over_below_source_image
+/testcase/utc_over_between_source_image
+/testcase/utc_overlapping_boxes_image
+/testcase/utc_overlapping_dash_caps_image
+/testcase/utc_overlapping_glyphs_image
+/testcase/utc_paint_image
+/testcase/utc_paint_clip_fill_mono_image
+/testcase/utc_paint_clip_fill_aa_image
+/testcase/utc_paint_repeat_image
+/testcase/utc_paint_source_alpha_image
+/testcase/utc_paint_with_alpha_image
+/testcase/utc_paint_with_alpha_solid_clip_image
+/testcase/utc_paint_with_alpha_clip_image
+/testcase/utc_paint_with_alpha_clip_mask_image
+/testcase/utc_partial_clip_text_top_image
+/testcase/utc_partial_clip_text_bottom_image
+/testcase/utc_partial_clip_text_left_image
+/testcase/utc_partial_clip_text_right_image
+#/testcase/utc_partial_coverage_rectangles_image
+#/testcase/utc_partial_coverage_intersecting_quads_image
+#/testcase/utc_partial_coverage_intersecting_triangles_image
+#/testcase/utc_partial_coverage_triangles_image
+#/testcase/utc_partial_coverage_overlap_three_quarter_triangles_image
+#/testcase/utc_partial_coverage_overlap_half_triangles_eo_image
+#/testcase/utc_partial_coverage_overlap_half_triangles_image
+#/testcase/utc_partial_coverage_half_triangles_image
+/testcase/utc_partial_coverage_reference_image
+/testcase/utc_partial_coverage_three_quarter_reference_image
+/testcase/utc_partial_coverage_half_reference_image
+/testcase/utc_pass_through_image
+/testcase/utc_path_append_image
+#/testcase/utc_path_precision_image
+/testcase/utc_path_stroke_twice_image
+/testcase/utc_pattern_getters_image
+/testcase/utc_pattern_get_type_image
+#/testcase/utc_pdf_features_image
+/testcase/utc_pdf_isolated_group_image
+#/testcase/utc_pdf_mime_data_image
+/testcase/utc_pdf_surface_source_image
+/testcase/utc_pixman_rotate_image
+/testcase/utc_png_image
+#/testcase/utc_ps_eps_image
+#/testcase/utc_ps_features_image
+/testcase/utc_ps_surface_source_image
+/testcase/utc_pthread_same_source_image
+#/testcase/utc_pthread_show_text_image
+/testcase/utc_pthread_similar_image
+/testcase/utc_push_group_image
+/testcase/utc_push_group_color_image
+/testcase/utc_push_group_path_offset_image
+#/testcase/utc_quartz_surface_source_image
+/testcase/utc_radial_gradient_image
+/testcase/utc_radial_gradient_mask_image
+/testcase/utc_radial_gradient_source_image
+#/testcase/utc_radial_gradient_mask_source_image
+/testcase/utc_radial_gradient_one_stop_image
+/testcase/utc_radial_gradient_extend_image
+#/testcase/utc_radial_outer_focus_image
+/testcase/utc_random_clip_image
+/testcase/utc_random_intersections_curves_eo_image
+/testcase/utc_random_intersections_curves_nz_image
+/testcase/utc_random_intersections_eo_image
+/testcase/utc_random_intersections_nonzero_image
+/testcase/utc_record_paint_image
+/testcase/utc_record_paint_alpha_image
+/testcase/utc_record_paint_alpha_solid_clip_image
+/testcase/utc_record_paint_alpha_clip_image
+#/testcase/utc_record_paint_alpha_clip_mask_image
+#/testcase/utc_record_fill_alpha_image
+#/testcase/utc_record_select_font_face_image
+/testcase/utc_record_self_intersecting_image
+#/testcase/utc_record_text_transform_image
+#/testcase/utc_record1414x_fill_alpha_image
+/testcase/utc_record1414x_paint_image
+/testcase/utc_record1414x_paint_alpha_image
+#/testcase/utc_record1414x_paint_alpha_clip_image
+#/testcase/utc_record1414x_paint_alpha_clip_mask_image
+/testcase/utc_record1414x_paint_alpha_solid_clip_image
+#/testcase/utc_record1414x_select_font_face_image
+#/testcase/utc_record1414x_self_intersecting_image
+#/testcase/utc_record1414x_text_transform_image
+#/testcase/utc_record2x_fill_alpha_image
+/testcase/utc_record2x_paint_image
+/testcase/utc_record2x_paint_alpha_image
+/testcase/utc_record2x_paint_alpha_clip_image
+#/testcase/utc_record2x_paint_alpha_clip_mask_image
+/testcase/utc_record2x_paint_alpha_solid_clip_image
+#/testcase/utc_record2x_select_font_face_image
+/testcase/utc_record2x_self_intersecting_image
+#/testcase/utc_record2x_text_transform_image
+#/testcase/utc_record90_fill_alpha_image
+/testcase/utc_record90_paint_image
+/testcase/utc_record90_paint_alpha_image
+#/testcase/utc_record90_paint_alpha_clip_image
+#/testcase/utc_record90_paint_alpha_clip_mask_image
+/testcase/utc_record90_paint_alpha_solid_clip_image
+#/testcase/utc_record90_select_font_face_image
+#/testcase/utc_record90_self_intersecting_image
+#/testcase/utc_record90_text_transform_image
+/testcase/utc_raster_source_image
+/testcase/utc_record_extend_none_image
+/testcase/utc_record_extend_pad_image
+/testcase/utc_record_extend_repeat_image
+/testcase/utc_record_extend_reflect_image
+/testcase/utc_record_extend_none_similar_image
+/testcase/utc_record_extend_pad_similar_image
+/testcase/utc_record_extend_repeat_similar_image
+/testcase/utc_record_extend_reflect_similar_image
+/testcase/utc_recording_surface_extend_none_image
+/testcase/utc_recording_surface_extend_repeat_image
+/testcase/utc_recording_surface_extend_reflect_image
+/testcase/utc_recording_surface_extend_pad_image
+/testcase/utc_recording_surface_over_image
+/testcase/utc_recording_surface_source_image
+/testcase/utc_record_mesh_image
+/testcase/utc_rectangle_rounding_error_image
+/testcase/utc_rectilinear_dash_image
+/testcase/utc_rectilinear_dash_scale_image
+/testcase/utc_rectilinear_dash_scale_unaligned_image
+/testcase/utc_rectilinear_fill_image
+/testcase/utc_rectilinear_grid_image
+/testcase/utc_a1_rectilinear_grid_image
+/testcase/utc_rectilinear_miter_limit_image
+/testcase/utc_rectilinear_stroke_image
+/testcase/utc_reflected_stroke_image
+/testcase/utc_rel_path_image
+/testcase/utc_rgb24_ignore_alpha_image
+/testcase/utc_rotated_clip_image
+/testcase/utc_rotate_image_surface_paint_image
+/testcase/utc_clip_rotate_image_surface_paint_image
+/testcase/utc_rotate_clip_image_surface_paint_image
+/testcase/utc_rounded_rectangle_fill_image
+/testcase/utc_rounded_rectangle_stroke_image
+/testcase/utc_scaled_font_zero_matrix_image
+/testcase/utc_scale_down_source_surface_paint_image
+/testcase/utc_scale_offset_image_image
+/testcase/utc_scale_offset_similar_image
+/testcase/utc_scale_source_surface_paint_image
+#/testcase/utc_select_font_face_image
+/testcase/utc_select_font_no_show_text_image
+/testcase/utc_self_copy_image
+#/testcase/utc_self_copy_overlap_image
+/testcase/utc_self_intersecting_image
+/testcase/utc_set_source_image
+/testcase/utc_shape_general_convex_image
+/testcase/utc_shape_sierpinski_image
+/testcase/utc_show_glyphs_advance_image
+/testcase/utc_show_glyphs_many_image
+#/testcase/utc_show_text_current_point_image
+/testcase/utc_skew_extreme_image
+/testcase/utc_smask_image
+/testcase/utc_smask_fill_image
+/testcase/utc_smask_image_mask_image
+/testcase/utc_smask_mask_image
+/testcase/utc_smask_paint_image
+/testcase/utc_smask_stroke_image
+#/testcase/utc_smask_text_image
+/testcase/utc_solid_pattern_cache_stress_image
+/testcase/utc_source_clip_image
+/testcase/utc_source_clip_scale_image
+/testcase/utc_source_surface_scale_paint_image
+/testcase/utc_spline_decomposition_image
+/testcase/utc_stride_12_image_image
+/testcase/utc_stroke_ctm_caps_image
+/testcase/utc_stroke_image_image
+/testcase/utc_stroke_open_box_image
+/testcase/utc_stroke_pattern_image
+/testcase/utc_subsurface_image
+/testcase/utc_subsurface_image_repeat_image
+/testcase/utc_subsurface_modify_child_image
+/testcase/utc_subsurface_modify_parent_image
+/testcase/utc_subsurface_outside_target_image
+/testcase/utc_subsurface_pad_image
+/testcase/utc_subsurface_reflect_image
+/testcase/utc_subsurface_repeat_image
+/testcase/utc_subsurface_scale_image
+/testcase/utc_subsurface_similar_repeat_image
+/testcase/utc_surface_finish_twice_image
+/testcase/utc_surface_pattern_big_scale_down_image
+/testcase/utc_surface_pattern_image
+/testcase/utc_surface_pattern_operator_image
+/testcase/utc_surface_pattern_scale_down_image
+/testcase/utc_surface_pattern_scale_down_extend_repeat_image
+/testcase/utc_surface_pattern_scale_down_extend_none_image
+/testcase/utc_surface_pattern_scale_down_extend_reflect_image
+/testcase/utc_surface_pattern_scale_down_extend_pad_image
+/testcase/utc_surface_pattern_scale_up_image
+#/testcase/utc_svg_clip_image
+#/testcase/utc_svg_surface_image
+/testcase/utc_svg_surface_source_image
+#/testcase/utc_text_antialias_gray_image
+#/testcase/utc_text_antialias_none_image
+#/testcase/utc_text_antialias_subpixel_image
+#/testcase/utc_text_antialias_subpixel_bgr_image
+#/testcase/utc_text_antialias_subpixel_rgb_image
+#/testcase/utc_text_antialias_subpixel_vbgr_image
+#/testcase/utc_text_antialias_subpixel_vrgb_image
+/testcase/utc_text_cache_crash_image
+/testcase/utc_text_glyph_range_image
+#/testcase/utc_text_pattern_image
+#/testcase/utc_text_rotate_image
+#/testcase/utc_text_transform_image
+/testcase/utc_text_zero_len_image
+/testcase/utc_tiger_image
+#/testcase/utc_tighten_bounds_image
+/testcase/utc_a1_tiger_image
+/testcase/utc_toy_font_face_image
+/testcase/utc_transforms_image
+/testcase/utc_translate_show_surface_image
+#/testcase/utc_trap_clip_image
+/testcase/utc_twin_antialias_gray_image
+/testcase/utc_twin_antialias_mixed_image
+/testcase/utc_twin_antialias_none_image
+/testcase/utc_twin_antialias_subpixel_image
+/testcase/utc_twin_image
+/testcase/utc_unaligned_box_image
+/testcase/utc_unantialiased_shapes_image
+#/testcase/utc_unbounded_operator_image
+/testcase/utc_unclosed_strokes_image
+/testcase/utc_user_data_image
+/testcase/utc_user_font_image
+/testcase/utc_user_font_mask_image
+#/testcase/utc_user_font_proxy_image
+#/testcase/utc_user_font_rescale_image
+/testcase/utc_white_in_noop_image
+/testcase/utc_world_map_image
+/testcase/utc_world_map_stroke_image
+/testcase/utc_world_map_fill_image
+/testcase/utc_xcb_huge_image_shm_image
+/testcase/utc_xcb_snapshot_assert_image
+/testcase/utc_xcb_stress_cache_image
+#/testcase/utc_xcb_surface_source_image
+/testcase/utc_xcomposite_projection_image
+/testcase/utc_xlib_expose_event_image
+#/testcase/utc_xlib_surface_image
+#/testcase/utc_xlib_surface_source_image
+/testcase/utc_zero_alpha_image
+/testcase/utc_zero_mask_image
+/testcase/utc_arc_direction_image
+/testcase/utc_a1_bug_gl
+/testcase/utc_a1_clip_paint_gl
+/testcase/utc_a1_clip_fill_gl
+/testcase/utc_a1_clip_fill_equal_gl
+/testcase/utc_a1_clip_stroke_gl
+/testcase/utc_a1_fill_gl
+/testcase/utc_a1_image_sample_gl
+/testcase/utc_a1_mask_gl
+/testcase/utc_a1_mask_sample_gl
+/testcase/utc_a1_rasterisation_rectangles_gl
+/testcase/utc_a1_rasterisation_triangles_gl
+/testcase/utc_a1_sample_gl
+/testcase/utc_a1_traps_sample_gl
+/testcase/utc_a8_clear_gl
+/testcase/utc_a8_mask_gl
+#/testcase/utc_aliasing_gl
+/testcase/utc_alpha_similar_gl
+/testcase/utc_api_special_cases_gl
+/testcase/utc_arc_infinite_loop_gl
+/testcase/utc_arc_looping_dash_gl
+/testcase/utc_big_empty_box_gl
+/testcase/utc_big_empty_triangle_gl
+#/testcase/utc_big_line_gl
+/testcase/utc_big_little_box_gl
+/testcase/utc_big_little_triangle_gl
+/testcase/utc_big_trap_gl
+/testcase/utc_bilevel_image_gl
+/testcase/utc_bitmap_font_gl
+/testcase/utc_bug_40410_gl
+/testcase/utc_bug_bo_rectangular_gl
+/testcase/utc_bug_bo_ricotz_gl
+/testcase/utc_bug_extents_gl
+/testcase/utc_bug_seams_gl
+/testcase/utc_bug_source_cu_gl
+/testcase/utc_caps_gl
+/testcase/utc_caps_joins_alpha_gl
+/testcase/utc_caps_joins_gl
+/testcase/utc_caps_joins_curve_gl
+/testcase/utc_caps_sub_paths_gl
+/testcase/utc_caps_tails_curve_gl
+/testcase/utc_checkerboard_gl
+/testcase/utc_clear_gl
+/testcase/utc_clear_source_gl
+/testcase/utc_clip_all_gl
+/testcase/utc_clip_complex_shape_eo_mono_gl
+/testcase/utc_clip_complex_shape_eo_aa_gl
+/testcase/utc_clip_contexts_gl
+/testcase/utc_clip_device_offset_gl
+/testcase/utc_clip_disjoint_gl
+#/testcase/utc_clip_disjoint_hatching_gl
+/testcase/utc_clip_double_free_gl
+/testcase/utc_clip_stroke_unbounded_gl
+/testcase/utc_clip_fill_nz_unbounded_gl
+/testcase/utc_clip_fill_eo_unbounded_gl
+/testcase/utc_clip_empty_gl
+/testcase/utc_clip_empty_group_gl
+/testcase/utc_clip_empty_save_gl
+#/testcase/utc_clip_fill_gl
+/testcase/utc_clip_fill_no_op_gl
+/testcase/utc_clip_fill_rule_gl
+#/testcase/utc_a1_clip_fill_rule_gl
+/testcase/utc_clip_fill_rule_pixel_aligned_gl
+/testcase/utc_clip_group_shapes_aligned_rectangles_gl
+/testcase/utc_clip_group_shapes_unaligned_rectangles_gl
+/testcase/utc_clip_group_shapes_circles_gl
+/testcase/utc_clip_image_gl
+/testcase/utc_clip_intersect_gl
+/testcase/utc_clip_mixed_antialias_gl
+/testcase/utc_clip_nesting_gl
+#/testcase/utc_clip_operator_gl
+#/testcase/utc_clipped_group_gl
+/testcase/utc_clipped_surface_gl
+#/testcase/utc_clipped_trapezoids_gl
+/testcase/utc_clip_polygons_gl
+#/testcase/utc_clip_push_group_gl
+/testcase/utc_clip_rectilinear_gl
+/testcase/utc_clip_shape_gl
+#/testcase/utc_clip_stroke_gl
+/testcase/utc_clip_stroke_no_op_gl
+#/testcase/utc_clip_text_gl
+/testcase/utc_clip_twice_gl
+/testcase/utc_clip_twice_rectangle_gl
+/testcase/utc_clip_unbounded_gl
+/testcase/utc_clip_zero_gl
+/testcase/utc_close_path_gl
+/testcase/utc_close_path_current_point_gl
+/testcase/utc_composite_integer_translate_over_gl
+/testcase/utc_composite_integer_translate_over_repeat_gl
+/testcase/utc_composite_integer_translate_source_gl
+/testcase/utc_copy_disjoint_gl
+/testcase/utc_copy_path_gl
+#/testcase/utc_coverage_rectangles_gl
+#/testcase/utc_coverage_intersecting_quads_gl
+#/testcase/utc_coverage_intersecting_triangles_gl
+#/testcase/utc_coverage_row_triangles_gl
+#/testcase/utc_coverage_column_triangles_gl
+#/testcase/utc_coverage_triangles_gl
+#/testcase/utc_create_for_stream_gl
+#/testcase/utc_create_from_png_gl
+/testcase/utc_create_from_png_stream_gl
+#/testcase/utc_culled_glyphs_gl
+/testcase/utc_curve_to_as_line_to_gl
+/testcase/utc_dash_caps_joins_gl
+/testcase/utc_dash_curve_gl
+/testcase/utc_dash_infinite_loop_gl
+/testcase/utc_dash_no_dash_gl
+/testcase/utc_dash_offset_gl
+/testcase/utc_dash_offset_negative_gl
+/testcase/utc_dash_scale_gl
+/testcase/utc_dash_state_gl
+/testcase/utc_dash_zero_length_gl
+#/testcase/utc_degenerate_arc_gl
+/testcase/utc_degenerate_arcs_gl
+/testcase/utc_degenerate_curve_to_gl
+/testcase/utc_degenerate_dash_gl
+/testcase/utc_degenerate_linear_gradient_gl
+/testcase/utc_degenerate_path_gl
+/testcase/utc_degenerate_pen_gl
+/testcase/utc_degenerate_radial_gradient_gl
+/testcase/utc_degenerate_rel_curve_to_gl
+/testcase/utc_degenerate_solid_dash_gl
+/testcase/utc_device_offset_gl
+/testcase/utc_device_offset_fractional_gl
+/testcase/utc_device_offset_positive_gl
+/testcase/utc_device_offset_scale_gl
+/testcase/utc_drunkard_tails_gl
+/testcase/utc_error_setters_gl
+/testcase/utc_extended_blend_gl
+/testcase/utc_extended_blend_alpha_gl
+/testcase/utc_extended_blend_mask_gl
+/testcase/utc_extended_blend_alpha_mask_gl
+/testcase/utc_extended_blend_solid_gl
+/testcase/utc_extended_blend_solid_alpha_gl
+/testcase/utc_extend_pad_border_gl
+/testcase/utc_extend_pad_gl
+/testcase/utc_extend_pad_similar_gl
+/testcase/utc_extend_reflect_gl
+/testcase/utc_extend_reflect_similar_gl
+/testcase/utc_extend_repeat_gl
+/testcase/utc_extend_repeat_similar_gl
+/testcase/utc_fallback_gl
+#/testcase/utc_fallback_resolution_gl
+/testcase/utc_fill_alpha_gl
+/testcase/utc_fill_alpha_pattern_gl
+#/testcase/utc_fill_and_stroke_alpha_add_gl
+#/testcase/utc_fill_and_stroke_alpha_gl
+#/testcase/utc_fill_and_stroke_gl
+/testcase/utc_fill_degenerate_sort_order_gl
+/testcase/utc_fill_disjoint_gl
+/testcase/utc_fill_empty_gl
+/testcase/utc_fill_image_gl
+/testcase/utc_fill_missed_stop_gl
+/testcase/utc_fill_rule_gl
+/testcase/utc_filter_bilinear_extents_gl
+/testcase/utc_filter_nearest_offset_gl
+/testcase/utc_filter_nearest_transformed_gl
+/testcase/utc_finer_grained_fallbacks_gl
+/testcase/utc_font_face_get_type_gl
+#/testcase/utc_font_matrix_translation_gl
+/testcase/utc_font_options_gl
+/testcase/utc_ft_font_create_for_ft_face_gl
+#/testcase/utc_ft_show_glyphs_positioning_gl
+#/testcase/utc_ft_show_glyphs_table_gl
+#/testcase/utc_ft_text_antialias_none_gl
+#/testcase/utc_ft_text_vertical_layout_type1_gl
+#/testcase/utc_ft_text_vertical_layout_type3_gl
+/testcase/utc_get_and_set_gl
+/testcase/utc_get_clip_gl
+/testcase/utc_get_group_target_gl
+#/testcase/utc_get_path_extents_gl
+#/testcase/utc_get_xrender_format_gl
+#/testcase/utc_gl_surface_source_gl
+#/testcase/utc_glyph_cache_pressure_gl
+/testcase/utc_gradient_alpha_gl
+/testcase/utc_gradient_constant_alpha_gl
+/testcase/utc_gradient_zero_stops_gl
+/testcase/utc_gradient_zero_stops_mask_gl
+/testcase/utc_group_clip_gl
+/testcase/utc_group_paint_gl
+/testcase/utc_group_state_gl
+#/testcase/utc_group_unaligned_gl
+#/testcase/utc_half_coverage_rectangles_gl
+#/testcase/utc_half_coverage_triangles_gl
+#/testcase/utc_halo_gl
+#/testcase/utc_halo_transform_gl
+#/testcase/utc_hatchings_gl
+/testcase/utc_horizontal_clip_gl
+/testcase/utc_huge_linear_gl
+/testcase/utc_huge_radial_gl
+/testcase/utc_image_bug_710072_aligned_gl
+/testcase/utc_image_bug_710072_unaligned_gl
+/testcase/utc_image_surface_source_gl
+/testcase/utc_implicit_close_gl
+/testcase/utc_in_fill_empty_trapezoid_gl
+/testcase/utc_in_fill_trapezoid_gl
+/testcase/utc_infinite_join_gl
+/testcase/utc_invalid_matrix_gl
+#/testcase/utc_inverse_text_gl
+/testcase/utc_inverted_clip_gl
+/testcase/utc_joins_gl
+/testcase/utc_joins_loop_gl
+/testcase/utc_joins_retrace_gl
+/testcase/utc_joins_star_gl
+/testcase/utc_large_clip_gl
+/testcase/utc_large_font_gl
+/testcase/utc_large_source_gl
+/testcase/utc_large_source_roi_gl
+#/testcase/utc_large_twin_antialias_mixed_gl
+/testcase/utc_leaky_dash_gl
+/testcase/utc_leaky_dashed_rectangle_gl
+/testcase/utc_leaky_dashed_stroke_gl
+/testcase/utc_leaky_polygon_gl
+/testcase/utc_linear_gradient_gl
+/testcase/utc_linear_gradient_extend_gl
+#/testcase/utc_linear_gradient_large_gl
+/testcase/utc_linear_gradient_one_stop_gl
+/testcase/utc_linear_gradient_reflect_gl
+/testcase/utc_linear_gradient_subset_gl
+/testcase/utc_linear_step_function_gl
+/testcase/utc_linear_uniform_gl
+/testcase/utc_line_width_gl
+/testcase/utc_a1_line_width_gl
+/testcase/utc_line_width_large_overlap_gl
+/testcase/utc_line_width_large_overlap_offset_gl
+/testcase/utc_line_width_large_overlap_rotated_gl
+/testcase/utc_line_width_large_overlap_flipped_gl
+/testcase/utc_line_width_large_overlap_flopped_gl
+#/testcase/utc_line_width_large_overlap_dashed_gl
+/testcase/utc_line_width_overlap_gl
+/testcase/utc_line_width_overlap_offset_gl
+/testcase/utc_line_width_overlap_rotated_gl
+/testcase/utc_line_width_overlap_flipped_gl
+/testcase/utc_line_width_overlap_flopped_gl
+#/testcase/utc_line_width_overlap_dashed_gl
+/testcase/utc_line_width_scale_gl
+/testcase/utc_line_width_tolerance_gl
+/testcase/utc_line_width_zero_gl
+/testcase/utc_long_dashed_lines_gl
+#/testcase/utc_long_lines_gl
+#/testcase/utc_map_all_to_image_gl
+#/testcase/utc_map_bit_to_image_gl
+/testcase/utc_map_to_image_fill_gl
+/testcase/utc_mask_alpha_gl
+#/testcase/utc_mask_gl
+/testcase/utc_mask_ctm_gl
+#/testcase/utc_mask_glyphs_gl
+/testcase/utc_mask_surface_ctm_gl
+/testcase/utc_mask_transformed_image_gl
+/testcase/utc_mask_transformed_similar_gl
+/testcase/utc_mesh_pattern_accuracy_gl
+/testcase/utc_mesh_pattern_gl
+/testcase/utc_mesh_pattern_conical_gl
+/testcase/utc_mesh_pattern_control_points_gl
+/testcase/utc_mesh_pattern_fold_gl
+/testcase/utc_mesh_pattern_overlap_gl
+/testcase/utc_mesh_pattern_transformed_gl
+/testcase/utc_mime_data_gl
+/testcase/utc_mime_surface_api_gl
+#/testcase/utc_mime_surface_gl
+/testcase/utc_miter_precision_gl
+/testcase/utc_move_to_show_surface_gl
+#/testcase/utc_multi_page_gl
+/testcase/utc_negative_stride_image_gl
+/testcase/utc_new_sub_path_gl
+/testcase/utc_nil_surface_gl
+/testcase/utc_operator_alpha_alpha_gl
+/testcase/utc_operator_alpha_gl
+/testcase/utc_operator_gl
+/testcase/utc_operator_clear_gl
+#/testcase/utc_operator_source_gl
+/testcase/utc_over_above_source_gl
+/testcase/utc_over_around_source_gl
+/testcase/utc_over_below_source_gl
+/testcase/utc_over_between_source_gl
+/testcase/utc_overlapping_boxes_gl
+#/testcase/utc_overlapping_dash_caps_gl
+/testcase/utc_overlapping_glyphs_gl
+/testcase/utc_paint_gl
+/testcase/utc_paint_clip_fill_mono_gl
+/testcase/utc_paint_clip_fill_aa_gl
+/testcase/utc_paint_repeat_gl
+/testcase/utc_paint_source_alpha_gl
+/testcase/utc_paint_with_alpha_gl
+/testcase/utc_paint_with_alpha_solid_clip_gl
+/testcase/utc_paint_with_alpha_clip_gl
+/testcase/utc_paint_with_alpha_clip_mask_gl
+/testcase/utc_partial_clip_text_top_gl
+/testcase/utc_partial_clip_text_bottom_gl
+/testcase/utc_partial_clip_text_left_gl
+/testcase/utc_partial_clip_text_right_gl
+#/testcase/utc_partial_coverage_rectangles_gl
+#/testcase/utc_partial_coverage_intersecting_quads_gl
+#/testcase/utc_partial_coverage_intersecting_triangles_gl
+#/testcase/utc_partial_coverage_triangles_gl
+#/testcase/utc_partial_coverage_overlap_three_quarter_triangles_gl
+#/testcase/utc_partial_coverage_overlap_half_triangles_eo_gl
+#/testcase/utc_partial_coverage_overlap_half_triangles_gl
+#/testcase/utc_partial_coverage_half_triangles_gl
+/testcase/utc_partial_coverage_reference_gl
+/testcase/utc_partial_coverage_three_quarter_reference_gl
+/testcase/utc_partial_coverage_half_reference_gl
+/testcase/utc_pass_through_gl
+/testcase/utc_path_append_gl
+/testcase/utc_path_precision_gl
+/testcase/utc_path_stroke_twice_gl
+/testcase/utc_pattern_getters_gl
+/testcase/utc_pattern_get_type_gl
+#/testcase/utc_pdf_features_gl
+/testcase/utc_pdf_isolated_group_gl
+#/testcase/utc_pdf_mime_data_gl
+#/testcase/utc_pdf_surface_source_gl
+/testcase/utc_pixman_rotate_gl
+#/testcase/utc_png_gl
+#/testcase/utc_ps_eps_gl
+#/testcase/utc_ps_features_gl
+#/testcase/utc_ps_surface_source_gl
+/testcase/utc_pthread_same_source_gl
+#/testcase/utc_pthread_show_text_gl
+/testcase/utc_pthread_similar_gl
+/testcase/utc_push_group_gl
+/testcase/utc_push_group_color_gl
+/testcase/utc_push_group_path_offset_gl
+#/testcase/utc_quartz_surface_source_gl
+/testcase/utc_radial_gradient_gl
+/testcase/utc_radial_gradient_mask_gl
+#/testcase/utc_radial_gradient_source_gl
+/testcase/utc_radial_gradient_mask_source_gl
+/testcase/utc_radial_gradient_one_stop_gl
+/testcase/utc_radial_gradient_extend_gl
+#/testcase/utc_radial_outer_focus_gl
+#/testcase/utc_random_clip_gl
+#/testcase/utc_random_intersections_curves_eo_gl
+#/testcase/utc_random_intersections_curves_nz_gl
+#/testcase/utc_random_intersections_eo_gl
+#/testcase/utc_random_intersections_nonzero_gl
+/testcase/utc_record_paint_gl
+/testcase/utc_record_paint_alpha_gl
+/testcase/utc_record_paint_alpha_solid_clip_gl
+/testcase/utc_record_paint_alpha_clip_gl
+/testcase/utc_record_paint_alpha_clip_mask_gl
+/testcase/utc_record_fill_alpha_gl
+#/testcase/utc_record_select_font_face_gl
+/testcase/utc_record_self_intersecting_gl
+#/testcase/utc_record_text_transform_gl
+/testcase/utc_record1414x_fill_alpha_gl
+/testcase/utc_record1414x_paint_gl
+/testcase/utc_record1414x_paint_alpha_gl
+/testcase/utc_record1414x_paint_alpha_clip_gl
+#/testcase/utc_record1414x_paint_alpha_clip_mask_gl
+/testcase/utc_record1414x_paint_alpha_solid_clip_gl
+#/testcase/utc_record1414x_select_font_face_gl
+/testcase/utc_record1414x_self_intersecting_gl
+/testcase/utc_record1414x_text_transform_gl
+/testcase/utc_record2x_fill_alpha_gl
+/testcase/utc_record2x_paint_gl
+/testcase/utc_record2x_paint_alpha_gl
+/testcase/utc_record2x_paint_alpha_clip_gl
+/testcase/utc_record2x_paint_alpha_clip_mask_gl
+/testcase/utc_record2x_paint_alpha_solid_clip_gl
+#/testcase/utc_record2x_select_font_face_gl
+/testcase/utc_record2x_self_intersecting_gl
+/testcase/utc_record2x_text_transform_gl
+/testcase/utc_record90_fill_alpha_gl
+/testcase/utc_record90_paint_gl
+/testcase/utc_record90_paint_alpha_gl
+/testcase/utc_record90_paint_alpha_clip_gl
+#/testcase/utc_record90_paint_alpha_clip_mask_gl
+/testcase/utc_record90_paint_alpha_solid_clip_gl
+#/testcase/utc_record90_select_font_face_gl
+/testcase/utc_record90_self_intersecting_gl
+/testcase/utc_record90_text_transform_gl
+/testcase/utc_raster_source_gl
+/testcase/utc_record_extend_none_gl
+/testcase/utc_record_extend_pad_gl
+/testcase/utc_record_extend_repeat_gl
+/testcase/utc_record_extend_reflect_gl
+/testcase/utc_record_extend_none_similar_gl
+/testcase/utc_record_extend_pad_similar_gl
+/testcase/utc_record_extend_repeat_similar_gl
+/testcase/utc_record_extend_reflect_similar_gl
+/testcase/utc_recording_surface_extend_none_gl
+/testcase/utc_recording_surface_extend_repeat_gl
+/testcase/utc_recording_surface_extend_reflect_gl
+#/testcase/utc_recording_surface_extend_pad_gl
+/testcase/utc_recording_surface_over_gl
+/testcase/utc_recording_surface_source_gl
+/testcase/utc_record_mesh_gl
+/testcase/utc_rectangle_rounding_error_gl
+/testcase/utc_rectilinear_dash_gl
+/testcase/utc_rectilinear_dash_scale_gl
+#/testcase/utc_rectilinear_dash_scale_unaligned_gl
+/testcase/utc_rectilinear_fill_gl
+/testcase/utc_rectilinear_grid_gl
+/testcase/utc_a1_rectilinear_grid_gl
+/testcase/utc_rectilinear_miter_limit_gl
+/testcase/utc_rectilinear_stroke_gl
+/testcase/utc_reflected_stroke_gl
+#/testcase/utc_rel_path_gl
+/testcase/utc_rgb24_ignore_alpha_gl
+/testcase/utc_rotated_clip_gl
+/testcase/utc_rotate_image_surface_paint_gl
+/testcase/utc_clip_rotate_image_surface_paint_gl
+#/testcase/utc_rotate_clip_image_surface_paint_gl
+/testcase/utc_rounded_rectangle_fill_gl
+/testcase/utc_rounded_rectangle_stroke_gl
+/testcase/utc_scaled_font_zero_matrix_gl
+/testcase/utc_scale_down_source_surface_paint_gl
+/testcase/utc_scale_offset_image_gl
+/testcase/utc_scale_offset_similar_gl
+/testcase/utc_scale_source_surface_paint_gl
+#/testcase/utc_select_font_face_gl
+/testcase/utc_select_font_no_show_text_gl
+/testcase/utc_self_copy_gl
+#/testcase/utc_self_copy_overlap_gl
+/testcase/utc_self_intersecting_gl
+/testcase/utc_set_source_gl
+/testcase/utc_shape_general_convex_gl
+/testcase/utc_shape_sierpinski_gl
+/testcase/utc_show_glyphs_advance_gl
+/testcase/utc_show_glyphs_many_gl
+#/testcase/utc_show_text_current_point_gl
+/testcase/utc_skew_extreme_gl
+/testcase/utc_smask_gl
+/testcase/utc_smask_fill_gl
+/testcase/utc_smask_image_mask_gl
+/testcase/utc_smask_mask_gl
+/testcase/utc_smask_paint_gl
+/testcase/utc_smask_stroke_gl
+#/testcase/utc_smask_text_gl
+/testcase/utc_solid_pattern_cache_stress_gl
+/testcase/utc_source_clip_gl
+/testcase/utc_source_clip_scale_gl
+/testcase/utc_source_surface_scale_paint_gl
+/testcase/utc_spline_decomposition_gl
+/testcase/utc_stride_12_image_gl
+/testcase/utc_stroke_ctm_caps_gl
+/testcase/utc_stroke_image_gl
+/testcase/utc_stroke_open_box_gl
+/testcase/utc_stroke_pattern_gl
+/testcase/utc_subsurface_gl
+/testcase/utc_subsurface_image_repeat_gl
+/testcase/utc_subsurface_modify_child_gl
+/testcase/utc_subsurface_modify_parent_gl
+/testcase/utc_subsurface_outside_target_gl
+/testcase/utc_subsurface_pad_gl
+/testcase/utc_subsurface_reflect_gl
+/testcase/utc_subsurface_repeat_gl
+/testcase/utc_subsurface_scale_gl
+/testcase/utc_subsurface_similar_repeat_gl
+/testcase/utc_surface_finish_twice_gl
+/testcase/utc_surface_pattern_big_scale_down_gl
+/testcase/utc_surface_pattern_gl
+/testcase/utc_surface_pattern_operator_gl
+/testcase/utc_surface_pattern_scale_down_gl
+/testcase/utc_surface_pattern_scale_down_extend_repeat_gl
+/testcase/utc_surface_pattern_scale_down_extend_none_gl
+/testcase/utc_surface_pattern_scale_down_extend_reflect_gl
+/testcase/utc_surface_pattern_scale_down_extend_pad_gl
+/testcase/utc_surface_pattern_scale_up_gl
+#/testcase/utc_svg_clip_gl
+#/testcase/utc_svg_surface_gl
+#/testcase/utc_svg_surface_source_gl
+#/testcase/utc_text_antialias_gray_gl
+#/testcase/utc_text_antialias_none_gl
+#/testcase/utc_text_antialias_subpixel_gl
+#/testcase/utc_text_antialias_subpixel_bgr_gl
+#/testcase/utc_text_antialias_subpixel_rgb_gl
+#/testcase/utc_text_antialias_subpixel_vbgr_gl
+#/testcase/utc_text_antialias_subpixel_vrgb_gl
+/testcase/utc_text_cache_crash_gl
+/testcase/utc_text_glyph_range_gl
+#/testcase/utc_text_pattern_gl
+#/testcase/utc_text_rotate_gl
+#/testcase/utc_text_transform_gl
+/testcase/utc_text_zero_len_gl
+/testcase/utc_tiger_gl
+/testcase/utc_a1_tiger_gl
+/testcase/utc_tighten_bounds_gl
+/testcase/utc_toy_font_face_gl
+/testcase/utc_transforms_gl
+/testcase/utc_translate_show_surface_gl
+/testcase/utc_trap_clip_gl
+/testcase/utc_twin_antialias_gray_gl
+#/testcase/utc_twin_antialias_mixed_gl
+/testcase/utc_twin_antialias_none_gl
+#/testcase/utc_twin_antialias_subpixel_gl
+/testcase/utc_twin_gl
+/testcase/utc_unaligned_box_gl
+/testcase/utc_unantialiased_shapes_gl
+/testcase/utc_unbounded_operator_gl
+/testcase/utc_unclosed_strokes_gl
+/testcase/utc_user_data_gl
+/testcase/utc_user_font_gl
+/testcase/utc_user_font_mask_gl
+#/testcase/utc_user_font_proxy_gl
+#/testcase/utc_user_font_rescale_gl
+/testcase/utc_white_in_noop_gl
+/testcase/utc_world_map_gl
+/testcase/utc_world_map_stroke_gl
+/testcase/utc_world_map_fill_gl
+/testcase/utc_xcb_huge_image_shm_gl
+/testcase/utc_xcb_snapshot_assert_gl
+/testcase/utc_xcb_stress_cache_gl
+/testcase/utc_xcb_surface_source_gl
+/testcase/utc_xcomposite_projection_gl
+/testcase/utc_xlib_expose_event_gl
+#/testcase/utc_xlib_surface_gl
+/testcase/utc_xlib_surface_source_gl
+/testcase/utc_zero_alpha_gl
+/testcase/utc_zero_mask_gl
+/testcase/utc_arc_direction_gl
diff --git a/TC/testcase/utc_a1_bug_gl.c b/TC/testcase/utc_a1_bug_gl.c
new file mode 100644 (file)
index 0000000..7056917
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_bug1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_bug1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_bug1(void)
+{
+       char buf[128];
+       int ret;
+       sprintf(buf, "cd %s && ./cairo-test-suite a1-bug", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_bug1");
+                       else
+                               dts_fail("utc_cairo_a1_bug1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_bug_image.c b/TC/testcase/utc_a1_bug_image.c
new file mode 100644 (file)
index 0000000..42b5ae0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_bug1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_bug1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_bug1(void)
+{
+       char buf[128];
+       int ret;
+       sprintf(buf, "cd %s && ./cairo-test-suite a1-bug", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_bug1");
+                       else
+                               dts_fail("utc_cairo_a1_bug1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_fill_equal_gl.c b/TC/testcase/utc_a1_clip_fill_equal_gl.c
new file mode 100644 (file)
index 0000000..abdab0e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_fill_equal1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_fill_equal1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_fill_equal1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-fill-equal", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_fill_equal1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_fill_equal1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_fill_equal_image.c b/TC/testcase/utc_a1_clip_fill_equal_image.c
new file mode 100644 (file)
index 0000000..cb6f5bf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_fill_equal1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_fill_equal1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_fill_equal1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-fill-equal", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_fill_equal1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_fill_equal1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_fill_gl.c b/TC/testcase/utc_a1_clip_fill_gl.c
new file mode 100644 (file)
index 0000000..74eaff9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_fill1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_fill_image.c b/TC/testcase/utc_a1_clip_fill_image.c
new file mode 100644 (file)
index 0000000..14d9cdf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_fill1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_fill_rule_gl.c b/TC/testcase/utc_a1_clip_fill_rule_gl.c
new file mode 100644 (file)
index 0000000..c884e92
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_fill_rule1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_fill_rule1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_fill_rule1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-fill-rule", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_fill_rule1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_fill_rule1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_fill_rule_image.c b/TC/testcase/utc_a1_clip_fill_rule_image.c
new file mode 100644 (file)
index 0000000..6801c8f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_fill_rule1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_fill_rule1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_fill_rule1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-fill-rule", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_fill_rule1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_fill_rule1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_paint_gl.c b/TC/testcase/utc_a1_clip_paint_gl.c
new file mode 100644 (file)
index 0000000..5d77aee
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_paint1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_paint_image.c b/TC/testcase/utc_a1_clip_paint_image.c
new file mode 100644 (file)
index 0000000..c47f5ca
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_paint1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_stroke_gl.c b/TC/testcase/utc_a1_clip_stroke_gl.c
new file mode 100644 (file)
index 0000000..1651ca4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_stroke1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_clip_stroke_image.c b/TC/testcase/utc_a1_clip_stroke_image.c
new file mode 100644 (file)
index 0000000..c2dc2e4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_clip_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_clip_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_clip_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-clip-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_clip_stroke1");
+                       else
+                               dts_fail("utc_cairo_a1_clip_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_fill_gl.c b/TC/testcase/utc_a1_fill_gl.c
new file mode 100644 (file)
index 0000000..373f06f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_fill1");
+                       else
+                               dts_fail("utc_cairo_a1_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_fill_image.c b/TC/testcase/utc_a1_fill_image.c
new file mode 100644 (file)
index 0000000..de60900
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_fill1");
+                       else
+                               dts_fail("utc_cairo_a1_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_image_sample_gl.c b/TC/testcase/utc_a1_image_sample_gl.c
new file mode 100644 (file)
index 0000000..10ee5b1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_image_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_image_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_image_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-image-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_image_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_image_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_image_sample_image.c b/TC/testcase/utc_a1_image_sample_image.c
new file mode 100644 (file)
index 0000000..e22c238
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_image_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_image_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_image_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-image-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_image_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_image_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_line_width_gl.c b/TC/testcase/utc_a1_line_width_gl.c
new file mode 100644 (file)
index 0000000..304b32f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_line_width1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_line_width1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_line_width1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-line-width", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_line_width1");
+                       else
+                               dts_fail("utc_cairo_a1_line_width1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_line_width_image.c b/TC/testcase/utc_a1_line_width_image.c
new file mode 100644 (file)
index 0000000..8de9023
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_line_width1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_line_width1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_line_width1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-line-width", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_line_width1");
+                       else
+                               dts_fail("utc_cairo_a1_line_width1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_mask_gl.c b/TC/testcase/utc_a1_mask_gl.c
new file mode 100644 (file)
index 0000000..7927b71
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_mask1");
+                       else
+                               dts_fail("utc_cairo_a1_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_mask_image.c b/TC/testcase/utc_a1_mask_image.c
new file mode 100644 (file)
index 0000000..3b55f58
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_mask1");
+                       else
+                               dts_fail("utc_cairo_a1_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_mask_sample_gl.c b/TC/testcase/utc_a1_mask_sample_gl.c
new file mode 100644 (file)
index 0000000..17d96f9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_mask_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_mask_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_mask_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-mask-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_mask_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_mask_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_mask_sample_image.c b/TC/testcase/utc_a1_mask_sample_image.c
new file mode 100644 (file)
index 0000000..cb4386a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_mask_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_mask_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_mask_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-mask-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_mask_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_mask_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_rasterisation_rectangles_gl.c b/TC/testcase/utc_a1_rasterisation_rectangles_gl.c
new file mode 100644 (file)
index 0000000..db96e94
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_rasterisation_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_rasterisation_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_rasterisation_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-rasterisation-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_rasterisation_rectangles1");
+                       else
+                               dts_fail("utc_cairo_a1_rasterisation_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_rasterisation_rectangles_image.c b/TC/testcase/utc_a1_rasterisation_rectangles_image.c
new file mode 100644 (file)
index 0000000..b4dc16a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_rasterisation_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_rasterisation_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_rasterisation_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-rasterisation-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_rasterisation_rectangles1");
+                       else
+                               dts_fail("utc_cairo_a1_rasterisation_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_rasterisation_triangles_gl.c b/TC/testcase/utc_a1_rasterisation_triangles_gl.c
new file mode 100644 (file)
index 0000000..cc3dd7a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_rasterisation_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_rasterisation_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_rasterisation_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-rasterisation-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_rasterisation_triangles1");
+                       else
+                               dts_fail("utc_cairo_a1_rasterisation_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_rasterisation_triangles_image.c b/TC/testcase/utc_a1_rasterisation_triangles_image.c
new file mode 100644 (file)
index 0000000..004cbf8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_rasterisation_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_rasterisation_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_rasterisation_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-rasterisation-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_rasterisation_triangles1");
+                       else
+                               dts_fail("utc_cairo_a1_rasterisation_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_rectilinear_grid_gl.c b/TC/testcase/utc_a1_rectilinear_grid_gl.c
new file mode 100644 (file)
index 0000000..3bf52e2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_rectilinear_grid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_rectilinear_grid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_rectilinear_grid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-rectilinear-grid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_rectilinear_grid1");
+                       else
+                               dts_fail("utc_cairo_a1_rectilinear_grid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_rectilinear_grid_image.c b/TC/testcase/utc_a1_rectilinear_grid_image.c
new file mode 100644 (file)
index 0000000..9d18876
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_rectilinear_grid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_rectilinear_grid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_rectilinear_grid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-rectilinear-grid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_rectilinear_grid1");
+                       else
+                               dts_fail("utc_cairo_a1_rectilinear_grid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_sample_gl.c b/TC/testcase/utc_a1_sample_gl.c
new file mode 100644 (file)
index 0000000..99cae72
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_sample_image.c b/TC/testcase/utc_a1_sample_image.c
new file mode 100644 (file)
index 0000000..57c0051
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_tiger_gl.c b/TC/testcase/utc_a1_tiger_gl.c
new file mode 100644 (file)
index 0000000..39627ed
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_tiger1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_tiger1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_tiger1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-tiger", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_tiger1");
+                       else
+                               dts_fail("utc_cairo_a1_tiger1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_tiger_image.c b/TC/testcase/utc_a1_tiger_image.c
new file mode 100644 (file)
index 0000000..f00d096
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_tiger1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_tiger1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_tiger1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-tiger", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_tiger1");
+                       else
+                               dts_fail("utc_cairo_a1_tiger1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_traps_sample_gl.c b/TC/testcase/utc_a1_traps_sample_gl.c
new file mode 100644 (file)
index 0000000..4d451a5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_traps_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_traps_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_traps_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-traps-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_traps_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_traps_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a1_traps_sample_image.c b/TC/testcase/utc_a1_traps_sample_image.c
new file mode 100644 (file)
index 0000000..3f10704
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a1_traps_sample1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a1_traps_sample1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a1_traps_sample1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a1-traps-sample", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a1_traps_sample1");
+                       else
+                               dts_fail("utc_cairo_a1_traps_sample1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a8_clear_gl.c b/TC/testcase/utc_a8_clear_gl.c
new file mode 100644 (file)
index 0000000..7e45230
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a8_clear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a8_clear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a8_clear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a8-clear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a8_clear1");
+                       else
+                               dts_fail("utc_cairo_a8_clear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a8_clear_image.c b/TC/testcase/utc_a8_clear_image.c
new file mode 100644 (file)
index 0000000..738681c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a8_clear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a8_clear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a8_clear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a8-clear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a8_clear1");
+                       else
+                               dts_fail("utc_cairo_a8_clear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a8_mask_gl.c b/TC/testcase/utc_a8_mask_gl.c
new file mode 100644 (file)
index 0000000..7c22e80
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a8_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a8_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a8_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a8-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a8_mask1");
+                       else
+                               dts_fail("utc_cairo_a8_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_a8_mask_image.c b/TC/testcase/utc_a8_mask_image.c
new file mode 100644 (file)
index 0000000..9712190
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_a8_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_a8_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_a8_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite a8-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_a8_mask1");
+                       else
+                               dts_fail("utc_cairo_a8_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_aliasing_gl.c b/TC/testcase/utc_aliasing_gl.c
new file mode 100644 (file)
index 0000000..1d02baf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_aliasing1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_aliasing1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_aliasing1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite aliasing", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_aliasing1");
+                       else
+                               dts_fail("utc_cairo_aliasing1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_aliasing_image.c b/TC/testcase/utc_aliasing_image.c
new file mode 100644 (file)
index 0000000..540c8a8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_aliasing1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_aliasing1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_aliasing1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite aliasing", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_aliasing1");
+                       else
+                               dts_fail("utc_cairo_aliasing1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_alpha_similar_gl.c b/TC/testcase/utc_alpha_similar_gl.c
new file mode 100644 (file)
index 0000000..505b534
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_alpha_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_alpha_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_alpha_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite alpha-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_alpha_similar1");
+                       else
+                               dts_fail("utc_cairo_alpha_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_alpha_similar_image.c b/TC/testcase/utc_alpha_similar_image.c
new file mode 100644 (file)
index 0000000..84751e9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_alpha_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_alpha_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_alpha_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite alpha-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_alpha_similar1");
+                       else
+                               dts_fail("utc_cairo_alpha_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_api_special_cases_gl.c b/TC/testcase/utc_api_special_cases_gl.c
new file mode 100644 (file)
index 0000000..dfce48e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_api_special_cases1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_api_special_cases1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_api_special_cases1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite api-special-cases", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_api_special_cases1");
+                       else
+                               dts_fail("utc_cairo_api_special_cases1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_api_special_cases_image.c b/TC/testcase/utc_api_special_cases_image.c
new file mode 100644 (file)
index 0000000..d2733dd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_api_special_cases1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_api_special_cases1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_api_special_cases1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite api-special-cases", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_api_special_cases1");
+                       else
+                               dts_fail("utc_cairo_api_special_cases1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_arc_direction_gl.c b/TC/testcase/utc_arc_direction_gl.c
new file mode 100644 (file)
index 0000000..fa68589
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_arc_direction1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_arc_direction1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_arc_direction1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite arc-direction", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_arc_direction1");
+                       else
+                               dts_fail("utc_cairo_arc_direction1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_arc_direction_image.c b/TC/testcase/utc_arc_direction_image.c
new file mode 100644 (file)
index 0000000..9e80ab2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_arc_direction1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_arc_direction1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_arc_direction1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite arc-direction", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_arc_direction1");
+                       else
+                               dts_fail("utc_cairo_arc_direction1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_arc_infinite_loop_gl.c b/TC/testcase/utc_arc_infinite_loop_gl.c
new file mode 100644 (file)
index 0000000..1efeb1e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_arc_infinite_loop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_arc_infinite_loop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_arc_infinite_loop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite arc-infinite-loop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_arc_infinite_loop1");
+                       else
+                               dts_fail("utc_cairo_arc_infinite_loop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_arc_infinite_loop_image.c b/TC/testcase/utc_arc_infinite_loop_image.c
new file mode 100644 (file)
index 0000000..83353c3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_arc_infinite_loop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_arc_infinite_loop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_arc_infinite_loop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite arc-infinite-loop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_arc_infinite_loop1");
+                       else
+                               dts_fail("utc_cairo_arc_infinite_loop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_arc_looping_dash_gl.c b/TC/testcase/utc_arc_looping_dash_gl.c
new file mode 100644 (file)
index 0000000..6bc458a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_arc_looping_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_arc_looping_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_arc_looping_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite arc-looping-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_arc_looping_dash1");
+                       else
+                               dts_fail("utc_cairo_arc_looping_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_arc_looping_dash_image.c b/TC/testcase/utc_arc_looping_dash_image.c
new file mode 100644 (file)
index 0000000..eda0dc6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_arc_looping_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_arc_looping_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_arc_looping_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite arc-looping-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_arc_looping_dash1");
+                       else
+                               dts_fail("utc_cairo_arc_looping_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_empty_box_gl.c b/TC/testcase/utc_big_empty_box_gl.c
new file mode 100644 (file)
index 0000000..2cad36e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_empty_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_empty_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_empty_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-empty-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_empty_box1");
+                       else
+                               dts_fail("utc_cairo_big_empty_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_empty_box_image.c b/TC/testcase/utc_big_empty_box_image.c
new file mode 100644 (file)
index 0000000..087e24a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_empty_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_empty_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_empty_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-empty-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_empty_box1");
+                       else
+                               dts_fail("utc_cairo_big_empty_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_empty_triangle_gl.c b/TC/testcase/utc_big_empty_triangle_gl.c
new file mode 100644 (file)
index 0000000..77f8c3f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_empty_triangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_empty_triangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_empty_triangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-empty-triangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_empty_triangle1");
+                       else
+                               dts_fail("utc_cairo_big_empty_triangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_empty_triangle_image.c b/TC/testcase/utc_big_empty_triangle_image.c
new file mode 100644 (file)
index 0000000..993c4d4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_empty_triangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_empty_triangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_empty_triangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-empty-triangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_empty_triangle1");
+                       else
+                               dts_fail("utc_cairo_big_empty_triangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_line_gl.c b/TC/testcase/utc_big_line_gl.c
new file mode 100644 (file)
index 0000000..b35ed29
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_line1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_line1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_line1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-line", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_line1");
+                       else
+                               dts_fail("utc_cairo_big_line1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_line_image.c b/TC/testcase/utc_big_line_image.c
new file mode 100644 (file)
index 0000000..0917466
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_line1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_line1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_line1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-line", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_line1");
+                       else
+                               dts_fail("utc_cairo_big_line1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_little_box_gl.c b/TC/testcase/utc_big_little_box_gl.c
new file mode 100644 (file)
index 0000000..abc235a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_little_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_little_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_little_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-little-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_little_box1");
+                       else
+                               dts_fail("utc_cairo_big_little_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_little_box_image.c b/TC/testcase/utc_big_little_box_image.c
new file mode 100644 (file)
index 0000000..f0c4ad9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_little_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_little_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_little_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-little-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_little_box1");
+                       else
+                               dts_fail("utc_cairo_big_little_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_little_triangle_gl.c b/TC/testcase/utc_big_little_triangle_gl.c
new file mode 100644 (file)
index 0000000..00e6d59
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_little_triangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_little_triangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_little_triangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-little-triangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_little_triangle1");
+                       else
+                               dts_fail("utc_cairo_big_little_triangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_little_triangle_image.c b/TC/testcase/utc_big_little_triangle_image.c
new file mode 100644 (file)
index 0000000..7c58ed8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_little_triangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_little_triangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_little_triangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-little-triangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_little_triangle1");
+                       else
+                               dts_fail("utc_cairo_big_little_triangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_trap_gl.c b/TC/testcase/utc_big_trap_gl.c
new file mode 100644 (file)
index 0000000..77e87cc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_trap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_trap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_trap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-trap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_trap1");
+                       else
+                               dts_fail("utc_cairo_big_trap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_big_trap_image.c b/TC/testcase/utc_big_trap_image.c
new file mode 100644 (file)
index 0000000..f6be38f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_big_trap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_big_trap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_big_trap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite big-trap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_big_trap1");
+                       else
+                               dts_fail("utc_cairo_big_trap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bilevel_image_gl.c b/TC/testcase/utc_bilevel_image_gl.c
new file mode 100644 (file)
index 0000000..9659005
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bilevel_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bilevel_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bilevel_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bilevel-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bilevel_image1");
+                       else
+                               dts_fail("utc_cairo_bilevel_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bilevel_image_image.c b/TC/testcase/utc_bilevel_image_image.c
new file mode 100644 (file)
index 0000000..756d148
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bilevel_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bilevel_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bilevel_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bilevel-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bilevel_image1");
+                       else
+                               dts_fail("utc_cairo_bilevel_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bitmap_font_gl.c b/TC/testcase/utc_bitmap_font_gl.c
new file mode 100644 (file)
index 0000000..78cd9e8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bitmap_font1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bitmap_font1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bitmap_font1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bitmap-font", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bitmap_font1");
+                       else
+                               dts_fail("utc_cairo_bitmap_font1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bitmap_font_image.c b/TC/testcase/utc_bitmap_font_image.c
new file mode 100644 (file)
index 0000000..e775e42
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bitmap_font1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bitmap_font1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bitmap_font1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bitmap-font", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bitmap_font1");
+                       else
+                               dts_fail("utc_cairo_bitmap_font1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_40410_gl.c b/TC/testcase/utc_bug_40410_gl.c
new file mode 100644 (file)
index 0000000..7d6b453
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_404101(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_404101, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_404101(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-40410", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_404101");
+                       else
+                               dts_fail("utc_cairo_bug_404101");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_40410_image.c b/TC/testcase/utc_bug_40410_image.c
new file mode 100644 (file)
index 0000000..6b4d588
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_404101(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_404101, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_404101(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-40410", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_404101");
+                       else
+                               dts_fail("utc_cairo_bug_404101");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_bo_rectangular_gl.c b/TC/testcase/utc_bug_bo_rectangular_gl.c
new file mode 100644 (file)
index 0000000..d450461
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_bo_rectangular1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_bo_rectangular1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_bo_rectangular1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-bo-rectangular", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_bo_rectangular1");
+                       else
+                               dts_fail("utc_cairo_bug_bo_rectangular1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_bo_rectangular_image.c b/TC/testcase/utc_bug_bo_rectangular_image.c
new file mode 100644 (file)
index 0000000..9638090
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_bo_rectangular1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_bo_rectangular1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_bo_rectangular1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-bo-rectangular", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_bo_rectangular1");
+                       else
+                               dts_fail("utc_cairo_bug_bo_rectangular1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_bo_ricotz_gl.c b/TC/testcase/utc_bug_bo_ricotz_gl.c
new file mode 100644 (file)
index 0000000..fa42ed4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_bo_ricotz1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_bo_ricotz1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_bo_ricotz1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-bo-ricotz", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_bo_ricotz1");
+                       else
+                               dts_fail("utc_cairo_bug_bo_ricotz1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_bo_ricotz_image.c b/TC/testcase/utc_bug_bo_ricotz_image.c
new file mode 100644 (file)
index 0000000..22f41bf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_bo_ricotz1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_bo_ricotz1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_bo_ricotz1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-bo-ricotz", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_bo_ricotz1");
+                       else
+                               dts_fail("utc_cairo_bug_bo_ricotz1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_extents_gl.c b/TC/testcase/utc_bug_extents_gl.c
new file mode 100644 (file)
index 0000000..87d0dfc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_extents1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_extents1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_extents1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-extents", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_extents1");
+                       else
+                               dts_fail("utc_cairo_bug_extents1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_extents_image.c b/TC/testcase/utc_bug_extents_image.c
new file mode 100644 (file)
index 0000000..7e4e4c6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_extents1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_extents1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_extents1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-extents", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_extents1");
+                       else
+                               dts_fail("utc_cairo_bug_extents1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_seams_gl.c b/TC/testcase/utc_bug_seams_gl.c
new file mode 100644 (file)
index 0000000..6300cf0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_seams1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_seams1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_seams1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-seams", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_seams1");
+                       else
+                               dts_fail("utc_cairo_bug_seams1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_seams_image.c b/TC/testcase/utc_bug_seams_image.c
new file mode 100644 (file)
index 0000000..bb6e06f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_seams1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_seams1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_seams1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-seams", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_seams1");
+                       else
+                               dts_fail("utc_cairo_bug_seams1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_source_cu_gl.c b/TC/testcase/utc_bug_source_cu_gl.c
new file mode 100644 (file)
index 0000000..48f596c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_source_cu1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_source_cu1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_source_cu1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-source-cu", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_source_cu1");
+                       else
+                               dts_fail("utc_cairo_bug_source_cu1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_bug_source_cu_image.c b/TC/testcase/utc_bug_source_cu_image.c
new file mode 100644 (file)
index 0000000..ed6682a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_bug_source_cu1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_bug_source_cu1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_bug_source_cu1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite bug-source-cu", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_bug_source_cu1");
+                       else
+                               dts_fail("utc_cairo_bug_source_cu1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_gl.c b/TC/testcase/utc_caps_gl.c
new file mode 100644 (file)
index 0000000..5b4fb33
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps1");
+                       else
+                               dts_fail("utc_cairo_caps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_image.c b/TC/testcase/utc_caps_image.c
new file mode 100644 (file)
index 0000000..ff4d982
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps1");
+                       else
+                               dts_fail("utc_cairo_caps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_joins_alpha_gl.c b/TC/testcase/utc_caps_joins_alpha_gl.c
new file mode 100644 (file)
index 0000000..8ff22c5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_joins_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_joins_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_joins_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-joins-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_joins_alpha1");
+                       else
+                               dts_fail("utc_cairo_caps_joins_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_joins_alpha_image.c b/TC/testcase/utc_caps_joins_alpha_image.c
new file mode 100644 (file)
index 0000000..79f9465
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_joins_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_joins_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_joins_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-joins-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_joins_alpha1");
+                       else
+                               dts_fail("utc_cairo_caps_joins_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_joins_curve_gl.c b/TC/testcase/utc_caps_joins_curve_gl.c
new file mode 100644 (file)
index 0000000..c3bdbb2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_joins_curve1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_joins_curve1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_joins_curve1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-joins-curve", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_joins_curve1");
+                       else
+                               dts_fail("utc_cairo_caps_joins_curve1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_joins_curve_image.c b/TC/testcase/utc_caps_joins_curve_image.c
new file mode 100644 (file)
index 0000000..1de2ebe
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_joins_curve1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_joins_curve1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_joins_curve1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-joins-curve", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_joins_curve1");
+                       else
+                               dts_fail("utc_cairo_caps_joins_curve1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_joins_gl.c b/TC/testcase/utc_caps_joins_gl.c
new file mode 100644 (file)
index 0000000..b571088
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_joins1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_joins1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_joins1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-joins", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_joins1");
+                       else
+                               dts_fail("utc_cairo_caps_joins1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_joins_image.c b/TC/testcase/utc_caps_joins_image.c
new file mode 100644 (file)
index 0000000..a3b78ab
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_joins1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_joins1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_joins1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-joins", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_joins1");
+                       else
+                               dts_fail("utc_cairo_caps_joins1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_sub_paths_gl.c b/TC/testcase/utc_caps_sub_paths_gl.c
new file mode 100644 (file)
index 0000000..3a3c695
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_sub_paths1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_sub_paths1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_sub_paths1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-sub-paths", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_sub_paths1");
+                       else
+                               dts_fail("utc_cairo_caps_sub_paths1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_sub_paths_image.c b/TC/testcase/utc_caps_sub_paths_image.c
new file mode 100644 (file)
index 0000000..b03ceab
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_sub_paths1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_sub_paths1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_sub_paths1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-sub-paths", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_sub_paths1");
+                       else
+                               dts_fail("utc_cairo_caps_sub_paths1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_tails_curve_gl.c b/TC/testcase/utc_caps_tails_curve_gl.c
new file mode 100644 (file)
index 0000000..f79caa3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_tails_curve1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_tails_curve1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_tails_curve1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-tails-curve", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_tails_curve1");
+                       else
+                               dts_fail("utc_cairo_caps_tails_curve1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_caps_tails_curve_image.c b/TC/testcase/utc_caps_tails_curve_image.c
new file mode 100644 (file)
index 0000000..8465177
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_caps_tails_curve1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_caps_tails_curve1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_caps_tails_curve1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite caps-tails-curve", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_caps_tails_curve1");
+                       else
+                               dts_fail("utc_cairo_caps_tails_curve1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_checkerboard_gl.c b/TC/testcase/utc_checkerboard_gl.c
new file mode 100644 (file)
index 0000000..c1d4b9c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_checkerboard1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_checkerboard1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_checkerboard1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite checkerboard", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_checkerboard1");
+                       else
+                               dts_fail("utc_cairo_checkerboard1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_checkerboard_image.c b/TC/testcase/utc_checkerboard_image.c
new file mode 100644 (file)
index 0000000..56420bb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_checkerboard1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_checkerboard1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_checkerboard1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite checkerboard", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_checkerboard1");
+                       else
+                               dts_fail("utc_cairo_checkerboard1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clear_gl.c b/TC/testcase/utc_clear_gl.c
new file mode 100644 (file)
index 0000000..6fc13df
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clear1");
+                       else
+                               dts_fail("utc_cairo_clear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clear_image.c b/TC/testcase/utc_clear_image.c
new file mode 100644 (file)
index 0000000..6c7b2e7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clear1");
+                       else
+                               dts_fail("utc_cairo_clear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clear_source_gl.c b/TC/testcase/utc_clear_source_gl.c
new file mode 100644 (file)
index 0000000..4dc7533
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clear_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clear_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clear_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clear-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clear_source1");
+                       else
+                               dts_fail("utc_cairo_clear_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clear_source_image.c b/TC/testcase/utc_clear_source_image.c
new file mode 100644 (file)
index 0000000..7cb0dd3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clear_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clear_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clear_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clear-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clear_source1");
+                       else
+                               dts_fail("utc_cairo_clear_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_all_gl.c b/TC/testcase/utc_clip_all_gl.c
new file mode 100644 (file)
index 0000000..e89c731
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_all1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_all1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_all1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-all", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_all1");
+                       else
+                               dts_fail("utc_cairo_clip_all1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_all_image.c b/TC/testcase/utc_clip_all_image.c
new file mode 100644 (file)
index 0000000..2ba9aa6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_all1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_all1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_all1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-all", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_all1");
+                       else
+                               dts_fail("utc_cairo_clip_all1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_complex_shape_eo_aa_gl.c b/TC/testcase/utc_clip_complex_shape_eo_aa_gl.c
new file mode 100644 (file)
index 0000000..c9abfd1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_complex_shape_eo_aa1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_complex_shape_eo_aa1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_complex_shape_eo_aa1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-complex-shape-eo-aa", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_complex_shape_eo_aa1");
+                       else
+                               dts_fail("utc_cairo_clip_complex_shape_eo_aa1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_complex_shape_eo_aa_image.c b/TC/testcase/utc_clip_complex_shape_eo_aa_image.c
new file mode 100644 (file)
index 0000000..7500e0f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_complex_shape_eo_aa1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_complex_shape_eo_aa1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_complex_shape_eo_aa1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-complex-shape-eo-aa", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_complex_shape_eo_aa1");
+                       else
+                               dts_fail("utc_cairo_clip_complex_shape_eo_aa1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_complex_shape_eo_mono_gl.c b/TC/testcase/utc_clip_complex_shape_eo_mono_gl.c
new file mode 100644 (file)
index 0000000..d1cd8f9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_complex_shape_eo_mono1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_complex_shape_eo_mono1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_complex_shape_eo_mono1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-complex-shape-eo-mono", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_complex_shape_eo_mono1");
+                       else
+                               dts_fail("utc_cairo_clip_complex_shape_eo_mono1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_complex_shape_eo_mono_image.c b/TC/testcase/utc_clip_complex_shape_eo_mono_image.c
new file mode 100644 (file)
index 0000000..cbafdcd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_complex_shape_eo_mono1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_complex_shape_eo_mono1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_complex_shape_eo_mono1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-complex-shape-eo-mono", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_complex_shape_eo_mono1");
+                       else
+                               dts_fail("utc_cairo_clip_complex_shape_eo_mono1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_contexts_gl.c b/TC/testcase/utc_clip_contexts_gl.c
new file mode 100644 (file)
index 0000000..991c4a4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_contexts1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_contexts1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_contexts1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-contexts", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_contexts1");
+                       else
+                               dts_fail("utc_cairo_clip_contexts1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_contexts_image.c b/TC/testcase/utc_clip_contexts_image.c
new file mode 100644 (file)
index 0000000..2ed3ca6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_contexts1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_contexts1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_contexts1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-contexts", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_contexts1");
+                       else
+                               dts_fail("utc_cairo_clip_contexts1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_device_offset_gl.c b/TC/testcase/utc_clip_device_offset_gl.c
new file mode 100644 (file)
index 0000000..695a99d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_device_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_device_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_device_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-device-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_device_offset1");
+                       else
+                               dts_fail("utc_cairo_clip_device_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_device_offset_image.c b/TC/testcase/utc_clip_device_offset_image.c
new file mode 100644 (file)
index 0000000..987472a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_device_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_device_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_device_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-device-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_device_offset1");
+                       else
+                               dts_fail("utc_cairo_clip_device_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_disjoint_gl.c b/TC/testcase/utc_clip_disjoint_gl.c
new file mode 100644 (file)
index 0000000..432f1ae
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_disjoint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_disjoint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_disjoint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-disjoint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_disjoint1");
+                       else
+                               dts_fail("utc_cairo_clip_disjoint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_disjoint_hatching_gl.c b/TC/testcase/utc_clip_disjoint_hatching_gl.c
new file mode 100644 (file)
index 0000000..e77d848
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_disjoint_hatching1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_disjoint_hatching1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_disjoint_hatching1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-disjoint-hatching", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_disjoint_hatching1");
+                       else
+                               dts_fail("utc_cairo_clip_disjoint_hatching1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_disjoint_hatching_image.c b/TC/testcase/utc_clip_disjoint_hatching_image.c
new file mode 100644 (file)
index 0000000..d13f96d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_disjoint_hatching1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_disjoint_hatching1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_disjoint_hatching1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-disjoint-hatching", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_disjoint_hatching1");
+                       else
+                               dts_fail("utc_cairo_clip_disjoint_hatching1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_disjoint_image.c b/TC/testcase/utc_clip_disjoint_image.c
new file mode 100644 (file)
index 0000000..ef48b36
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_disjoint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_disjoint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_disjoint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-disjoint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_disjoint1");
+                       else
+                               dts_fail("utc_cairo_clip_disjoint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_double_free_gl.c b/TC/testcase/utc_clip_double_free_gl.c
new file mode 100644 (file)
index 0000000..7c1f006
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_double_free1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_double_free1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_double_free1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-double-free", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_double_free1");
+                       else
+                               dts_fail("utc_cairo_clip_double_free1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_double_free_image.c b/TC/testcase/utc_clip_double_free_image.c
new file mode 100644 (file)
index 0000000..c9089ea
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_double_free1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_double_free1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_double_free1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-double-free", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_double_free1");
+                       else
+                               dts_fail("utc_cairo_clip_double_free1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_empty_gl.c b/TC/testcase/utc_clip_empty_gl.c
new file mode 100644 (file)
index 0000000..e541f8b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_empty1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_empty1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_empty1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-empty", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_empty1");
+                       else
+                               dts_fail("utc_cairo_clip_empty1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_empty_group_gl.c b/TC/testcase/utc_clip_empty_group_gl.c
new file mode 100644 (file)
index 0000000..8e3ca81
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_empty_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_empty_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_empty_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-empty-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_empty_group1");
+                       else
+                               dts_fail("utc_cairo_clip_empty_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_empty_group_image.c b/TC/testcase/utc_clip_empty_group_image.c
new file mode 100644 (file)
index 0000000..7084a9c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_empty_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_empty_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_empty_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-empty-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_empty_group1");
+                       else
+                               dts_fail("utc_cairo_clip_empty_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_empty_image.c b/TC/testcase/utc_clip_empty_image.c
new file mode 100644 (file)
index 0000000..be66f5d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_empty1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_empty1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_empty1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-empty", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_empty1");
+                       else
+                               dts_fail("utc_cairo_clip_empty1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_empty_save_gl.c b/TC/testcase/utc_clip_empty_save_gl.c
new file mode 100644 (file)
index 0000000..716e5a0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_empty_save1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_empty_save1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_empty_save1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-empty-save", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_empty_save1");
+                       else
+                               dts_fail("utc_cairo_clip_empty_save1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_empty_save_image.c b/TC/testcase/utc_clip_empty_save_image.c
new file mode 100644 (file)
index 0000000..0e5b997
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_empty_save1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_empty_save1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_empty_save1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-empty-save", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_empty_save1");
+                       else
+                               dts_fail("utc_cairo_clip_empty_save1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_eo_unbounded_gl.c b/TC/testcase/utc_clip_fill_eo_unbounded_gl.c
new file mode 100644 (file)
index 0000000..6d5279b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_eo_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_eo_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_eo_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-eo-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_eo_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_eo_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_eo_unbounded_image.c b/TC/testcase/utc_clip_fill_eo_unbounded_image.c
new file mode 100644 (file)
index 0000000..77a18f8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_eo_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_eo_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_eo_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-eo-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_eo_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_eo_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_gl.c b/TC/testcase/utc_clip_fill_gl.c
new file mode 100644 (file)
index 0000000..181b221
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill1");
+                       else
+                               dts_fail("utc_cairo_clip_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_image.c b/TC/testcase/utc_clip_fill_image.c
new file mode 100644 (file)
index 0000000..1385bae
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill1");
+                       else
+                               dts_fail("utc_cairo_clip_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_no_op_gl.c b/TC/testcase/utc_clip_fill_no_op_gl.c
new file mode 100644 (file)
index 0000000..ddacf93
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_no_op1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_no_op1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_no_op1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-no-op", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_no_op1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_no_op1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_no_op_image.c b/TC/testcase/utc_clip_fill_no_op_image.c
new file mode 100644 (file)
index 0000000..b89b719
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_no_op1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_no_op1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_no_op1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-no-op", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_no_op1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_no_op1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_nz_unbounded_gl.c b/TC/testcase/utc_clip_fill_nz_unbounded_gl.c
new file mode 100644 (file)
index 0000000..cfbf684
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_nz_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_nz_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_nz_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-nz-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_nz_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_nz_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_nz_unbounded_image.c b/TC/testcase/utc_clip_fill_nz_unbounded_image.c
new file mode 100644 (file)
index 0000000..ab881fc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_nz_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_nz_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_nz_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-nz-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_nz_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_nz_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_rule_gl.c b/TC/testcase/utc_clip_fill_rule_gl.c
new file mode 100644 (file)
index 0000000..25546e0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_rule1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_rule1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_rule1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-rule", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_rule1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_rule1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_rule_image.c b/TC/testcase/utc_clip_fill_rule_image.c
new file mode 100644 (file)
index 0000000..6ca4258
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_rule1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_rule1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_rule1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-rule", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_rule1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_rule1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_rule_pixel_aligned_gl.c b/TC/testcase/utc_clip_fill_rule_pixel_aligned_gl.c
new file mode 100644 (file)
index 0000000..ee6b340
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_rule_pixel_aligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_rule_pixel_aligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_rule_pixel_aligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-rule-pixel-aligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_rule_pixel_aligned1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_rule_pixel_aligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_fill_rule_pixel_aligned_image.c b/TC/testcase/utc_clip_fill_rule_pixel_aligned_image.c
new file mode 100644 (file)
index 0000000..3777685
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_fill_rule_pixel_aligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_fill_rule_pixel_aligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_fill_rule_pixel_aligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-fill-rule-pixel-aligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_fill_rule_pixel_aligned1");
+                       else
+                               dts_fail("utc_cairo_clip_fill_rule_pixel_aligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_group_shapes_aligned_rectangles_gl.c b/TC/testcase/utc_clip_group_shapes_aligned_rectangles_gl.c
new file mode 100644 (file)
index 0000000..fdd6f9c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_group_shapes_aligned_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_group_shapes_aligned_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_group_shapes_aligned_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-group-shapes-aligned-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_group_shapes_aligned_rectangles1");
+                       else
+                               dts_fail("utc_cairo_clip_group_shapes_aligned_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_group_shapes_aligned_rectangles_image.c b/TC/testcase/utc_clip_group_shapes_aligned_rectangles_image.c
new file mode 100644 (file)
index 0000000..e599ed5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_group_shapes_aligned_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_group_shapes_aligned_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_group_shapes_aligned_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-group-shapes-aligned-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_group_shapes_aligned_rectangles1");
+                       else
+                               dts_fail("utc_cairo_clip_group_shapes_aligned_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_group_shapes_circles_gl.c b/TC/testcase/utc_clip_group_shapes_circles_gl.c
new file mode 100644 (file)
index 0000000..aa12afe
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_group_shapes_circles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_group_shapes_circles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_group_shapes_circles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-group-shapes-circles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_group_shapes_circles1");
+                       else
+                               dts_fail("utc_cairo_clip_group_shapes_circles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_group_shapes_circles_image.c b/TC/testcase/utc_clip_group_shapes_circles_image.c
new file mode 100644 (file)
index 0000000..9b222c0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_group_shapes_circles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_group_shapes_circles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_group_shapes_circles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-group-shapes-circles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_group_shapes_circles1");
+                       else
+                               dts_fail("utc_cairo_clip_group_shapes_circles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_group_shapes_unaligned_rectangles_gl.c b/TC/testcase/utc_clip_group_shapes_unaligned_rectangles_gl.c
new file mode 100644 (file)
index 0000000..17b9f12
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_group_shapes_unaligned_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_group_shapes_unaligned_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_group_shapes_unaligned_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-group-shapes-unaligned-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_group_shapes_unaligned_rectangles1");
+                       else
+                               dts_fail("utc_cairo_clip_group_shapes_unaligned_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_group_shapes_unaligned_rectangles_image.c b/TC/testcase/utc_clip_group_shapes_unaligned_rectangles_image.c
new file mode 100644 (file)
index 0000000..93a4034
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_group_shapes_unaligned_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_group_shapes_unaligned_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_group_shapes_unaligned_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-group-shapes-unaligned-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_group_shapes_unaligned_rectangles1");
+                       else
+                               dts_fail("utc_cairo_clip_group_shapes_unaligned_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_image_gl.c b/TC/testcase/utc_clip_image_gl.c
new file mode 100644 (file)
index 0000000..0f6704a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_image1");
+                       else
+                               dts_fail("utc_cairo_clip_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_image_image.c b/TC/testcase/utc_clip_image_image.c
new file mode 100644 (file)
index 0000000..68e5390
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_image1");
+                       else
+                               dts_fail("utc_cairo_clip_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_intersect_gl.c b/TC/testcase/utc_clip_intersect_gl.c
new file mode 100644 (file)
index 0000000..4395b83
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_intersect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_intersect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_intersect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-intersect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_intersect1");
+                       else
+                               dts_fail("utc_cairo_clip_intersect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_intersect_image.c b/TC/testcase/utc_clip_intersect_image.c
new file mode 100644 (file)
index 0000000..4715feb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_intersect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_intersect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_intersect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-intersect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_intersect1");
+                       else
+                               dts_fail("utc_cairo_clip_intersect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_mixed_antialias_gl.c b/TC/testcase/utc_clip_mixed_antialias_gl.c
new file mode 100644 (file)
index 0000000..b03f6f8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_mixed_antialias1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_mixed_antialias1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_mixed_antialias1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-mixed-antialias", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_mixed_antialias1");
+                       else
+                               dts_fail("utc_cairo_clip_mixed_antialias1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_mixed_antialias_image.c b/TC/testcase/utc_clip_mixed_antialias_image.c
new file mode 100644 (file)
index 0000000..3b87f8e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_mixed_antialias1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_mixed_antialias1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_mixed_antialias1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-mixed-antialias", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_mixed_antialias1");
+                       else
+                               dts_fail("utc_cairo_clip_mixed_antialias1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_nesting_gl.c b/TC/testcase/utc_clip_nesting_gl.c
new file mode 100644 (file)
index 0000000..966a759
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_nesting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_nesting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_nesting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-nesting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_nesting1");
+                       else
+                               dts_fail("utc_cairo_clip_nesting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_nesting_image.c b/TC/testcase/utc_clip_nesting_image.c
new file mode 100644 (file)
index 0000000..6179320
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_nesting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_nesting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_nesting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-nesting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_nesting1");
+                       else
+                               dts_fail("utc_cairo_clip_nesting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_operator_gl.c b/TC/testcase/utc_clip_operator_gl.c
new file mode 100644 (file)
index 0000000..e78377f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_operator1");
+                       else
+                               dts_fail("utc_cairo_clip_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_operator_image.c b/TC/testcase/utc_clip_operator_image.c
new file mode 100644 (file)
index 0000000..b4e9f8e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_operator1");
+                       else
+                               dts_fail("utc_cairo_clip_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_polygons_gl.c b/TC/testcase/utc_clip_polygons_gl.c
new file mode 100644 (file)
index 0000000..7b7086d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_polygons1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_polygons1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_polygons1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-polygons", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_polygons1");
+                       else
+                               dts_fail("utc_cairo_clip_polygons1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_polygons_image.c b/TC/testcase/utc_clip_polygons_image.c
new file mode 100644 (file)
index 0000000..54b93b4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_polygons1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_polygons1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_polygons1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-polygons", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_polygons1");
+                       else
+                               dts_fail("utc_cairo_clip_polygons1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_push_group_gl.c b/TC/testcase/utc_clip_push_group_gl.c
new file mode 100644 (file)
index 0000000..293d2e5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_push_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_push_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_push_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-push-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_push_group1");
+                       else
+                               dts_fail("utc_cairo_clip_push_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_push_group_image.c b/TC/testcase/utc_clip_push_group_image.c
new file mode 100644 (file)
index 0000000..4ca8229
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_push_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_push_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_push_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-push-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_push_group1");
+                       else
+                               dts_fail("utc_cairo_clip_push_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_rectilinear_gl.c b/TC/testcase/utc_clip_rectilinear_gl.c
new file mode 100644 (file)
index 0000000..2d90830
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_rectilinear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_rectilinear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_rectilinear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-rectilinear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_rectilinear1");
+                       else
+                               dts_fail("utc_cairo_clip_rectilinear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_rectilinear_image.c b/TC/testcase/utc_clip_rectilinear_image.c
new file mode 100644 (file)
index 0000000..a545113
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_rectilinear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_rectilinear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_rectilinear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-rectilinear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_rectilinear1");
+                       else
+                               dts_fail("utc_cairo_clip_rectilinear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_rotate_image_surface_paint_gl.c b/TC/testcase/utc_clip_rotate_image_surface_paint_gl.c
new file mode 100644 (file)
index 0000000..f976ed2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_rotate_image_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_rotate_image_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_rotate_image_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-rotate-image-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_rotate_image_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_clip_rotate_image_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_rotate_image_surface_paint_image.c b/TC/testcase/utc_clip_rotate_image_surface_paint_image.c
new file mode 100644 (file)
index 0000000..9ee861e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_rotate_image_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_rotate_image_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_rotate_image_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-rotate-image-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_rotate_image_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_clip_rotate_image_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_shape_gl.c b/TC/testcase/utc_clip_shape_gl.c
new file mode 100644 (file)
index 0000000..35b82a6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_shape1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_shape1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_shape1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-shape", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_shape1");
+                       else
+                               dts_fail("utc_cairo_clip_shape1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_shape_image.c b/TC/testcase/utc_clip_shape_image.c
new file mode 100644 (file)
index 0000000..b79d96a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_shape1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_shape1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_shape1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-shape", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_shape1");
+                       else
+                               dts_fail("utc_cairo_clip_shape1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_stroke_gl.c b/TC/testcase/utc_clip_stroke_gl.c
new file mode 100644 (file)
index 0000000..fdc0bee
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_stroke1");
+                       else
+                               dts_fail("utc_cairo_clip_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_stroke_image.c b/TC/testcase/utc_clip_stroke_image.c
new file mode 100644 (file)
index 0000000..5062e6e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_stroke1");
+                       else
+                               dts_fail("utc_cairo_clip_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_stroke_no_op_gl.c b/TC/testcase/utc_clip_stroke_no_op_gl.c
new file mode 100644 (file)
index 0000000..9d03559
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_stroke_no_op1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_stroke_no_op1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_stroke_no_op1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-stroke-no-op", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_stroke_no_op1");
+                       else
+                               dts_fail("utc_cairo_clip_stroke_no_op1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_stroke_no_op_image.c b/TC/testcase/utc_clip_stroke_no_op_image.c
new file mode 100644 (file)
index 0000000..8301f22
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_stroke_no_op1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_stroke_no_op1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_stroke_no_op1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-stroke-no-op", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_stroke_no_op1");
+                       else
+                               dts_fail("utc_cairo_clip_stroke_no_op1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_stroke_unbounded_gl.c b/TC/testcase/utc_clip_stroke_unbounded_gl.c
new file mode 100644 (file)
index 0000000..6573b80
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_stroke_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_stroke_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_stroke_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-stroke-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_stroke_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_stroke_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_stroke_unbounded_image.c b/TC/testcase/utc_clip_stroke_unbounded_image.c
new file mode 100644 (file)
index 0000000..83af302
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_stroke_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_stroke_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_stroke_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-stroke-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_stroke_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_stroke_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_text_gl.c b/TC/testcase/utc_clip_text_gl.c
new file mode 100644 (file)
index 0000000..9effd72
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_text1");
+                       else
+                               dts_fail("utc_cairo_clip_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_text_image.c b/TC/testcase/utc_clip_text_image.c
new file mode 100644 (file)
index 0000000..917e465
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_text1");
+                       else
+                               dts_fail("utc_cairo_clip_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_twice_gl.c b/TC/testcase/utc_clip_twice_gl.c
new file mode 100644 (file)
index 0000000..967b92c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_twice1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_twice1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_twice1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-twice", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_twice1");
+                       else
+                               dts_fail("utc_cairo_clip_twice1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_twice_image.c b/TC/testcase/utc_clip_twice_image.c
new file mode 100644 (file)
index 0000000..ae19566
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_twice1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_twice1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_twice1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-twice", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_twice1");
+                       else
+                               dts_fail("utc_cairo_clip_twice1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_twice_rectangle_gl.c b/TC/testcase/utc_clip_twice_rectangle_gl.c
new file mode 100644 (file)
index 0000000..20b45bc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_twice_rectangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_twice_rectangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_twice_rectangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-twice-rectangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_twice_rectangle1");
+                       else
+                               dts_fail("utc_cairo_clip_twice_rectangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_twice_rectangle_image.c b/TC/testcase/utc_clip_twice_rectangle_image.c
new file mode 100644 (file)
index 0000000..1e7a381
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_twice_rectangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_twice_rectangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_twice_rectangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-twice-rectangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_twice_rectangle1");
+                       else
+                               dts_fail("utc_cairo_clip_twice_rectangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_unbounded_gl.c b/TC/testcase/utc_clip_unbounded_gl.c
new file mode 100644 (file)
index 0000000..6a5d01d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_unbounded_image.c b/TC/testcase/utc_clip_unbounded_image.c
new file mode 100644 (file)
index 0000000..8465a3d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_unbounded1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_unbounded1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_unbounded1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-unbounded", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_unbounded1");
+                       else
+                               dts_fail("utc_cairo_clip_unbounded1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_zero_gl.c b/TC/testcase/utc_clip_zero_gl.c
new file mode 100644 (file)
index 0000000..a9bbe5c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_zero1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_zero1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_zero1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-zero", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_zero1");
+                       else
+                               dts_fail("utc_cairo_clip_zero1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clip_zero_image.c b/TC/testcase/utc_clip_zero_image.c
new file mode 100644 (file)
index 0000000..65e7f89
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clip_zero1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clip_zero1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clip_zero1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clip-zero", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clip_zero1");
+                       else
+                               dts_fail("utc_cairo_clip_zero1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clipped_group_gl.c b/TC/testcase/utc_clipped_group_gl.c
new file mode 100644 (file)
index 0000000..df81a43
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clipped_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clipped_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clipped_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clipped-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clipped_group1");
+                       else
+                               dts_fail("utc_cairo_clipped_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clipped_group_image.c b/TC/testcase/utc_clipped_group_image.c
new file mode 100644 (file)
index 0000000..f8055ef
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clipped_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clipped_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clipped_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clipped-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clipped_group1");
+                       else
+                               dts_fail("utc_cairo_clipped_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clipped_surface_gl.c b/TC/testcase/utc_clipped_surface_gl.c
new file mode 100644 (file)
index 0000000..bc3cf51
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clipped_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clipped_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clipped_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clipped-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clipped_surface1");
+                       else
+                               dts_fail("utc_cairo_clipped_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clipped_surface_image.c b/TC/testcase/utc_clipped_surface_image.c
new file mode 100644 (file)
index 0000000..b838953
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clipped_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clipped_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clipped_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clipped-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clipped_surface1");
+                       else
+                               dts_fail("utc_cairo_clipped_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clipped_trapezoids_gl.c b/TC/testcase/utc_clipped_trapezoids_gl.c
new file mode 100644 (file)
index 0000000..bab4d7c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clipped_trapezoids1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clipped_trapezoids1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clipped_trapezoids1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clipped-trapezoids", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clipped_trapezoids1");
+                       else
+                               dts_fail("utc_cairo_clipped_trapezoids1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_clipped_trapezoids_image.c b/TC/testcase/utc_clipped_trapezoids_image.c
new file mode 100644 (file)
index 0000000..d012ae0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_clipped_trapezoids1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_clipped_trapezoids1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_clipped_trapezoids1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite clipped-trapezoids", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_clipped_trapezoids1");
+                       else
+                               dts_fail("utc_cairo_clipped_trapezoids1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_close_path_current_point_gl.c b/TC/testcase/utc_close_path_current_point_gl.c
new file mode 100644 (file)
index 0000000..98b766b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_close_path_current_point1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_close_path_current_point1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_close_path_current_point1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite close-path-current-point", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_close_path_current_point1");
+                       else
+                               dts_fail("utc_cairo_close_path_current_point1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_close_path_current_point_image.c b/TC/testcase/utc_close_path_current_point_image.c
new file mode 100644 (file)
index 0000000..c7e6251
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_close_path_current_point1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_close_path_current_point1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_close_path_current_point1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite close-path-current-point", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_close_path_current_point1");
+                       else
+                               dts_fail("utc_cairo_close_path_current_point1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_close_path_gl.c b/TC/testcase/utc_close_path_gl.c
new file mode 100644 (file)
index 0000000..7081bd1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_close_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_close_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_close_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite close-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_close_path1");
+                       else
+                               dts_fail("utc_cairo_close_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_close_path_image.c b/TC/testcase/utc_close_path_image.c
new file mode 100644 (file)
index 0000000..b2c0e1d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_close_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_close_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_close_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite close-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_close_path1");
+                       else
+                               dts_fail("utc_cairo_close_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_composite_integer_translate_over_gl.c b/TC/testcase/utc_composite_integer_translate_over_gl.c
new file mode 100644 (file)
index 0000000..022376d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_composite_integer_translate_over1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_composite_integer_translate_over1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_composite_integer_translate_over1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite composite-integer-translate-over", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_composite_integer_translate_over1");
+                       else
+                               dts_fail("utc_cairo_composite_integer_translate_over1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_composite_integer_translate_over_image.c b/TC/testcase/utc_composite_integer_translate_over_image.c
new file mode 100644 (file)
index 0000000..690509f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_composite_integer_translate_over1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_composite_integer_translate_over1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_composite_integer_translate_over1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite composite-integer-translate-over", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_composite_integer_translate_over1");
+                       else
+                               dts_fail("utc_cairo_composite_integer_translate_over1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_composite_integer_translate_over_repeat_gl.c b/TC/testcase/utc_composite_integer_translate_over_repeat_gl.c
new file mode 100644 (file)
index 0000000..80e22da
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_composite_integer_translate_over_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_composite_integer_translate_over_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_composite_integer_translate_over_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite composite-integer-translate-over-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_composite_integer_translate_over_repeat1");
+                       else
+                               dts_fail("utc_cairo_composite_integer_translate_over_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_composite_integer_translate_over_repeat_image.c b/TC/testcase/utc_composite_integer_translate_over_repeat_image.c
new file mode 100644 (file)
index 0000000..85c23eb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_composite_integer_translate_over_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_composite_integer_translate_over_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_composite_integer_translate_over_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite composite-integer-translate-over-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_composite_integer_translate_over_repeat1");
+                       else
+                               dts_fail("utc_cairo_composite_integer_translate_over_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_composite_integer_translate_source_gl.c b/TC/testcase/utc_composite_integer_translate_source_gl.c
new file mode 100644 (file)
index 0000000..1fa0601
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_composite_integer_translate_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_composite_integer_translate_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_composite_integer_translate_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite composite-integer-translate-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_composite_integer_translate_source1");
+                       else
+                               dts_fail("utc_cairo_composite_integer_translate_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_composite_integer_translate_source_image.c b/TC/testcase/utc_composite_integer_translate_source_image.c
new file mode 100644 (file)
index 0000000..a5021a9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_composite_integer_translate_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_composite_integer_translate_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_composite_integer_translate_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite composite-integer-translate-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_composite_integer_translate_source1");
+                       else
+                               dts_fail("utc_cairo_composite_integer_translate_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_copy_disjoint_gl.c b/TC/testcase/utc_copy_disjoint_gl.c
new file mode 100644 (file)
index 0000000..53a23c0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_copy_disjoint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_copy_disjoint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_copy_disjoint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite copy-disjoint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_copy_disjoint1");
+                       else
+                               dts_fail("utc_cairo_copy_disjoint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_copy_disjoint_image.c b/TC/testcase/utc_copy_disjoint_image.c
new file mode 100644 (file)
index 0000000..a7e05fa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_copy_disjoint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_copy_disjoint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_copy_disjoint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite copy-disjoint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_copy_disjoint1");
+                       else
+                               dts_fail("utc_cairo_copy_disjoint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_copy_path_gl.c b/TC/testcase/utc_copy_path_gl.c
new file mode 100644 (file)
index 0000000..775617e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_copy_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_copy_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_copy_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite copy-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_copy_path1");
+                       else
+                               dts_fail("utc_cairo_copy_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_copy_path_image.c b/TC/testcase/utc_copy_path_image.c
new file mode 100644 (file)
index 0000000..3b5e830
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_copy_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_copy_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_copy_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite copy-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_copy_path1");
+                       else
+                               dts_fail("utc_cairo_copy_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_column_triangles_gl.c b/TC/testcase/utc_coverage_column_triangles_gl.c
new file mode 100644 (file)
index 0000000..ce1aa5a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_column_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_column_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_column_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-column-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_column_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_column_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_column_triangles_image.c b/TC/testcase/utc_coverage_column_triangles_image.c
new file mode 100644 (file)
index 0000000..f31e722
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_column_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_column_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_column_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-column-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_column_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_column_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_intersecting_quads_gl.c b/TC/testcase/utc_coverage_intersecting_quads_gl.c
new file mode 100644 (file)
index 0000000..c9378c5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_intersecting_quads1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_intersecting_quads1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_intersecting_quads1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-intersecting-quads", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_intersecting_quads1");
+                       else
+                               dts_fail("utc_cairo_coverage_intersecting_quads1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_intersecting_quads_image.c b/TC/testcase/utc_coverage_intersecting_quads_image.c
new file mode 100644 (file)
index 0000000..e79c5fa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_intersecting_quads1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_intersecting_quads1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_intersecting_quads1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-intersecting-quads", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_intersecting_quads1");
+                       else
+                               dts_fail("utc_cairo_coverage_intersecting_quads1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_intersecting_triangles_gl.c b/TC/testcase/utc_coverage_intersecting_triangles_gl.c
new file mode 100644 (file)
index 0000000..9e0a395
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_intersecting_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_intersecting_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_intersecting_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-intersecting-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_intersecting_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_intersecting_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_intersecting_triangles_image.c b/TC/testcase/utc_coverage_intersecting_triangles_image.c
new file mode 100644 (file)
index 0000000..20a2f2e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_intersecting_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_intersecting_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_intersecting_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-intersecting-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_intersecting_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_intersecting_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_rectangles_gl.c b/TC/testcase/utc_coverage_rectangles_gl.c
new file mode 100644 (file)
index 0000000..ef7166d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_rectangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_rectangles_image.c b/TC/testcase/utc_coverage_rectangles_image.c
new file mode 100644 (file)
index 0000000..ac1c4ef
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_rectangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_row_triangles_gl.c b/TC/testcase/utc_coverage_row_triangles_gl.c
new file mode 100644 (file)
index 0000000..cf2fdb6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_row_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_row_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_row_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-row-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_row_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_row_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_row_triangles_image.c b/TC/testcase/utc_coverage_row_triangles_image.c
new file mode 100644 (file)
index 0000000..fe8b49b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_row_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_row_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_row_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-row-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_row_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_row_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_triangles_gl.c b/TC/testcase/utc_coverage_triangles_gl.c
new file mode 100644 (file)
index 0000000..b2afbdf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_coverage_triangles_image.c b/TC/testcase/utc_coverage_triangles_image.c
new file mode 100644 (file)
index 0000000..4383d1d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_coverage_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_coverage_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_coverage_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite coverage-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_coverage_triangles1");
+                       else
+                               dts_fail("utc_cairo_coverage_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_create_for_stream_gl.c b/TC/testcase/utc_create_for_stream_gl.c
new file mode 100644 (file)
index 0000000..585959a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_create_for_stream1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_create_for_stream1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_create_for_stream1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite create-for-stream", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_create_for_stream1");
+                       else
+                               dts_fail("utc_cairo_create_for_stream1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_create_for_stream_image.c b/TC/testcase/utc_create_for_stream_image.c
new file mode 100644 (file)
index 0000000..aa7c7eb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_create_for_stream1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_create_for_stream1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_create_for_stream1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite create-for-stream", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_create_for_stream1");
+                       else
+                               dts_fail("utc_cairo_create_for_stream1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_create_from_png_gl.c b/TC/testcase/utc_create_from_png_gl.c
new file mode 100644 (file)
index 0000000..340bb05
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_create_from_png1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_create_from_png1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_create_from_png1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite create-from-png", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_create_from_png1");
+                       else
+                               dts_fail("utc_cairo_create_from_png1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_create_from_png_image.c b/TC/testcase/utc_create_from_png_image.c
new file mode 100644 (file)
index 0000000..ae6ce0e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_create_from_png1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_create_from_png1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_create_from_png1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite create-from-png", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_create_from_png1");
+                       else
+                               dts_fail("utc_cairo_create_from_png1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_create_from_png_stream_gl.c b/TC/testcase/utc_create_from_png_stream_gl.c
new file mode 100644 (file)
index 0000000..86d57dd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_create_from_png_stream1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_create_from_png_stream1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_create_from_png_stream1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite create-from-png-stream", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_create_from_png_stream1");
+                       else
+                               dts_fail("utc_cairo_create_from_png_stream1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_create_from_png_stream_image.c b/TC/testcase/utc_create_from_png_stream_image.c
new file mode 100644 (file)
index 0000000..6fe5eb5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_create_from_png_stream1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_create_from_png_stream1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_create_from_png_stream1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite create-from-png-stream", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_create_from_png_stream1");
+                       else
+                               dts_fail("utc_cairo_create_from_png_stream1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_culled_glyphs_gl.c b/TC/testcase/utc_culled_glyphs_gl.c
new file mode 100644 (file)
index 0000000..1752e8e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_culled_glyphs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_culled_glyphs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_culled_glyphs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite culled-glyphs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_culled_glyphs1");
+                       else
+                               dts_fail("utc_cairo_culled_glyphs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_culled_glyphs_image.c b/TC/testcase/utc_culled_glyphs_image.c
new file mode 100644 (file)
index 0000000..bd497be
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_culled_glyphs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_culled_glyphs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_culled_glyphs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite culled-glyphs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_culled_glyphs1");
+                       else
+                               dts_fail("utc_cairo_culled_glyphs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_curve_to_as_line_to_gl.c b/TC/testcase/utc_curve_to_as_line_to_gl.c
new file mode 100644 (file)
index 0000000..0b53340
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_curve_to_as_line_to1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_curve_to_as_line_to1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_curve_to_as_line_to1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite curve-to-as-line-to", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_curve_to_as_line_to1");
+                       else
+                               dts_fail("utc_cairo_curve_to_as_line_to1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_curve_to_as_line_to_image.c b/TC/testcase/utc_curve_to_as_line_to_image.c
new file mode 100644 (file)
index 0000000..a816519
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_curve_to_as_line_to1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_curve_to_as_line_to1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_curve_to_as_line_to1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite curve-to-as-line-to", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_curve_to_as_line_to1");
+                       else
+                               dts_fail("utc_cairo_curve_to_as_line_to1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_caps_joins_gl.c b/TC/testcase/utc_dash_caps_joins_gl.c
new file mode 100644 (file)
index 0000000..3271a5a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_caps_joins1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_caps_joins1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_caps_joins1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-caps-joins", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_caps_joins1");
+                       else
+                               dts_fail("utc_cairo_dash_caps_joins1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_caps_joins_image.c b/TC/testcase/utc_dash_caps_joins_image.c
new file mode 100644 (file)
index 0000000..3b9738b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_caps_joins1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_caps_joins1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_caps_joins1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-caps-joins", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_caps_joins1");
+                       else
+                               dts_fail("utc_cairo_dash_caps_joins1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_curve_gl.c b/TC/testcase/utc_dash_curve_gl.c
new file mode 100644 (file)
index 0000000..6f7f188
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_curve1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_curve1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_curve1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-curve", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_curve1");
+                       else
+                               dts_fail("utc_cairo_dash_curve1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_curve_image.c b/TC/testcase/utc_dash_curve_image.c
new file mode 100644 (file)
index 0000000..31193d2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_curve1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_curve1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_curve1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-curve", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_curve1");
+                       else
+                               dts_fail("utc_cairo_dash_curve1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_infinite_loop_gl.c b/TC/testcase/utc_dash_infinite_loop_gl.c
new file mode 100644 (file)
index 0000000..93f18cf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_infinite_loop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_infinite_loop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_infinite_loop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-infinite-loop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_infinite_loop1");
+                       else
+                               dts_fail("utc_cairo_dash_infinite_loop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_infinite_loop_image.c b/TC/testcase/utc_dash_infinite_loop_image.c
new file mode 100644 (file)
index 0000000..a0e50f6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_infinite_loop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_infinite_loop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_infinite_loop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-infinite-loop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_infinite_loop1");
+                       else
+                               dts_fail("utc_cairo_dash_infinite_loop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_no_dash_gl.c b/TC/testcase/utc_dash_no_dash_gl.c
new file mode 100644 (file)
index 0000000..40f0e2d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_no_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_no_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_no_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-no-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_no_dash1");
+                       else
+                               dts_fail("utc_cairo_dash_no_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_no_dash_image.c b/TC/testcase/utc_dash_no_dash_image.c
new file mode 100644 (file)
index 0000000..806663a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_no_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_no_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_no_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-no-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_no_dash1");
+                       else
+                               dts_fail("utc_cairo_dash_no_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_offset_gl.c b/TC/testcase/utc_dash_offset_gl.c
new file mode 100644 (file)
index 0000000..77692f8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_offset1");
+                       else
+                               dts_fail("utc_cairo_dash_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_offset_image.c b/TC/testcase/utc_dash_offset_image.c
new file mode 100644 (file)
index 0000000..9fcb9ce
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_offset1");
+                       else
+                               dts_fail("utc_cairo_dash_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_offset_negative_gl.c b/TC/testcase/utc_dash_offset_negative_gl.c
new file mode 100644 (file)
index 0000000..35044c2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_offset_negative1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_offset_negative1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_offset_negative1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-offset-negative", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_offset_negative1");
+                       else
+                               dts_fail("utc_cairo_dash_offset_negative1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_offset_negative_image.c b/TC/testcase/utc_dash_offset_negative_image.c
new file mode 100644 (file)
index 0000000..eb2b606
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_offset_negative1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_offset_negative1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_offset_negative1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-offset-negative", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_offset_negative1");
+                       else
+                               dts_fail("utc_cairo_dash_offset_negative1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_scale_gl.c b/TC/testcase/utc_dash_scale_gl.c
new file mode 100644 (file)
index 0000000..4d85f7d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_scale1");
+                       else
+                               dts_fail("utc_cairo_dash_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_scale_image.c b/TC/testcase/utc_dash_scale_image.c
new file mode 100644 (file)
index 0000000..e730e1f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_scale1");
+                       else
+                               dts_fail("utc_cairo_dash_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_state_gl.c b/TC/testcase/utc_dash_state_gl.c
new file mode 100644 (file)
index 0000000..29d25b3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_state1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_state1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_state1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-state", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_state1");
+                       else
+                               dts_fail("utc_cairo_dash_state1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_state_image.c b/TC/testcase/utc_dash_state_image.c
new file mode 100644 (file)
index 0000000..8ec76c5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_state1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_state1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_state1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-state", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_state1");
+                       else
+                               dts_fail("utc_cairo_dash_state1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_zero_length_gl.c b/TC/testcase/utc_dash_zero_length_gl.c
new file mode 100644 (file)
index 0000000..694c955
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_zero_length1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_zero_length1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_zero_length1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-zero-length", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_zero_length1");
+                       else
+                               dts_fail("utc_cairo_dash_zero_length1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_dash_zero_length_image.c b/TC/testcase/utc_dash_zero_length_image.c
new file mode 100644 (file)
index 0000000..c7d0071
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_dash_zero_length1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_dash_zero_length1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_dash_zero_length1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite dash-zero-length", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_dash_zero_length1");
+                       else
+                               dts_fail("utc_cairo_dash_zero_length1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_arc_gl.c b/TC/testcase/utc_degenerate_arc_gl.c
new file mode 100644 (file)
index 0000000..44b1367
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_arc1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_arc1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_arc1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-arc", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_arc1");
+                       else
+                               dts_fail("utc_cairo_degenerate_arc1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_arc_image.c b/TC/testcase/utc_degenerate_arc_image.c
new file mode 100644 (file)
index 0000000..2943067
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_arc1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_arc1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_arc1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-arc", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_arc1");
+                       else
+                               dts_fail("utc_cairo_degenerate_arc1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_arcs_gl.c b/TC/testcase/utc_degenerate_arcs_gl.c
new file mode 100644 (file)
index 0000000..d6212cf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_arcs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_arcs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_arcs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-arcs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_arcs1");
+                       else
+                               dts_fail("utc_cairo_degenerate_arcs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_arcs_image.c b/TC/testcase/utc_degenerate_arcs_image.c
new file mode 100644 (file)
index 0000000..31b8908
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_arcs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_arcs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_arcs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-arcs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_arcs1");
+                       else
+                               dts_fail("utc_cairo_degenerate_arcs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_curve_to_gl.c b/TC/testcase/utc_degenerate_curve_to_gl.c
new file mode 100644 (file)
index 0000000..973c81a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_curve_to1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_curve_to1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_curve_to1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-curve-to", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_curve_to1");
+                       else
+                               dts_fail("utc_cairo_degenerate_curve_to1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_curve_to_image.c b/TC/testcase/utc_degenerate_curve_to_image.c
new file mode 100644 (file)
index 0000000..d0072de
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_curve_to1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_curve_to1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_curve_to1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-curve-to", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_curve_to1");
+                       else
+                               dts_fail("utc_cairo_degenerate_curve_to1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_dash_gl.c b/TC/testcase/utc_degenerate_dash_gl.c
new file mode 100644 (file)
index 0000000..07ef919
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_dash1");
+                       else
+                               dts_fail("utc_cairo_degenerate_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_dash_image.c b/TC/testcase/utc_degenerate_dash_image.c
new file mode 100644 (file)
index 0000000..53f8161
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_dash1");
+                       else
+                               dts_fail("utc_cairo_degenerate_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_linear_gradient_gl.c b/TC/testcase/utc_degenerate_linear_gradient_gl.c
new file mode 100644 (file)
index 0000000..bddb1bc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_linear_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_linear_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_linear_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-linear-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_linear_gradient1");
+                       else
+                               dts_fail("utc_cairo_degenerate_linear_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_linear_gradient_image.c b/TC/testcase/utc_degenerate_linear_gradient_image.c
new file mode 100644 (file)
index 0000000..9ab9e67
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_linear_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_linear_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_linear_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-linear-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_linear_gradient1");
+                       else
+                               dts_fail("utc_cairo_degenerate_linear_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_path_gl.c b/TC/testcase/utc_degenerate_path_gl.c
new file mode 100644 (file)
index 0000000..2c0f751
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_path1");
+                       else
+                               dts_fail("utc_cairo_degenerate_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_path_image.c b/TC/testcase/utc_degenerate_path_image.c
new file mode 100644 (file)
index 0000000..8614b22
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_path1");
+                       else
+                               dts_fail("utc_cairo_degenerate_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_pen_gl.c b/TC/testcase/utc_degenerate_pen_gl.c
new file mode 100644 (file)
index 0000000..fcee7fa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_pen1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_pen1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_pen1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-pen", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_pen1");
+                       else
+                               dts_fail("utc_cairo_degenerate_pen1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_pen_image.c b/TC/testcase/utc_degenerate_pen_image.c
new file mode 100644 (file)
index 0000000..2c80da2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_pen1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_pen1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_pen1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-pen", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_pen1");
+                       else
+                               dts_fail("utc_cairo_degenerate_pen1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_radial_gradient_gl.c b/TC/testcase/utc_degenerate_radial_gradient_gl.c
new file mode 100644 (file)
index 0000000..28f619b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_radial_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_radial_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_radial_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-radial-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_radial_gradient1");
+                       else
+                               dts_fail("utc_cairo_degenerate_radial_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_radial_gradient_image.c b/TC/testcase/utc_degenerate_radial_gradient_image.c
new file mode 100644 (file)
index 0000000..1ff223a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_radial_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_radial_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_radial_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-radial-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_radial_gradient1");
+                       else
+                               dts_fail("utc_cairo_degenerate_radial_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_rel_curve_to_gl.c b/TC/testcase/utc_degenerate_rel_curve_to_gl.c
new file mode 100644 (file)
index 0000000..20df1ec
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_rel_curve_to1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_rel_curve_to1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_rel_curve_to1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-rel-curve-to", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_rel_curve_to1");
+                       else
+                               dts_fail("utc_cairo_degenerate_rel_curve_to1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_rel_curve_to_image.c b/TC/testcase/utc_degenerate_rel_curve_to_image.c
new file mode 100644 (file)
index 0000000..68f4a87
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_rel_curve_to1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_rel_curve_to1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_rel_curve_to1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-rel-curve-to", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_rel_curve_to1");
+                       else
+                               dts_fail("utc_cairo_degenerate_rel_curve_to1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_solid_dash_gl.c b/TC/testcase/utc_degenerate_solid_dash_gl.c
new file mode 100644 (file)
index 0000000..e744050
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_solid_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_solid_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_solid_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-solid-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_solid_dash1");
+                       else
+                               dts_fail("utc_cairo_degenerate_solid_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_degenerate_solid_dash_image.c b/TC/testcase/utc_degenerate_solid_dash_image.c
new file mode 100644 (file)
index 0000000..2c55cd2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_degenerate_solid_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_degenerate_solid_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_degenerate_solid_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite degenerate-solid-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_degenerate_solid_dash1");
+                       else
+                               dts_fail("utc_cairo_degenerate_solid_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_fractional_gl.c b/TC/testcase/utc_device_offset_fractional_gl.c
new file mode 100644 (file)
index 0000000..3c6bb9e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset_fractional1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset_fractional1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset_fractional1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset-fractional", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset_fractional1");
+                       else
+                               dts_fail("utc_cairo_device_offset_fractional1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_fractional_image.c b/TC/testcase/utc_device_offset_fractional_image.c
new file mode 100644 (file)
index 0000000..4228bce
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset_fractional1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset_fractional1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset_fractional1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset-fractional", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset_fractional1");
+                       else
+                               dts_fail("utc_cairo_device_offset_fractional1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_gl.c b/TC/testcase/utc_device_offset_gl.c
new file mode 100644 (file)
index 0000000..5975b49
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset1");
+                       else
+                               dts_fail("utc_cairo_device_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_image.c b/TC/testcase/utc_device_offset_image.c
new file mode 100644 (file)
index 0000000..c0e784f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset1");
+                       else
+                               dts_fail("utc_cairo_device_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_positive_gl.c b/TC/testcase/utc_device_offset_positive_gl.c
new file mode 100644 (file)
index 0000000..07f7e92
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset_positive1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset_positive1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset_positive1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset-positive", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset_positive1");
+                       else
+                               dts_fail("utc_cairo_device_offset_positive1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_positive_image.c b/TC/testcase/utc_device_offset_positive_image.c
new file mode 100644 (file)
index 0000000..dcbafe4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset_positive1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset_positive1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset_positive1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset-positive", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset_positive1");
+                       else
+                               dts_fail("utc_cairo_device_offset_positive1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_scale_gl.c b/TC/testcase/utc_device_offset_scale_gl.c
new file mode 100644 (file)
index 0000000..e1b10dd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset_scale1");
+                       else
+                               dts_fail("utc_cairo_device_offset_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_device_offset_scale_image.c b/TC/testcase/utc_device_offset_scale_image.c
new file mode 100644 (file)
index 0000000..cd2d82b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_device_offset_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_device_offset_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_device_offset_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite device-offset-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_device_offset_scale1");
+                       else
+                               dts_fail("utc_cairo_device_offset_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_drunkard_tails_gl.c b/TC/testcase/utc_drunkard_tails_gl.c
new file mode 100644 (file)
index 0000000..b71a773
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_drunkard_tails1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_drunkard_tails1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_drunkard_tails1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite drunkard-tails", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_drunkard_tails1");
+                       else
+                               dts_fail("utc_cairo_drunkard_tails1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_drunkard_tails_image.c b/TC/testcase/utc_drunkard_tails_image.c
new file mode 100644 (file)
index 0000000..704af14
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_drunkard_tails1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_drunkard_tails1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_drunkard_tails1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite drunkard-tails", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_drunkard_tails1");
+                       else
+                               dts_fail("utc_cairo_drunkard_tails1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_error_setters_gl.c b/TC/testcase/utc_error_setters_gl.c
new file mode 100644 (file)
index 0000000..27d22c5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_error_setters1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_error_setters1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_error_setters1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite error-setters", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_error_setters1");
+                       else
+                               dts_fail("utc_cairo_error_setters1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_error_setters_image.c b/TC/testcase/utc_error_setters_image.c
new file mode 100644 (file)
index 0000000..d943ee9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_error_setters1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_error_setters1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_error_setters1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite error-setters", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_error_setters1");
+                       else
+                               dts_fail("utc_cairo_error_setters1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_pad_border_gl.c b/TC/testcase/utc_extend_pad_border_gl.c
new file mode 100644 (file)
index 0000000..dae4ee2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_pad_border1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_pad_border1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_pad_border1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-pad-border", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_pad_border1");
+                       else
+                               dts_fail("utc_cairo_extend_pad_border1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_pad_border_image.c b/TC/testcase/utc_extend_pad_border_image.c
new file mode 100644 (file)
index 0000000..edafad5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_pad_border1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_pad_border1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_pad_border1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-pad-border", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_pad_border1");
+                       else
+                               dts_fail("utc_cairo_extend_pad_border1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_pad_gl.c b/TC/testcase/utc_extend_pad_gl.c
new file mode 100644 (file)
index 0000000..9df0ecb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_pad_image.c b/TC/testcase/utc_extend_pad_image.c
new file mode 100644 (file)
index 0000000..87f2b67
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_pad_similar_gl.c b/TC/testcase/utc_extend_pad_similar_gl.c
new file mode 100644 (file)
index 0000000..573f7df
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_pad_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_pad_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_pad_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-pad-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_pad_similar1");
+                       else
+                               dts_fail("utc_cairo_extend_pad_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_pad_similar_image.c b/TC/testcase/utc_extend_pad_similar_image.c
new file mode 100644 (file)
index 0000000..b5c33d7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_pad_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_pad_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_pad_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-pad-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_pad_similar1");
+                       else
+                               dts_fail("utc_cairo_extend_pad_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_reflect_gl.c b/TC/testcase/utc_extend_reflect_gl.c
new file mode 100644 (file)
index 0000000..cb2a0d7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_reflect_image.c b/TC/testcase/utc_extend_reflect_image.c
new file mode 100644 (file)
index 0000000..aa89ca1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_reflect_similar_gl.c b/TC/testcase/utc_extend_reflect_similar_gl.c
new file mode 100644 (file)
index 0000000..616355e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_reflect_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_reflect_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_reflect_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-reflect-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_reflect_similar1");
+                       else
+                               dts_fail("utc_cairo_extend_reflect_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_reflect_similar_image.c b/TC/testcase/utc_extend_reflect_similar_image.c
new file mode 100644 (file)
index 0000000..fd9ff6b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_reflect_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_reflect_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_reflect_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-reflect-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_reflect_similar1");
+                       else
+                               dts_fail("utc_cairo_extend_reflect_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_repeat_gl.c b/TC/testcase/utc_extend_repeat_gl.c
new file mode 100644 (file)
index 0000000..c8ab75f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_repeat_image.c b/TC/testcase/utc_extend_repeat_image.c
new file mode 100644 (file)
index 0000000..c0cad28
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_repeat_similar_gl.c b/TC/testcase/utc_extend_repeat_similar_gl.c
new file mode 100644 (file)
index 0000000..6e27b26
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_repeat_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_repeat_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_repeat_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-repeat-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_repeat_similar1");
+                       else
+                               dts_fail("utc_cairo_extend_repeat_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extend_repeat_similar_image.c b/TC/testcase/utc_extend_repeat_similar_image.c
new file mode 100644 (file)
index 0000000..2d561e3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extend_repeat_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extend_repeat_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extend_repeat_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extend-repeat-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extend_repeat_similar1");
+                       else
+                               dts_fail("utc_cairo_extend_repeat_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_alpha_gl.c b/TC/testcase/utc_extended_blend_alpha_gl.c
new file mode 100644 (file)
index 0000000..7bee662
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_alpha1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_alpha_image.c b/TC/testcase/utc_extended_blend_alpha_image.c
new file mode 100644 (file)
index 0000000..3214160
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_alpha1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_alpha_mask_gl.c b/TC/testcase/utc_extended_blend_alpha_mask_gl.c
new file mode 100644 (file)
index 0000000..ed02698
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_alpha_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_alpha_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_alpha_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-alpha-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_alpha_mask1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_alpha_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_alpha_mask_image.c b/TC/testcase/utc_extended_blend_alpha_mask_image.c
new file mode 100644 (file)
index 0000000..fdea88f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_alpha_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_alpha_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_alpha_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-alpha-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_alpha_mask1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_alpha_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_gl.c b/TC/testcase/utc_extended_blend_gl.c
new file mode 100644 (file)
index 0000000..b70244b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend1");
+                       else
+                               dts_fail("utc_cairo_extended_blend1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_image.c b/TC/testcase/utc_extended_blend_image.c
new file mode 100644 (file)
index 0000000..c5e5c5e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend1");
+                       else
+                               dts_fail("utc_cairo_extended_blend1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_mask_gl.c b/TC/testcase/utc_extended_blend_mask_gl.c
new file mode 100644 (file)
index 0000000..00f904c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_mask1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_mask_image.c b/TC/testcase/utc_extended_blend_mask_image.c
new file mode 100644 (file)
index 0000000..1a19354
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_mask1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_solid_alpha_gl.c b/TC/testcase/utc_extended_blend_solid_alpha_gl.c
new file mode 100644 (file)
index 0000000..be66dfb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_solid_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_solid_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_solid_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-solid-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_solid_alpha1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_solid_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_solid_alpha_image.c b/TC/testcase/utc_extended_blend_solid_alpha_image.c
new file mode 100644 (file)
index 0000000..812a5eb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_solid_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_solid_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_solid_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-solid-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_solid_alpha1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_solid_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_solid_gl.c b/TC/testcase/utc_extended_blend_solid_gl.c
new file mode 100644 (file)
index 0000000..e7fe24c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_solid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_solid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_solid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-solid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_solid1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_solid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_extended_blend_solid_image.c b/TC/testcase/utc_extended_blend_solid_image.c
new file mode 100644 (file)
index 0000000..10ddb8b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_extended_blend_solid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_extended_blend_solid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_extended_blend_solid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite extended-blend-solid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_extended_blend_solid1");
+                       else
+                               dts_fail("utc_cairo_extended_blend_solid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fallback_gl.c b/TC/testcase/utc_fallback_gl.c
new file mode 100644 (file)
index 0000000..0ab8651
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fallback1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fallback1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fallback1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fallback", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fallback1");
+                       else
+                               dts_fail("utc_cairo_fallback1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fallback_image.c b/TC/testcase/utc_fallback_image.c
new file mode 100644 (file)
index 0000000..058b32c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fallback1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fallback1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fallback1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fallback", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fallback1");
+                       else
+                               dts_fail("utc_cairo_fallback1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fallback_resolution_gl.c b/TC/testcase/utc_fallback_resolution_gl.c
new file mode 100644 (file)
index 0000000..f89413b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fallback_resolution1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fallback_resolution1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fallback_resolution1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fallback-resolution", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fallback_resolution1");
+                       else
+                               dts_fail("utc_cairo_fallback_resolution1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fallback_resolution_image.c b/TC/testcase/utc_fallback_resolution_image.c
new file mode 100644 (file)
index 0000000..fc533e3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fallback_resolution1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fallback_resolution1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fallback_resolution1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fallback-resolution", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fallback_resolution1");
+                       else
+                               dts_fail("utc_cairo_fallback_resolution1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_alpha_gl.c b/TC/testcase/utc_fill_alpha_gl.c
new file mode 100644 (file)
index 0000000..3adba1a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_alpha_image.c b/TC/testcase/utc_fill_alpha_image.c
new file mode 100644 (file)
index 0000000..89e38c0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_alpha_pattern_gl.c b/TC/testcase/utc_fill_alpha_pattern_gl.c
new file mode 100644 (file)
index 0000000..cded0e6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_alpha_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_alpha_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_alpha_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-alpha-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_alpha_pattern1");
+                       else
+                               dts_fail("utc_cairo_fill_alpha_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_alpha_pattern_image.c b/TC/testcase/utc_fill_alpha_pattern_image.c
new file mode 100644 (file)
index 0000000..364456f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_alpha_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_alpha_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_alpha_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-alpha-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_alpha_pattern1");
+                       else
+                               dts_fail("utc_cairo_fill_alpha_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_and_stroke_alpha_add_gl.c b/TC/testcase/utc_fill_and_stroke_alpha_add_gl.c
new file mode 100644 (file)
index 0000000..017a36c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_and_stroke_alpha_add1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_and_stroke_alpha_add1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_and_stroke_alpha_add1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-and-stroke-alpha-add", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_and_stroke_alpha_add1");
+                       else
+                               dts_fail("utc_cairo_fill_and_stroke_alpha_add1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_and_stroke_alpha_add_image.c b/TC/testcase/utc_fill_and_stroke_alpha_add_image.c
new file mode 100644 (file)
index 0000000..9a6721c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_and_stroke_alpha_add1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_and_stroke_alpha_add1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_and_stroke_alpha_add1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-and-stroke-alpha-add", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_and_stroke_alpha_add1");
+                       else
+                               dts_fail("utc_cairo_fill_and_stroke_alpha_add1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_and_stroke_alpha_gl.c b/TC/testcase/utc_fill_and_stroke_alpha_gl.c
new file mode 100644 (file)
index 0000000..3a2cd03
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_and_stroke_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_and_stroke_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_and_stroke_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-and-stroke-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_and_stroke_alpha1");
+                       else
+                               dts_fail("utc_cairo_fill_and_stroke_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_and_stroke_alpha_image.c b/TC/testcase/utc_fill_and_stroke_alpha_image.c
new file mode 100644 (file)
index 0000000..892ff11
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_and_stroke_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_and_stroke_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_and_stroke_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-and-stroke-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_and_stroke_alpha1");
+                       else
+                               dts_fail("utc_cairo_fill_and_stroke_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_and_stroke_gl.c b/TC/testcase/utc_fill_and_stroke_gl.c
new file mode 100644 (file)
index 0000000..57ca296
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_and_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_and_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_and_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-and-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_and_stroke1");
+                       else
+                               dts_fail("utc_cairo_fill_and_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_and_stroke_image.c b/TC/testcase/utc_fill_and_stroke_image.c
new file mode 100644 (file)
index 0000000..db74286
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_and_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_and_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_and_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-and-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_and_stroke1");
+                       else
+                               dts_fail("utc_cairo_fill_and_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_degenerate_sort_order_gl.c b/TC/testcase/utc_fill_degenerate_sort_order_gl.c
new file mode 100644 (file)
index 0000000..4851a9b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_degenerate_sort_order1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_degenerate_sort_order1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_degenerate_sort_order1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-degenerate-sort-order", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_degenerate_sort_order1");
+                       else
+                               dts_fail("utc_cairo_fill_degenerate_sort_order1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_degenerate_sort_order_image.c b/TC/testcase/utc_fill_degenerate_sort_order_image.c
new file mode 100644 (file)
index 0000000..7f34cef
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_degenerate_sort_order1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_degenerate_sort_order1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_degenerate_sort_order1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-degenerate-sort-order", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_degenerate_sort_order1");
+                       else
+                               dts_fail("utc_cairo_fill_degenerate_sort_order1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_disjoint_gl.c b/TC/testcase/utc_fill_disjoint_gl.c
new file mode 100644 (file)
index 0000000..ea7aab3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_disjoint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_disjoint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_disjoint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-disjoint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_disjoint1");
+                       else
+                               dts_fail("utc_cairo_fill_disjoint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_disjoint_image.c b/TC/testcase/utc_fill_disjoint_image.c
new file mode 100644 (file)
index 0000000..1f45b85
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_disjoint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_disjoint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_disjoint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-disjoint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_disjoint1");
+                       else
+                               dts_fail("utc_cairo_fill_disjoint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_empty_gl.c b/TC/testcase/utc_fill_empty_gl.c
new file mode 100644 (file)
index 0000000..ba81b14
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_empty1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_empty1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_empty1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-empty", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_empty1");
+                       else
+                               dts_fail("utc_cairo_fill_empty1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_empty_image.c b/TC/testcase/utc_fill_empty_image.c
new file mode 100644 (file)
index 0000000..d40c60e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_empty1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_empty1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_empty1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-empty", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_empty1");
+                       else
+                               dts_fail("utc_cairo_fill_empty1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_image_gl.c b/TC/testcase/utc_fill_image_gl.c
new file mode 100644 (file)
index 0000000..66184fd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_image1");
+                       else
+                               dts_fail("utc_cairo_fill_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_image_image.c b/TC/testcase/utc_fill_image_image.c
new file mode 100644 (file)
index 0000000..0cdf9b5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_image1");
+                       else
+                               dts_fail("utc_cairo_fill_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_missed_stop_gl.c b/TC/testcase/utc_fill_missed_stop_gl.c
new file mode 100644 (file)
index 0000000..456ea56
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_missed_stop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_missed_stop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_missed_stop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-missed-stop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_missed_stop1");
+                       else
+                               dts_fail("utc_cairo_fill_missed_stop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_missed_stop_image.c b/TC/testcase/utc_fill_missed_stop_image.c
new file mode 100644 (file)
index 0000000..6b9c70f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_missed_stop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_missed_stop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_missed_stop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-missed-stop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_missed_stop1");
+                       else
+                               dts_fail("utc_cairo_fill_missed_stop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_rule_gl.c b/TC/testcase/utc_fill_rule_gl.c
new file mode 100644 (file)
index 0000000..b5515a5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_rule1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_rule1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_rule1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-rule", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_rule1");
+                       else
+                               dts_fail("utc_cairo_fill_rule1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_fill_rule_image.c b/TC/testcase/utc_fill_rule_image.c
new file mode 100644 (file)
index 0000000..5c56a13
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_fill_rule1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_fill_rule1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_fill_rule1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite fill-rule", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_fill_rule1");
+                       else
+                               dts_fail("utc_cairo_fill_rule1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_filter_bilinear_extents_gl.c b/TC/testcase/utc_filter_bilinear_extents_gl.c
new file mode 100644 (file)
index 0000000..968b371
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_filter_bilinear_extents1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_filter_bilinear_extents1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_filter_bilinear_extents1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite filter-bilinear-extents", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_filter_bilinear_extents1");
+                       else
+                               dts_fail("utc_cairo_filter_bilinear_extents1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_filter_bilinear_extents_image.c b/TC/testcase/utc_filter_bilinear_extents_image.c
new file mode 100644 (file)
index 0000000..1f4df27
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_filter_bilinear_extents1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_filter_bilinear_extents1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_filter_bilinear_extents1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite filter-bilinear-extents", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_filter_bilinear_extents1");
+                       else
+                               dts_fail("utc_cairo_filter_bilinear_extents1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_filter_nearest_offset_gl.c b/TC/testcase/utc_filter_nearest_offset_gl.c
new file mode 100644 (file)
index 0000000..cccabea
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_filter_nearest_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_filter_nearest_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_filter_nearest_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite filter-nearest-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_filter_nearest_offset1");
+                       else
+                               dts_fail("utc_cairo_filter_nearest_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_filter_nearest_offset_image.c b/TC/testcase/utc_filter_nearest_offset_image.c
new file mode 100644 (file)
index 0000000..b4c1228
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_filter_nearest_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_filter_nearest_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_filter_nearest_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite filter-nearest-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_filter_nearest_offset1");
+                       else
+                               dts_fail("utc_cairo_filter_nearest_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_filter_nearest_transformed_gl.c b/TC/testcase/utc_filter_nearest_transformed_gl.c
new file mode 100644 (file)
index 0000000..63bf0fb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_filter_nearest_transformed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_filter_nearest_transformed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_filter_nearest_transformed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite filter-nearest-transformed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_filter_nearest_transformed1");
+                       else
+                               dts_fail("utc_cairo_filter_nearest_transformed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_filter_nearest_transformed_image.c b/TC/testcase/utc_filter_nearest_transformed_image.c
new file mode 100644 (file)
index 0000000..a012700
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_filter_nearest_transformed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_filter_nearest_transformed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_filter_nearest_transformed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite filter-nearest-transformed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_filter_nearest_transformed1");
+                       else
+                               dts_fail("utc_cairo_filter_nearest_transformed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_finer_grained_fallbacks_gl.c b/TC/testcase/utc_finer_grained_fallbacks_gl.c
new file mode 100644 (file)
index 0000000..f592982
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_finer_grained_fallbacks1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_finer_grained_fallbacks1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_finer_grained_fallbacks1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite finer-grained-fallbacks", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_finer_grained_fallbacks1");
+                       else
+                               dts_fail("utc_cairo_finer_grained_fallbacks1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_finer_grained_fallbacks_image.c b/TC/testcase/utc_finer_grained_fallbacks_image.c
new file mode 100644 (file)
index 0000000..3131041
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_finer_grained_fallbacks1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_finer_grained_fallbacks1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_finer_grained_fallbacks1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite finer-grained-fallbacks", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_finer_grained_fallbacks1");
+                       else
+                               dts_fail("utc_cairo_finer_grained_fallbacks1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_font_face_get_type_gl.c b/TC/testcase/utc_font_face_get_type_gl.c
new file mode 100644 (file)
index 0000000..6427939
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_font_face_get_type1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_font_face_get_type1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_font_face_get_type1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite font-face-get-type", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_font_face_get_type1");
+                       else
+                               dts_fail("utc_cairo_font_face_get_type1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_font_face_get_type_image.c b/TC/testcase/utc_font_face_get_type_image.c
new file mode 100644 (file)
index 0000000..d41ca83
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_font_face_get_type1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_font_face_get_type1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_font_face_get_type1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite font-face-get-type", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_font_face_get_type1");
+                       else
+                               dts_fail("utc_cairo_font_face_get_type1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_font_matrix_translation_gl.c b/TC/testcase/utc_font_matrix_translation_gl.c
new file mode 100644 (file)
index 0000000..c6ace7d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_font_matrix_translation1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_font_matrix_translation1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_font_matrix_translation1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite font-matrix-translation", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_font_matrix_translation1");
+                       else
+                               dts_fail("utc_cairo_font_matrix_translation1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_font_matrix_translation_image.c b/TC/testcase/utc_font_matrix_translation_image.c
new file mode 100644 (file)
index 0000000..46eb9ef
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_font_matrix_translation1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_font_matrix_translation1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_font_matrix_translation1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite font-matrix-translation", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_font_matrix_translation1");
+                       else
+                               dts_fail("utc_cairo_font_matrix_translation1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_font_options_gl.c b/TC/testcase/utc_font_options_gl.c
new file mode 100644 (file)
index 0000000..cabc5d3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_font_options1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_font_options1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_font_options1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite font-options", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_font_options1");
+                       else
+                               dts_fail("utc_cairo_font_options1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_font_options_image.c b/TC/testcase/utc_font_options_image.c
new file mode 100644 (file)
index 0000000..72e07e7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_font_options1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_font_options1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_font_options1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite font-options", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_font_options1");
+                       else
+                               dts_fail("utc_cairo_font_options1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_font_create_for_ft_face_gl.c b/TC/testcase/utc_ft_font_create_for_ft_face_gl.c
new file mode 100644 (file)
index 0000000..93993cd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_font_create_for_ft_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_font_create_for_ft_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_font_create_for_ft_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-font-create-for-ft-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_font_create_for_ft_face1");
+                       else
+                               dts_fail("utc_cairo_ft_font_create_for_ft_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_font_create_for_ft_face_image.c b/TC/testcase/utc_ft_font_create_for_ft_face_image.c
new file mode 100644 (file)
index 0000000..7810bcf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_font_create_for_ft_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_font_create_for_ft_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_font_create_for_ft_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-font-create-for-ft-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_font_create_for_ft_face1");
+                       else
+                               dts_fail("utc_cairo_ft_font_create_for_ft_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_show_glyphs_positioning_gl.c b/TC/testcase/utc_ft_show_glyphs_positioning_gl.c
new file mode 100644 (file)
index 0000000..d21fd1f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_show_glyphs_positioning1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_show_glyphs_positioning1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_show_glyphs_positioning1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-show-glyphs-positioning", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_show_glyphs_positioning1");
+                       else
+                               dts_fail("utc_cairo_ft_show_glyphs_positioning1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_show_glyphs_positioning_image.c b/TC/testcase/utc_ft_show_glyphs_positioning_image.c
new file mode 100644 (file)
index 0000000..baaa7a5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_show_glyphs_positioning1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_show_glyphs_positioning1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_show_glyphs_positioning1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-show-glyphs-positioning", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_show_glyphs_positioning1");
+                       else
+                               dts_fail("utc_cairo_ft_show_glyphs_positioning1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_show_glyphs_table_gl.c b/TC/testcase/utc_ft_show_glyphs_table_gl.c
new file mode 100644 (file)
index 0000000..6ca8fd6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_show_glyphs_table1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_show_glyphs_table1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_show_glyphs_table1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-show-glyphs-table", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_show_glyphs_table1");
+                       else
+                               dts_fail("utc_cairo_ft_show_glyphs_table1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_show_glyphs_table_image.c b/TC/testcase/utc_ft_show_glyphs_table_image.c
new file mode 100644 (file)
index 0000000..eb7e656
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_show_glyphs_table1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_show_glyphs_table1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_show_glyphs_table1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-show-glyphs-table", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_show_glyphs_table1");
+                       else
+                               dts_fail("utc_cairo_ft_show_glyphs_table1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_text_antialias_none_gl.c b/TC/testcase/utc_ft_text_antialias_none_gl.c
new file mode 100644 (file)
index 0000000..5a0e860
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_text_antialias_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_text_antialias_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_text_antialias_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-text-antialias-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_text_antialias_none1");
+                       else
+                               dts_fail("utc_cairo_ft_text_antialias_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_text_antialias_none_image.c b/TC/testcase/utc_ft_text_antialias_none_image.c
new file mode 100644 (file)
index 0000000..5c5fcf6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_text_antialias_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_text_antialias_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_text_antialias_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-text-antialias-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_text_antialias_none1");
+                       else
+                               dts_fail("utc_cairo_ft_text_antialias_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_text_vertical_layout_type1_gl.c b/TC/testcase/utc_ft_text_vertical_layout_type1_gl.c
new file mode 100644 (file)
index 0000000..c766881
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_text_vertical_layout_type11(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_text_vertical_layout_type11, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_text_vertical_layout_type11(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-text-vertical-layout-type1", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_text_vertical_layout_type11");
+                       else
+                               dts_fail("utc_cairo_ft_text_vertical_layout_type11");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_text_vertical_layout_type1_image.c b/TC/testcase/utc_ft_text_vertical_layout_type1_image.c
new file mode 100644 (file)
index 0000000..bb24f2e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_text_vertical_layout_type11(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_text_vertical_layout_type11, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_text_vertical_layout_type11(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-text-vertical-layout-type1", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_text_vertical_layout_type11");
+                       else
+                               dts_fail("utc_cairo_ft_text_vertical_layout_type11");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_text_vertical_layout_type3_gl.c b/TC/testcase/utc_ft_text_vertical_layout_type3_gl.c
new file mode 100644 (file)
index 0000000..b0bc7e5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_text_vertical_layout_type31(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_text_vertical_layout_type31, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_text_vertical_layout_type31(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-text-vertical-layout-type3", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_text_vertical_layout_type31");
+                       else
+                               dts_fail("utc_cairo_ft_text_vertical_layout_type31");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ft_text_vertical_layout_type3_image.c b/TC/testcase/utc_ft_text_vertical_layout_type3_image.c
new file mode 100644 (file)
index 0000000..ad55b52
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ft_text_vertical_layout_type31(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ft_text_vertical_layout_type31, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ft_text_vertical_layout_type31(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ft-text-vertical-layout-type3", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ft_text_vertical_layout_type31");
+                       else
+                               dts_fail("utc_cairo_ft_text_vertical_layout_type31");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_and_set_gl.c b/TC/testcase/utc_get_and_set_gl.c
new file mode 100644 (file)
index 0000000..005c0e3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_and_set1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_and_set1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_and_set1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-and-set", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_and_set1");
+                       else
+                               dts_fail("utc_cairo_get_and_set1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_and_set_image.c b/TC/testcase/utc_get_and_set_image.c
new file mode 100644 (file)
index 0000000..b90e953
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_and_set1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_and_set1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_and_set1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-and-set", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_and_set1");
+                       else
+                               dts_fail("utc_cairo_get_and_set1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_clip_gl.c b/TC/testcase/utc_get_clip_gl.c
new file mode 100644 (file)
index 0000000..6f43b91
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_clip1");
+                       else
+                               dts_fail("utc_cairo_get_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_clip_image.c b/TC/testcase/utc_get_clip_image.c
new file mode 100644 (file)
index 0000000..80944d8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_clip1");
+                       else
+                               dts_fail("utc_cairo_get_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_group_target_gl.c b/TC/testcase/utc_get_group_target_gl.c
new file mode 100644 (file)
index 0000000..6a36e26
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_group_target1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_group_target1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_group_target1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-group-target", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_group_target1");
+                       else
+                               dts_fail("utc_cairo_get_group_target1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_group_target_image.c b/TC/testcase/utc_get_group_target_image.c
new file mode 100644 (file)
index 0000000..5568aa2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_group_target1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_group_target1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_group_target1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-group-target", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_group_target1");
+                       else
+                               dts_fail("utc_cairo_get_group_target1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_path_extents_gl.c b/TC/testcase/utc_get_path_extents_gl.c
new file mode 100644 (file)
index 0000000..4b22685
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_path_extents1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_path_extents1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_path_extents1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-path-extents", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_path_extents1");
+                       else
+                               dts_fail("utc_cairo_get_path_extents1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_path_extents_image.c b/TC/testcase/utc_get_path_extents_image.c
new file mode 100644 (file)
index 0000000..f193f82
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_path_extents1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_path_extents1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_path_extents1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-path-extents", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_path_extents1");
+                       else
+                               dts_fail("utc_cairo_get_path_extents1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_xrender_format_gl.c b/TC/testcase/utc_get_xrender_format_gl.c
new file mode 100644 (file)
index 0000000..426c024
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_xrender_format1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_xrender_format1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_xrender_format1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-xrender-format", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_xrender_format1");
+                       else
+                               dts_fail("utc_cairo_get_xrender_format1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_get_xrender_format_image.c b/TC/testcase/utc_get_xrender_format_image.c
new file mode 100644 (file)
index 0000000..c020e1c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_get_xrender_format1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_get_xrender_format1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_get_xrender_format1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite get-xrender-format", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_get_xrender_format1");
+                       else
+                               dts_fail("utc_cairo_get_xrender_format1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gl_surface_source_gl.c b/TC/testcase/utc_gl_surface_source_gl.c
new file mode 100644 (file)
index 0000000..da35e83
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gl_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gl_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gl_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gl-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gl_surface_source1");
+                       else
+                               dts_fail("utc_cairo_gl_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gl_surface_source_image.c b/TC/testcase/utc_gl_surface_source_image.c
new file mode 100644 (file)
index 0000000..ca99091
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gl_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gl_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gl_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gl-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gl_surface_source1");
+                       else
+                               dts_fail("utc_cairo_gl_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_glyph_cache_pressure_gl.c b/TC/testcase/utc_glyph_cache_pressure_gl.c
new file mode 100644 (file)
index 0000000..8f4cbeb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_glyph_cache_pressure1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_glyph_cache_pressure1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_glyph_cache_pressure1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite glyph-cache-pressure", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_glyph_cache_pressure1");
+                       else
+                               dts_fail("utc_cairo_glyph_cache_pressure1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_glyph_cache_pressure_image.c b/TC/testcase/utc_glyph_cache_pressure_image.c
new file mode 100644 (file)
index 0000000..2b4c1b8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_glyph_cache_pressure1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_glyph_cache_pressure1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_glyph_cache_pressure1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite glyph-cache-pressure", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_glyph_cache_pressure1");
+                       else
+                               dts_fail("utc_cairo_glyph_cache_pressure1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_alpha_gl.c b/TC/testcase/utc_gradient_alpha_gl.c
new file mode 100644 (file)
index 0000000..de5fb23
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_alpha1");
+                       else
+                               dts_fail("utc_cairo_gradient_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_alpha_image.c b/TC/testcase/utc_gradient_alpha_image.c
new file mode 100644 (file)
index 0000000..5c8c4a1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_alpha1");
+                       else
+                               dts_fail("utc_cairo_gradient_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_constant_alpha_gl.c b/TC/testcase/utc_gradient_constant_alpha_gl.c
new file mode 100644 (file)
index 0000000..c75e542
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_constant_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_constant_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_constant_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-constant-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_constant_alpha1");
+                       else
+                               dts_fail("utc_cairo_gradient_constant_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_constant_alpha_image.c b/TC/testcase/utc_gradient_constant_alpha_image.c
new file mode 100644 (file)
index 0000000..3d5ef0a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_constant_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_constant_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_constant_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-constant-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_constant_alpha1");
+                       else
+                               dts_fail("utc_cairo_gradient_constant_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_zero_stops_gl.c b/TC/testcase/utc_gradient_zero_stops_gl.c
new file mode 100644 (file)
index 0000000..1f805a1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_zero_stops1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_zero_stops1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_zero_stops1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-zero-stops", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_zero_stops1");
+                       else
+                               dts_fail("utc_cairo_gradient_zero_stops1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_zero_stops_image.c b/TC/testcase/utc_gradient_zero_stops_image.c
new file mode 100644 (file)
index 0000000..a22f627
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_zero_stops1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_zero_stops1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_zero_stops1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-zero-stops", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_zero_stops1");
+                       else
+                               dts_fail("utc_cairo_gradient_zero_stops1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_zero_stops_mask_gl.c b/TC/testcase/utc_gradient_zero_stops_mask_gl.c
new file mode 100644 (file)
index 0000000..480ff24
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_zero_stops_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_zero_stops_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_zero_stops_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-zero-stops-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_zero_stops_mask1");
+                       else
+                               dts_fail("utc_cairo_gradient_zero_stops_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_gradient_zero_stops_mask_image.c b/TC/testcase/utc_gradient_zero_stops_mask_image.c
new file mode 100644 (file)
index 0000000..7af9096
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_gradient_zero_stops_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_gradient_zero_stops_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_gradient_zero_stops_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite gradient-zero-stops-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_gradient_zero_stops_mask1");
+                       else
+                               dts_fail("utc_cairo_gradient_zero_stops_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_clip_gl.c b/TC/testcase/utc_group_clip_gl.c
new file mode 100644 (file)
index 0000000..a5c34cf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_clip1");
+                       else
+                               dts_fail("utc_cairo_group_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_clip_image.c b/TC/testcase/utc_group_clip_image.c
new file mode 100644 (file)
index 0000000..35c4a06
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_clip1");
+                       else
+                               dts_fail("utc_cairo_group_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_paint_gl.c b/TC/testcase/utc_group_paint_gl.c
new file mode 100644 (file)
index 0000000..b7a9f42
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_paint1");
+                       else
+                               dts_fail("utc_cairo_group_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_paint_image.c b/TC/testcase/utc_group_paint_image.c
new file mode 100644 (file)
index 0000000..ec23101
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_paint1");
+                       else
+                               dts_fail("utc_cairo_group_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_state_gl.c b/TC/testcase/utc_group_state_gl.c
new file mode 100644 (file)
index 0000000..3089363
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_state1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_state1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_state1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-state", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_state1");
+                       else
+                               dts_fail("utc_cairo_group_state1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_state_image.c b/TC/testcase/utc_group_state_image.c
new file mode 100644 (file)
index 0000000..43e0b6c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_state1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_state1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_state1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-state", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_state1");
+                       else
+                               dts_fail("utc_cairo_group_state1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_unaligned_gl.c b/TC/testcase/utc_group_unaligned_gl.c
new file mode 100644 (file)
index 0000000..e167ec7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_unaligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_unaligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_unaligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-unaligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_unaligned1");
+                       else
+                               dts_fail("utc_cairo_group_unaligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_group_unaligned_image.c b/TC/testcase/utc_group_unaligned_image.c
new file mode 100644 (file)
index 0000000..f04d041
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_group_unaligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_group_unaligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_group_unaligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite group-unaligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_group_unaligned1");
+                       else
+                               dts_fail("utc_cairo_group_unaligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_half_coverage_rectangles_gl.c b/TC/testcase/utc_half_coverage_rectangles_gl.c
new file mode 100644 (file)
index 0000000..cef97e9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_half_coverage_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_half_coverage_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_half_coverage_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite half-coverage-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_half_coverage_rectangles1");
+                       else
+                               dts_fail("utc_cairo_half_coverage_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_half_coverage_rectangles_image.c b/TC/testcase/utc_half_coverage_rectangles_image.c
new file mode 100644 (file)
index 0000000..d16026f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_half_coverage_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_half_coverage_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_half_coverage_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite half-coverage-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_half_coverage_rectangles1");
+                       else
+                               dts_fail("utc_cairo_half_coverage_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_half_coverage_triangles_gl.c b/TC/testcase/utc_half_coverage_triangles_gl.c
new file mode 100644 (file)
index 0000000..7dffc85
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_half_coverage_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_half_coverage_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_half_coverage_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite half-coverage-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_half_coverage_triangles1");
+                       else
+                               dts_fail("utc_cairo_half_coverage_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_half_coverage_triangles_image.c b/TC/testcase/utc_half_coverage_triangles_image.c
new file mode 100644 (file)
index 0000000..7384acf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_half_coverage_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_half_coverage_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_half_coverage_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite half-coverage-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_half_coverage_triangles1");
+                       else
+                               dts_fail("utc_cairo_half_coverage_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_halo_gl.c b/TC/testcase/utc_halo_gl.c
new file mode 100644 (file)
index 0000000..b35283e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_halo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_halo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_halo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite halo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_halo1");
+                       else
+                               dts_fail("utc_cairo_halo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_halo_image.c b/TC/testcase/utc_halo_image.c
new file mode 100644 (file)
index 0000000..4fa14a2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_halo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_halo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_halo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite halo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_halo1");
+                       else
+                               dts_fail("utc_cairo_halo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_halo_transform_gl.c b/TC/testcase/utc_halo_transform_gl.c
new file mode 100644 (file)
index 0000000..6ad9084
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_halo_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_halo_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_halo_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite halo-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_halo_transform1");
+                       else
+                               dts_fail("utc_cairo_halo_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_halo_transform_image.c b/TC/testcase/utc_halo_transform_image.c
new file mode 100644 (file)
index 0000000..a893ed5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_halo_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_halo_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_halo_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite halo-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_halo_transform1");
+                       else
+                               dts_fail("utc_cairo_halo_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_hatchings_gl.c b/TC/testcase/utc_hatchings_gl.c
new file mode 100644 (file)
index 0000000..b36cca6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_hatchings1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_hatchings1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_hatchings1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite hatchings", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_hatchings1");
+                       else
+                               dts_fail("utc_cairo_hatchings1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_hatchings_image.c b/TC/testcase/utc_hatchings_image.c
new file mode 100644 (file)
index 0000000..183fdd2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_hatchings1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_hatchings1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_hatchings1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite hatchings", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_hatchings1");
+                       else
+                               dts_fail("utc_cairo_hatchings1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_horizontal_clip_gl.c b/TC/testcase/utc_horizontal_clip_gl.c
new file mode 100644 (file)
index 0000000..9ed6848
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_horizontal_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_horizontal_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_horizontal_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite horizontal-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_horizontal_clip1");
+                       else
+                               dts_fail("utc_cairo_horizontal_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_horizontal_clip_image.c b/TC/testcase/utc_horizontal_clip_image.c
new file mode 100644 (file)
index 0000000..4653cae
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_horizontal_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_horizontal_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_horizontal_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite horizontal-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_horizontal_clip1");
+                       else
+                               dts_fail("utc_cairo_horizontal_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_huge_linear_gl.c b/TC/testcase/utc_huge_linear_gl.c
new file mode 100644 (file)
index 0000000..0eed646
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_huge_linear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_huge_linear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_huge_linear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite huge-linear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_huge_linear1");
+                       else
+                               dts_fail("utc_cairo_huge_linear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_huge_linear_image.c b/TC/testcase/utc_huge_linear_image.c
new file mode 100644 (file)
index 0000000..47b813a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_huge_linear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_huge_linear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_huge_linear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite huge-linear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_huge_linear1");
+                       else
+                               dts_fail("utc_cairo_huge_linear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_huge_radial_gl.c b/TC/testcase/utc_huge_radial_gl.c
new file mode 100644 (file)
index 0000000..8ca59ed
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_huge_radial1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_huge_radial1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_huge_radial1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite huge-radial", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_huge_radial1");
+                       else
+                               dts_fail("utc_cairo_huge_radial1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_huge_radial_image.c b/TC/testcase/utc_huge_radial_image.c
new file mode 100644 (file)
index 0000000..cc2f898
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_huge_radial1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_huge_radial1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_huge_radial1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite huge-radial", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_huge_radial1");
+                       else
+                               dts_fail("utc_cairo_huge_radial1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_image_bug_710072_aligned_gl.c b/TC/testcase/utc_image_bug_710072_aligned_gl.c
new file mode 100644 (file)
index 0000000..5319bf5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_image_bug_710072_aligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_image_bug_710072_aligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_image_bug_710072_aligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite image-bug-710072-aligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_image_bug_710072_aligned1");
+                       else
+                               dts_fail("utc_cairo_image_bug_710072_aligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_image_bug_710072_aligned_image.c b/TC/testcase/utc_image_bug_710072_aligned_image.c
new file mode 100644 (file)
index 0000000..0fc8fae
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_image_bug_710072_aligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_image_bug_710072_aligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_image_bug_710072_aligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite image-bug-710072-aligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_image_bug_710072_aligned1");
+                       else
+                               dts_fail("utc_cairo_image_bug_710072_aligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_image_bug_710072_unaligned_gl.c b/TC/testcase/utc_image_bug_710072_unaligned_gl.c
new file mode 100644 (file)
index 0000000..e0d8e95
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_image_bug_710072_unaligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_image_bug_710072_unaligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_image_bug_710072_unaligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite image-bug-710072-unaligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_image_bug_710072_unaligned1");
+                       else
+                               dts_fail("utc_cairo_image_bug_710072_unaligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_image_bug_710072_unaligned_image.c b/TC/testcase/utc_image_bug_710072_unaligned_image.c
new file mode 100644 (file)
index 0000000..2b160e2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_image_bug_710072_unaligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_image_bug_710072_unaligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_image_bug_710072_unaligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite image-bug-710072-unaligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_image_bug_710072_unaligned1");
+                       else
+                               dts_fail("utc_cairo_image_bug_710072_unaligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_image_surface_source_gl.c b/TC/testcase/utc_image_surface_source_gl.c
new file mode 100644 (file)
index 0000000..2888a33
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_image_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_image_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_image_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite image-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_image_surface_source1");
+                       else
+                               dts_fail("utc_cairo_image_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_image_surface_source_image.c b/TC/testcase/utc_image_surface_source_image.c
new file mode 100644 (file)
index 0000000..c7f1a70
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_image_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_image_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_image_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite image-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_image_surface_source1");
+                       else
+                               dts_fail("utc_cairo_image_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_implicit_close_gl.c b/TC/testcase/utc_implicit_close_gl.c
new file mode 100644 (file)
index 0000000..9686c2f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_implicit_close1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_implicit_close1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_implicit_close1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite implicit-close", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_implicit_close1");
+                       else
+                               dts_fail("utc_cairo_implicit_close1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_implicit_close_image.c b/TC/testcase/utc_implicit_close_image.c
new file mode 100644 (file)
index 0000000..15e4067
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_implicit_close1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_implicit_close1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_implicit_close1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite implicit-close", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_implicit_close1");
+                       else
+                               dts_fail("utc_cairo_implicit_close1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_in_fill_empty_trapezoid_gl.c b/TC/testcase/utc_in_fill_empty_trapezoid_gl.c
new file mode 100644 (file)
index 0000000..ec810c4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_in_fill_empty_trapezoid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_in_fill_empty_trapezoid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_in_fill_empty_trapezoid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite in-fill-empty-trapezoid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_in_fill_empty_trapezoid1");
+                       else
+                               dts_fail("utc_cairo_in_fill_empty_trapezoid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_in_fill_empty_trapezoid_image.c b/TC/testcase/utc_in_fill_empty_trapezoid_image.c
new file mode 100644 (file)
index 0000000..8b18923
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_in_fill_empty_trapezoid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_in_fill_empty_trapezoid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_in_fill_empty_trapezoid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite in-fill-empty-trapezoid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_in_fill_empty_trapezoid1");
+                       else
+                               dts_fail("utc_cairo_in_fill_empty_trapezoid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_in_fill_trapezoid_gl.c b/TC/testcase/utc_in_fill_trapezoid_gl.c
new file mode 100644 (file)
index 0000000..df46565
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_in_fill_trapezoid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_in_fill_trapezoid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_in_fill_trapezoid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite in-fill-trapezoid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_in_fill_trapezoid1");
+                       else
+                               dts_fail("utc_cairo_in_fill_trapezoid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_in_fill_trapezoid_image.c b/TC/testcase/utc_in_fill_trapezoid_image.c
new file mode 100644 (file)
index 0000000..d95f13e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_in_fill_trapezoid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_in_fill_trapezoid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_in_fill_trapezoid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite in-fill-trapezoid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_in_fill_trapezoid1");
+                       else
+                               dts_fail("utc_cairo_in_fill_trapezoid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_infinite_join_gl.c b/TC/testcase/utc_infinite_join_gl.c
new file mode 100644 (file)
index 0000000..13555fd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_infinite_join1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_infinite_join1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_infinite_join1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite infinite-join", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_infinite_join1");
+                       else
+                               dts_fail("utc_cairo_infinite_join1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_infinite_join_image.c b/TC/testcase/utc_infinite_join_image.c
new file mode 100644 (file)
index 0000000..1624038
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_infinite_join1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_infinite_join1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_infinite_join1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite infinite-join", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_infinite_join1");
+                       else
+                               dts_fail("utc_cairo_infinite_join1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_invalid_matrix_gl.c b/TC/testcase/utc_invalid_matrix_gl.c
new file mode 100644 (file)
index 0000000..cb52fec
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_invalid_matrix1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_invalid_matrix1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_invalid_matrix1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite invalid-matrix", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_invalid_matrix1");
+                       else
+                               dts_fail("utc_cairo_invalid_matrix1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_invalid_matrix_image.c b/TC/testcase/utc_invalid_matrix_image.c
new file mode 100644 (file)
index 0000000..1bd7580
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_invalid_matrix1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_invalid_matrix1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_invalid_matrix1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite invalid-matrix", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_invalid_matrix1");
+                       else
+                               dts_fail("utc_cairo_invalid_matrix1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_inverse_text_gl.c b/TC/testcase/utc_inverse_text_gl.c
new file mode 100644 (file)
index 0000000..c4baf2c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_inverse_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_inverse_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_inverse_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite inverse-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_inverse_text1");
+                       else
+                               dts_fail("utc_cairo_inverse_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_inverse_text_image.c b/TC/testcase/utc_inverse_text_image.c
new file mode 100644 (file)
index 0000000..ad65930
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_inverse_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_inverse_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_inverse_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite inverse-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_inverse_text1");
+                       else
+                               dts_fail("utc_cairo_inverse_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_inverted_clip_gl.c b/TC/testcase/utc_inverted_clip_gl.c
new file mode 100644 (file)
index 0000000..ea01ea1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_inverted_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_inverted_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_inverted_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite inverted-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_inverted_clip1");
+                       else
+                               dts_fail("utc_cairo_inverted_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_inverted_clip_image.c b/TC/testcase/utc_inverted_clip_image.c
new file mode 100644 (file)
index 0000000..2957392
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_inverted_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_inverted_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_inverted_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite inverted-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_inverted_clip1");
+                       else
+                               dts_fail("utc_cairo_inverted_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_gl.c b/TC/testcase/utc_joins_gl.c
new file mode 100644 (file)
index 0000000..e974093
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins1");
+                       else
+                               dts_fail("utc_cairo_joins1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_image.c b/TC/testcase/utc_joins_image.c
new file mode 100644 (file)
index 0000000..3055a60
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins1");
+                       else
+                               dts_fail("utc_cairo_joins1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_loop_gl.c b/TC/testcase/utc_joins_loop_gl.c
new file mode 100644 (file)
index 0000000..bf26abe
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins_loop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins_loop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins_loop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins-loop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins_loop1");
+                       else
+                               dts_fail("utc_cairo_joins_loop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_loop_image.c b/TC/testcase/utc_joins_loop_image.c
new file mode 100644 (file)
index 0000000..8abf973
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins_loop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins_loop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins_loop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins-loop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins_loop1");
+                       else
+                               dts_fail("utc_cairo_joins_loop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_retrace_gl.c b/TC/testcase/utc_joins_retrace_gl.c
new file mode 100644 (file)
index 0000000..cbaa15d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins_retrace1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins_retrace1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins_retrace1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins-retrace", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins_retrace1");
+                       else
+                               dts_fail("utc_cairo_joins_retrace1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_retrace_image.c b/TC/testcase/utc_joins_retrace_image.c
new file mode 100644 (file)
index 0000000..1ccd5a8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins_retrace1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins_retrace1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins_retrace1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins-retrace", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins_retrace1");
+                       else
+                               dts_fail("utc_cairo_joins_retrace1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_star_gl.c b/TC/testcase/utc_joins_star_gl.c
new file mode 100644 (file)
index 0000000..f3acbe3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins_star1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins_star1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins_star1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins-star", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins_star1");
+                       else
+                               dts_fail("utc_cairo_joins_star1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_joins_star_image.c b/TC/testcase/utc_joins_star_image.c
new file mode 100644 (file)
index 0000000..a54c282
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_joins_star1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_joins_star1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_joins_star1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite joins-star", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_joins_star1");
+                       else
+                               dts_fail("utc_cairo_joins_star1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_clip_gl.c b/TC/testcase/utc_large_clip_gl.c
new file mode 100644 (file)
index 0000000..6584e2f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_clip1");
+                       else
+                               dts_fail("utc_cairo_large_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_clip_image.c b/TC/testcase/utc_large_clip_image.c
new file mode 100644 (file)
index 0000000..f08a666
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_clip1");
+                       else
+                               dts_fail("utc_cairo_large_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_font_gl.c b/TC/testcase/utc_large_font_gl.c
new file mode 100644 (file)
index 0000000..08b622f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_font1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_font1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_font1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-font", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_font1");
+                       else
+                               dts_fail("utc_cairo_large_font1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_font_image.c b/TC/testcase/utc_large_font_image.c
new file mode 100644 (file)
index 0000000..7804d97
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_font1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_font1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_font1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-font", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_font1");
+                       else
+                               dts_fail("utc_cairo_large_font1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_source_gl.c b/TC/testcase/utc_large_source_gl.c
new file mode 100644 (file)
index 0000000..76c99f0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_source1");
+                       else
+                               dts_fail("utc_cairo_large_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_source_image.c b/TC/testcase/utc_large_source_image.c
new file mode 100644 (file)
index 0000000..4b2e51b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_source1");
+                       else
+                               dts_fail("utc_cairo_large_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_source_roi_gl.c b/TC/testcase/utc_large_source_roi_gl.c
new file mode 100644 (file)
index 0000000..09e2d63
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_source_roi1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_source_roi1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_source_roi1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-source-roi", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_source_roi1");
+                       else
+                               dts_fail("utc_cairo_large_source_roi1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_source_roi_image.c b/TC/testcase/utc_large_source_roi_image.c
new file mode 100644 (file)
index 0000000..0256e55
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_source_roi1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_source_roi1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_source_roi1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-source-roi", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_source_roi1");
+                       else
+                               dts_fail("utc_cairo_large_source_roi1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_twin_antialias_mixed_gl.c b/TC/testcase/utc_large_twin_antialias_mixed_gl.c
new file mode 100644 (file)
index 0000000..bb6a692
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_twin_antialias_mixed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_twin_antialias_mixed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_twin_antialias_mixed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-twin-antialias-mixed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_twin_antialias_mixed1");
+                       else
+                               dts_fail("utc_cairo_large_twin_antialias_mixed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_large_twin_antialias_mixed_image.c b/TC/testcase/utc_large_twin_antialias_mixed_image.c
new file mode 100644 (file)
index 0000000..60b5fb1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_large_twin_antialias_mixed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_large_twin_antialias_mixed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_large_twin_antialias_mixed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite large-twin-antialias-mixed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_large_twin_antialias_mixed1");
+                       else
+                               dts_fail("utc_cairo_large_twin_antialias_mixed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_dash_gl.c b/TC/testcase/utc_leaky_dash_gl.c
new file mode 100644 (file)
index 0000000..e8dd210
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_dash1");
+                       else
+                               dts_fail("utc_cairo_leaky_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_dash_image.c b/TC/testcase/utc_leaky_dash_image.c
new file mode 100644 (file)
index 0000000..5ca6082
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_dash1");
+                       else
+                               dts_fail("utc_cairo_leaky_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_dashed_rectangle_gl.c b/TC/testcase/utc_leaky_dashed_rectangle_gl.c
new file mode 100644 (file)
index 0000000..678fb59
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_dashed_rectangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_dashed_rectangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_dashed_rectangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-dashed-rectangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_dashed_rectangle1");
+                       else
+                               dts_fail("utc_cairo_leaky_dashed_rectangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_dashed_rectangle_image.c b/TC/testcase/utc_leaky_dashed_rectangle_image.c
new file mode 100644 (file)
index 0000000..c1da47b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_dashed_rectangle1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_dashed_rectangle1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_dashed_rectangle1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-dashed-rectangle", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_dashed_rectangle1");
+                       else
+                               dts_fail("utc_cairo_leaky_dashed_rectangle1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_dashed_stroke_gl.c b/TC/testcase/utc_leaky_dashed_stroke_gl.c
new file mode 100644 (file)
index 0000000..5901b16
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_dashed_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_dashed_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_dashed_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-dashed-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_dashed_stroke1");
+                       else
+                               dts_fail("utc_cairo_leaky_dashed_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_dashed_stroke_image.c b/TC/testcase/utc_leaky_dashed_stroke_image.c
new file mode 100644 (file)
index 0000000..950e05f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_dashed_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_dashed_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_dashed_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-dashed-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_dashed_stroke1");
+                       else
+                               dts_fail("utc_cairo_leaky_dashed_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_polygon_gl.c b/TC/testcase/utc_leaky_polygon_gl.c
new file mode 100644 (file)
index 0000000..e7051f7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_polygon1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_polygon1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_polygon1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-polygon", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_polygon1");
+                       else
+                               dts_fail("utc_cairo_leaky_polygon1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_leaky_polygon_image.c b/TC/testcase/utc_leaky_polygon_image.c
new file mode 100644 (file)
index 0000000..63e601c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_leaky_polygon1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_leaky_polygon1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_leaky_polygon1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite leaky-polygon", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_leaky_polygon1");
+                       else
+                               dts_fail("utc_cairo_leaky_polygon1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_gl.c b/TC/testcase/utc_line_width_gl.c
new file mode 100644 (file)
index 0000000..aefddd5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width1");
+                       else
+                               dts_fail("utc_cairo_line_width1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_image.c b/TC/testcase/utc_line_width_image.c
new file mode 100644 (file)
index 0000000..2dde797
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width1");
+                       else
+                               dts_fail("utc_cairo_line_width1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_dashed_gl.c b/TC/testcase/utc_line_width_large_overlap_dashed_gl.c
new file mode 100644 (file)
index 0000000..415e3cf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_dashed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_dashed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_dashed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-dashed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_dashed1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_dashed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_dashed_image.c b/TC/testcase/utc_line_width_large_overlap_dashed_image.c
new file mode 100644 (file)
index 0000000..1091d1a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_dashed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_dashed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_dashed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-dashed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_dashed1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_dashed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_flipped_gl.c b/TC/testcase/utc_line_width_large_overlap_flipped_gl.c
new file mode 100644 (file)
index 0000000..f2e3d2b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_flipped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_flipped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_flipped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-flipped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_flipped1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_flipped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_flipped_image.c b/TC/testcase/utc_line_width_large_overlap_flipped_image.c
new file mode 100644 (file)
index 0000000..4e662ce
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_flipped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_flipped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_flipped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-flipped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_flipped1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_flipped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_flopped_gl.c b/TC/testcase/utc_line_width_large_overlap_flopped_gl.c
new file mode 100644 (file)
index 0000000..b0ead48
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_flopped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_flopped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_flopped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-flopped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_flopped1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_flopped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_flopped_image.c b/TC/testcase/utc_line_width_large_overlap_flopped_image.c
new file mode 100644 (file)
index 0000000..9b9d74f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_flopped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_flopped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_flopped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-flopped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_flopped1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_flopped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_gl.c b/TC/testcase/utc_line_width_large_overlap_gl.c
new file mode 100644 (file)
index 0000000..9d7309d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_image.c b/TC/testcase/utc_line_width_large_overlap_image.c
new file mode 100644 (file)
index 0000000..8efea2c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_offset_gl.c b/TC/testcase/utc_line_width_large_overlap_offset_gl.c
new file mode 100644 (file)
index 0000000..4d3bbbd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_offset1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_offset_image.c b/TC/testcase/utc_line_width_large_overlap_offset_image.c
new file mode 100644 (file)
index 0000000..e220b98
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_offset1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_rotated_gl.c b/TC/testcase/utc_line_width_large_overlap_rotated_gl.c
new file mode 100644 (file)
index 0000000..c9a1a0d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_rotated1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_rotated1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_rotated1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-rotated", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_rotated1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_rotated1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_large_overlap_rotated_image.c b/TC/testcase/utc_line_width_large_overlap_rotated_image.c
new file mode 100644 (file)
index 0000000..ea7ae29
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_large_overlap_rotated1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_large_overlap_rotated1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_large_overlap_rotated1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-large-overlap-rotated", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_large_overlap_rotated1");
+                       else
+                               dts_fail("utc_cairo_line_width_large_overlap_rotated1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_dashed_gl.c b/TC/testcase/utc_line_width_overlap_dashed_gl.c
new file mode 100644 (file)
index 0000000..0e991e1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_dashed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_dashed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_dashed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-dashed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_dashed1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_dashed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_dashed_image.c b/TC/testcase/utc_line_width_overlap_dashed_image.c
new file mode 100644 (file)
index 0000000..d9780ad
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_dashed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_dashed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_dashed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-dashed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_dashed1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_dashed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_flipped_gl.c b/TC/testcase/utc_line_width_overlap_flipped_gl.c
new file mode 100644 (file)
index 0000000..f0edb4d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_flipped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_flipped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_flipped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-flipped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_flipped1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_flipped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_flipped_image.c b/TC/testcase/utc_line_width_overlap_flipped_image.c
new file mode 100644 (file)
index 0000000..2149491
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_flipped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_flipped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_flipped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-flipped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_flipped1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_flipped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_flopped_gl.c b/TC/testcase/utc_line_width_overlap_flopped_gl.c
new file mode 100644 (file)
index 0000000..7c26af5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_flopped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_flopped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_flopped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-flopped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_flopped1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_flopped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_flopped_image.c b/TC/testcase/utc_line_width_overlap_flopped_image.c
new file mode 100644 (file)
index 0000000..fafeccb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_flopped1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_flopped1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_flopped1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-flopped", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_flopped1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_flopped1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_gl.c b/TC/testcase/utc_line_width_overlap_gl.c
new file mode 100644 (file)
index 0000000..6471563
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_image.c b/TC/testcase/utc_line_width_overlap_image.c
new file mode 100644 (file)
index 0000000..2ff9968
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_offset_gl.c b/TC/testcase/utc_line_width_overlap_offset_gl.c
new file mode 100644 (file)
index 0000000..e0ff2c5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_offset1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_offset_image.c b/TC/testcase/utc_line_width_overlap_offset_image.c
new file mode 100644 (file)
index 0000000..c3c87b8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_offset1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_rotated_gl.c b/TC/testcase/utc_line_width_overlap_rotated_gl.c
new file mode 100644 (file)
index 0000000..d3002ea
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_rotated1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_rotated1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_rotated1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-rotated", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_rotated1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_rotated1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_overlap_rotated_image.c b/TC/testcase/utc_line_width_overlap_rotated_image.c
new file mode 100644 (file)
index 0000000..96475a7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_overlap_rotated1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_overlap_rotated1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_overlap_rotated1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-overlap-rotated", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_overlap_rotated1");
+                       else
+                               dts_fail("utc_cairo_line_width_overlap_rotated1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_scale_gl.c b/TC/testcase/utc_line_width_scale_gl.c
new file mode 100644 (file)
index 0000000..862a382
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_scale1");
+                       else
+                               dts_fail("utc_cairo_line_width_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_scale_image.c b/TC/testcase/utc_line_width_scale_image.c
new file mode 100644 (file)
index 0000000..eb9b524
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_scale1");
+                       else
+                               dts_fail("utc_cairo_line_width_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_tolerance_gl.c b/TC/testcase/utc_line_width_tolerance_gl.c
new file mode 100644 (file)
index 0000000..fa298ad
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_tolerance1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_tolerance1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_tolerance1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-tolerance", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_tolerance1");
+                       else
+                               dts_fail("utc_cairo_line_width_tolerance1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_tolerance_image.c b/TC/testcase/utc_line_width_tolerance_image.c
new file mode 100644 (file)
index 0000000..f8fa55c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_tolerance1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_tolerance1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_tolerance1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-tolerance", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_tolerance1");
+                       else
+                               dts_fail("utc_cairo_line_width_tolerance1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_zero_gl.c b/TC/testcase/utc_line_width_zero_gl.c
new file mode 100644 (file)
index 0000000..5342509
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_zero1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_zero1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_zero1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-zero", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_zero1");
+                       else
+                               dts_fail("utc_cairo_line_width_zero1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_line_width_zero_image.c b/TC/testcase/utc_line_width_zero_image.c
new file mode 100644 (file)
index 0000000..b281e4f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_line_width_zero1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_line_width_zero1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_line_width_zero1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite line-width-zero", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_line_width_zero1");
+                       else
+                               dts_fail("utc_cairo_line_width_zero1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_extend_gl.c b/TC/testcase/utc_linear_gradient_extend_gl.c
new file mode 100644 (file)
index 0000000..73bd18d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_extend1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_extend1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_extend1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-extend", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_extend1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_extend1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_extend_image.c b/TC/testcase/utc_linear_gradient_extend_image.c
new file mode 100644 (file)
index 0000000..4b9bef4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_extend1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_extend1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_extend1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-extend", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_extend1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_extend1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_gl.c b/TC/testcase/utc_linear_gradient_gl.c
new file mode 100644 (file)
index 0000000..c7a3920
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_image.c b/TC/testcase/utc_linear_gradient_image.c
new file mode 100644 (file)
index 0000000..75b9293
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_large_gl.c b/TC/testcase/utc_linear_gradient_large_gl.c
new file mode 100644 (file)
index 0000000..367d678
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_large1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_large1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_large1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-large", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_large1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_large1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_large_image.c b/TC/testcase/utc_linear_gradient_large_image.c
new file mode 100644 (file)
index 0000000..eed480f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_large1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_large1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_large1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-large", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_large1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_large1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_one_stop_gl.c b/TC/testcase/utc_linear_gradient_one_stop_gl.c
new file mode 100644 (file)
index 0000000..50d1763
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_one_stop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_one_stop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_one_stop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-one-stop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_one_stop1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_one_stop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_one_stop_image.c b/TC/testcase/utc_linear_gradient_one_stop_image.c
new file mode 100644 (file)
index 0000000..920576d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_one_stop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_one_stop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_one_stop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-one-stop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_one_stop1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_one_stop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_reflect_gl.c b/TC/testcase/utc_linear_gradient_reflect_gl.c
new file mode 100644 (file)
index 0000000..559a303
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_reflect1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_reflect_image.c b/TC/testcase/utc_linear_gradient_reflect_image.c
new file mode 100644 (file)
index 0000000..2163918
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_reflect1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_subset_gl.c b/TC/testcase/utc_linear_gradient_subset_gl.c
new file mode 100644 (file)
index 0000000..081a9f5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_subset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_subset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_subset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-subset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_subset1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_subset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_gradient_subset_image.c b/TC/testcase/utc_linear_gradient_subset_image.c
new file mode 100644 (file)
index 0000000..ff7c879
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_gradient_subset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_gradient_subset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_gradient_subset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-gradient-subset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_gradient_subset1");
+                       else
+                               dts_fail("utc_cairo_linear_gradient_subset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_step_function_gl.c b/TC/testcase/utc_linear_step_function_gl.c
new file mode 100644 (file)
index 0000000..a63bf8a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_step_function1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_step_function1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_step_function1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-step-function", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_step_function1");
+                       else
+                               dts_fail("utc_cairo_linear_step_function1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_step_function_image.c b/TC/testcase/utc_linear_step_function_image.c
new file mode 100644 (file)
index 0000000..ebd00f5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_step_function1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_step_function1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_step_function1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-step-function", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_step_function1");
+                       else
+                               dts_fail("utc_cairo_linear_step_function1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_uniform_gl.c b/TC/testcase/utc_linear_uniform_gl.c
new file mode 100644 (file)
index 0000000..3f79468
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_uniform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_uniform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_uniform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-uniform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_uniform1");
+                       else
+                               dts_fail("utc_cairo_linear_uniform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_linear_uniform_image.c b/TC/testcase/utc_linear_uniform_image.c
new file mode 100644 (file)
index 0000000..7f2ec15
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_linear_uniform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_linear_uniform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_linear_uniform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite linear-uniform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_linear_uniform1");
+                       else
+                               dts_fail("utc_cairo_linear_uniform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_long_dashed_lines_gl.c b/TC/testcase/utc_long_dashed_lines_gl.c
new file mode 100644 (file)
index 0000000..14b5289
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_long_dashed_lines1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_long_dashed_lines1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_long_dashed_lines1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite long-dashed-lines", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_long_dashed_lines1");
+                       else
+                               dts_fail("utc_cairo_long_dashed_lines1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_long_dashed_lines_image.c b/TC/testcase/utc_long_dashed_lines_image.c
new file mode 100644 (file)
index 0000000..c8d5262
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_long_dashed_lines1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_long_dashed_lines1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_long_dashed_lines1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite long-dashed-lines", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_long_dashed_lines1");
+                       else
+                               dts_fail("utc_cairo_long_dashed_lines1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_long_lines_gl.c b/TC/testcase/utc_long_lines_gl.c
new file mode 100644 (file)
index 0000000..aaedad4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_long_lines1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_long_lines1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_long_lines1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite long-lines", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_long_lines1");
+                       else
+                               dts_fail("utc_cairo_long_lines1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_long_lines_image.c b/TC/testcase/utc_long_lines_image.c
new file mode 100644 (file)
index 0000000..65ca58c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_long_lines1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_long_lines1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_long_lines1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite long-lines", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_long_lines1");
+                       else
+                               dts_fail("utc_cairo_long_lines1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_map_all_to_image_gl.c b/TC/testcase/utc_map_all_to_image_gl.c
new file mode 100644 (file)
index 0000000..b89f989
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_map_all_to_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_map_all_to_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_map_all_to_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite map-all-to-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_map_all_to_image1");
+                       else
+                               dts_fail("utc_cairo_map_all_to_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_map_all_to_image_image.c b/TC/testcase/utc_map_all_to_image_image.c
new file mode 100644 (file)
index 0000000..4bf37ba
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_map_all_to_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_map_all_to_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_map_all_to_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite map-all-to-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_map_all_to_image1");
+                       else
+                               dts_fail("utc_cairo_map_all_to_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_map_bit_to_image_gl.c b/TC/testcase/utc_map_bit_to_image_gl.c
new file mode 100644 (file)
index 0000000..8f01110
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_map_bit_to_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_map_bit_to_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_map_bit_to_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite map-bit-to-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_map_bit_to_image1");
+                       else
+                               dts_fail("utc_cairo_map_bit_to_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_map_bit_to_image_image.c b/TC/testcase/utc_map_bit_to_image_image.c
new file mode 100644 (file)
index 0000000..57299e3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_map_bit_to_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_map_bit_to_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_map_bit_to_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite map-bit-to-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_map_bit_to_image1");
+                       else
+                               dts_fail("utc_cairo_map_bit_to_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_map_to_image_fill_gl.c b/TC/testcase/utc_map_to_image_fill_gl.c
new file mode 100644 (file)
index 0000000..62e932c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_map_to_image_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_map_to_image_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_map_to_image_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite map-to-image-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_map_to_image_fill1");
+                       else
+                               dts_fail("utc_cairo_map_to_image_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_map_to_image_fill_image.c b/TC/testcase/utc_map_to_image_fill_image.c
new file mode 100644 (file)
index 0000000..88f1610
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_map_to_image_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_map_to_image_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_map_to_image_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite map-to-image-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_map_to_image_fill1");
+                       else
+                               dts_fail("utc_cairo_map_to_image_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_alpha_gl.c b/TC/testcase/utc_mask_alpha_gl.c
new file mode 100644 (file)
index 0000000..e568eb1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_alpha1");
+                       else
+                               dts_fail("utc_cairo_mask_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_alpha_image.c b/TC/testcase/utc_mask_alpha_image.c
new file mode 100644 (file)
index 0000000..cbc1252
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_alpha1");
+                       else
+                               dts_fail("utc_cairo_mask_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_ctm_gl.c b/TC/testcase/utc_mask_ctm_gl.c
new file mode 100644 (file)
index 0000000..749e3d2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_ctm1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_ctm1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_ctm1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-ctm", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_ctm1");
+                       else
+                               dts_fail("utc_cairo_mask_ctm1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_ctm_image.c b/TC/testcase/utc_mask_ctm_image.c
new file mode 100644 (file)
index 0000000..d66668f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_ctm1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_ctm1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_ctm1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-ctm", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_ctm1");
+                       else
+                               dts_fail("utc_cairo_mask_ctm1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_gl.c b/TC/testcase/utc_mask_gl.c
new file mode 100644 (file)
index 0000000..5109e3b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask1");
+                       else
+                               dts_fail("utc_cairo_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_glyphs_gl.c b/TC/testcase/utc_mask_glyphs_gl.c
new file mode 100644 (file)
index 0000000..72e2b60
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_glyphs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_glyphs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_glyphs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-glyphs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_glyphs1");
+                       else
+                               dts_fail("utc_cairo_mask_glyphs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_glyphs_image.c b/TC/testcase/utc_mask_glyphs_image.c
new file mode 100644 (file)
index 0000000..fbeac2a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_glyphs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_glyphs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_glyphs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-glyphs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_glyphs1");
+                       else
+                               dts_fail("utc_cairo_mask_glyphs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_image.c b/TC/testcase/utc_mask_image.c
new file mode 100644 (file)
index 0000000..6b4733f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask1");
+                       else
+                               dts_fail("utc_cairo_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_surface_ctm_gl.c b/TC/testcase/utc_mask_surface_ctm_gl.c
new file mode 100644 (file)
index 0000000..681a637
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_surface_ctm1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_surface_ctm1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_surface_ctm1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-surface-ctm", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_surface_ctm1");
+                       else
+                               dts_fail("utc_cairo_mask_surface_ctm1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_surface_ctm_image.c b/TC/testcase/utc_mask_surface_ctm_image.c
new file mode 100644 (file)
index 0000000..a2185d7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_surface_ctm1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_surface_ctm1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_surface_ctm1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-surface-ctm", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_surface_ctm1");
+                       else
+                               dts_fail("utc_cairo_mask_surface_ctm1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_transformed_image_gl.c b/TC/testcase/utc_mask_transformed_image_gl.c
new file mode 100644 (file)
index 0000000..012e9ca
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_transformed_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_transformed_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_transformed_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-transformed-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_transformed_image1");
+                       else
+                               dts_fail("utc_cairo_mask_transformed_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_transformed_image_image.c b/TC/testcase/utc_mask_transformed_image_image.c
new file mode 100644 (file)
index 0000000..bf9717c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_transformed_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_transformed_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_transformed_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-transformed-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_transformed_image1");
+                       else
+                               dts_fail("utc_cairo_mask_transformed_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_transformed_similar_gl.c b/TC/testcase/utc_mask_transformed_similar_gl.c
new file mode 100644 (file)
index 0000000..dd5f452
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_transformed_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_transformed_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_transformed_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-transformed-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_transformed_similar1");
+                       else
+                               dts_fail("utc_cairo_mask_transformed_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mask_transformed_similar_image.c b/TC/testcase/utc_mask_transformed_similar_image.c
new file mode 100644 (file)
index 0000000..eea585b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mask_transformed_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mask_transformed_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mask_transformed_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mask-transformed-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mask_transformed_similar1");
+                       else
+                               dts_fail("utc_cairo_mask_transformed_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_accuracy_gl.c b/TC/testcase/utc_mesh_pattern_accuracy_gl.c
new file mode 100644 (file)
index 0000000..df91179
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_accuracy1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_accuracy1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_accuracy1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-accuracy", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_accuracy1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_accuracy1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_accuracy_image.c b/TC/testcase/utc_mesh_pattern_accuracy_image.c
new file mode 100644 (file)
index 0000000..ee8cb90
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_accuracy1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_accuracy1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_accuracy1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-accuracy", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_accuracy1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_accuracy1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_conical_gl.c b/TC/testcase/utc_mesh_pattern_conical_gl.c
new file mode 100644 (file)
index 0000000..4c46eb3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_conical1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_conical1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_conical1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-conical", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_conical1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_conical1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_conical_image.c b/TC/testcase/utc_mesh_pattern_conical_image.c
new file mode 100644 (file)
index 0000000..69cf5b0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_conical1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_conical1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_conical1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-conical", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_conical1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_conical1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_control_points_gl.c b/TC/testcase/utc_mesh_pattern_control_points_gl.c
new file mode 100644 (file)
index 0000000..f8cace8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_control_points1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_control_points1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_control_points1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-control-points", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_control_points1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_control_points1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_control_points_image.c b/TC/testcase/utc_mesh_pattern_control_points_image.c
new file mode 100644 (file)
index 0000000..3508246
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_control_points1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_control_points1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_control_points1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-control-points", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_control_points1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_control_points1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_fold_gl.c b/TC/testcase/utc_mesh_pattern_fold_gl.c
new file mode 100644 (file)
index 0000000..b2c6986
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_fold1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_fold1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_fold1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-fold", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_fold1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_fold1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_fold_image.c b/TC/testcase/utc_mesh_pattern_fold_image.c
new file mode 100644 (file)
index 0000000..bcecce0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_fold1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_fold1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_fold1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-fold", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_fold1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_fold1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_gl.c b/TC/testcase/utc_mesh_pattern_gl.c
new file mode 100644 (file)
index 0000000..6a6e275
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_image.c b/TC/testcase/utc_mesh_pattern_image.c
new file mode 100644 (file)
index 0000000..e7b191f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_overlap_gl.c b/TC/testcase/utc_mesh_pattern_overlap_gl.c
new file mode 100644 (file)
index 0000000..ba11a5e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_overlap1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_overlap_image.c b/TC/testcase/utc_mesh_pattern_overlap_image.c
new file mode 100644 (file)
index 0000000..b46b717
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_overlap1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_transformed_gl.c b/TC/testcase/utc_mesh_pattern_transformed_gl.c
new file mode 100644 (file)
index 0000000..ea3a865
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_transformed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_transformed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_transformed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-transformed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_transformed1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_transformed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mesh_pattern_transformed_image.c b/TC/testcase/utc_mesh_pattern_transformed_image.c
new file mode 100644 (file)
index 0000000..5a2d064
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mesh_pattern_transformed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mesh_pattern_transformed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mesh_pattern_transformed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mesh-pattern-transformed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mesh_pattern_transformed1");
+                       else
+                               dts_fail("utc_cairo_mesh_pattern_transformed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mime_data_gl.c b/TC/testcase/utc_mime_data_gl.c
new file mode 100644 (file)
index 0000000..ca0abba
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mime_data1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mime_data1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mime_data1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mime-data", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mime_data1");
+                       else
+                               dts_fail("utc_cairo_mime_data1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mime_data_image.c b/TC/testcase/utc_mime_data_image.c
new file mode 100644 (file)
index 0000000..69c23da
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mime_data1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mime_data1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mime_data1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mime-data", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mime_data1");
+                       else
+                               dts_fail("utc_cairo_mime_data1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mime_surface_api_gl.c b/TC/testcase/utc_mime_surface_api_gl.c
new file mode 100644 (file)
index 0000000..9e49c6f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mime_surface_api1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mime_surface_api1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mime_surface_api1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mime-surface-api", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mime_surface_api1");
+                       else
+                               dts_fail("utc_cairo_mime_surface_api1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mime_surface_api_image.c b/TC/testcase/utc_mime_surface_api_image.c
new file mode 100644 (file)
index 0000000..2e66027
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mime_surface_api1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mime_surface_api1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mime_surface_api1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mime-surface-api", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mime_surface_api1");
+                       else
+                               dts_fail("utc_cairo_mime_surface_api1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mime_surface_gl.c b/TC/testcase/utc_mime_surface_gl.c
new file mode 100644 (file)
index 0000000..b1387f7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mime_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mime_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mime_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mime-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mime_surface1");
+                       else
+                               dts_fail("utc_cairo_mime_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_mime_surface_image.c b/TC/testcase/utc_mime_surface_image.c
new file mode 100644 (file)
index 0000000..aaa3fff
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_mime_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_mime_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_mime_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite mime-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_mime_surface1");
+                       else
+                               dts_fail("utc_cairo_mime_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_miter_precision_gl.c b/TC/testcase/utc_miter_precision_gl.c
new file mode 100644 (file)
index 0000000..f780428
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_miter_precision1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_miter_precision1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_miter_precision1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite miter-precision", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_miter_precision1");
+                       else
+                               dts_fail("utc_cairo_miter_precision1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_miter_precision_image.c b/TC/testcase/utc_miter_precision_image.c
new file mode 100644 (file)
index 0000000..76b67a8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_miter_precision1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_miter_precision1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_miter_precision1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite miter-precision", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_miter_precision1");
+                       else
+                               dts_fail("utc_cairo_miter_precision1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_move_to_show_surface_gl.c b/TC/testcase/utc_move_to_show_surface_gl.c
new file mode 100644 (file)
index 0000000..061e903
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_move_to_show_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_move_to_show_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_move_to_show_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite move-to-show-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_move_to_show_surface1");
+                       else
+                               dts_fail("utc_cairo_move_to_show_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_move_to_show_surface_image.c b/TC/testcase/utc_move_to_show_surface_image.c
new file mode 100644 (file)
index 0000000..c7f9f95
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_move_to_show_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_move_to_show_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_move_to_show_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite move-to-show-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_move_to_show_surface1");
+                       else
+                               dts_fail("utc_cairo_move_to_show_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_multi_page_gl.c b/TC/testcase/utc_multi_page_gl.c
new file mode 100644 (file)
index 0000000..15623fd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_multi_page1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_multi_page1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_multi_page1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite multi-page", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_multi_page1");
+                       else
+                               dts_fail("utc_cairo_multi_page1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_multi_page_image.c b/TC/testcase/utc_multi_page_image.c
new file mode 100644 (file)
index 0000000..448b4de
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_multi_page1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_multi_page1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_multi_page1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite multi-page", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_multi_page1");
+                       else
+                               dts_fail("utc_cairo_multi_page1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_negative_stride_image_gl.c b/TC/testcase/utc_negative_stride_image_gl.c
new file mode 100644 (file)
index 0000000..1bc561a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_negative_stride_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_negative_stride_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_negative_stride_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite negative-stride-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_negative_stride_image1");
+                       else
+                               dts_fail("utc_cairo_negative_stride_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_negative_stride_image_image.c b/TC/testcase/utc_negative_stride_image_image.c
new file mode 100644 (file)
index 0000000..aca6d10
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_negative_stride_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_negative_stride_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_negative_stride_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite negative-stride-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_negative_stride_image1");
+                       else
+                               dts_fail("utc_cairo_negative_stride_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_new_sub_path_gl.c b/TC/testcase/utc_new_sub_path_gl.c
new file mode 100644 (file)
index 0000000..b6e5507
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_new_sub_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_new_sub_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_new_sub_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite new-sub-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_new_sub_path1");
+                       else
+                               dts_fail("utc_cairo_new_sub_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_new_sub_path_image.c b/TC/testcase/utc_new_sub_path_image.c
new file mode 100644 (file)
index 0000000..75cd3df
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_new_sub_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_new_sub_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_new_sub_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite new-sub-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_new_sub_path1");
+                       else
+                               dts_fail("utc_cairo_new_sub_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_nil_surface_gl.c b/TC/testcase/utc_nil_surface_gl.c
new file mode 100644 (file)
index 0000000..644c195
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_nil_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_nil_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_nil_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite nil-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_nil_surface1");
+                       else
+                               dts_fail("utc_cairo_nil_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_nil_surface_image.c b/TC/testcase/utc_nil_surface_image.c
new file mode 100644 (file)
index 0000000..ef08b6b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_nil_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_nil_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_nil_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite nil-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_nil_surface1");
+                       else
+                               dts_fail("utc_cairo_nil_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_alpha_alpha_gl.c b/TC/testcase/utc_operator_alpha_alpha_gl.c
new file mode 100644 (file)
index 0000000..700122a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_alpha_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_alpha_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_alpha_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-alpha-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_alpha_alpha1");
+                       else
+                               dts_fail("utc_cairo_operator_alpha_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_alpha_alpha_image.c b/TC/testcase/utc_operator_alpha_alpha_image.c
new file mode 100644 (file)
index 0000000..059ad55
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_alpha_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_alpha_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_alpha_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-alpha-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_alpha_alpha1");
+                       else
+                               dts_fail("utc_cairo_operator_alpha_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_alpha_gl.c b/TC/testcase/utc_operator_alpha_gl.c
new file mode 100644 (file)
index 0000000..de36850
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_alpha1");
+                       else
+                               dts_fail("utc_cairo_operator_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_alpha_image.c b/TC/testcase/utc_operator_alpha_image.c
new file mode 100644 (file)
index 0000000..9a3e3f0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_alpha1");
+                       else
+                               dts_fail("utc_cairo_operator_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_clear_gl.c b/TC/testcase/utc_operator_clear_gl.c
new file mode 100644 (file)
index 0000000..a3e344a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_clear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_clear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_clear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-clear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_clear1");
+                       else
+                               dts_fail("utc_cairo_operator_clear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_clear_image.c b/TC/testcase/utc_operator_clear_image.c
new file mode 100644 (file)
index 0000000..0eb8944
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_clear1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_clear1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_clear1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-clear", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_clear1");
+                       else
+                               dts_fail("utc_cairo_operator_clear1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_gl.c b/TC/testcase/utc_operator_gl.c
new file mode 100644 (file)
index 0000000..2384c82
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator1");
+                       else
+                               dts_fail("utc_cairo_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_image.c b/TC/testcase/utc_operator_image.c
new file mode 100644 (file)
index 0000000..299896f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator1");
+                       else
+                               dts_fail("utc_cairo_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_source_gl.c b/TC/testcase/utc_operator_source_gl.c
new file mode 100644 (file)
index 0000000..147be1e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_source1");
+                       else
+                               dts_fail("utc_cairo_operator_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_operator_source_image.c b/TC/testcase/utc_operator_source_image.c
new file mode 100644 (file)
index 0000000..275fee8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_operator_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_operator_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_operator_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite operator-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_operator_source1");
+                       else
+                               dts_fail("utc_cairo_operator_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_above_source_gl.c b/TC/testcase/utc_over_above_source_gl.c
new file mode 100644 (file)
index 0000000..d04f0ac
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_above_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_above_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_above_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-above-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_above_source1");
+                       else
+                               dts_fail("utc_cairo_over_above_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_above_source_image.c b/TC/testcase/utc_over_above_source_image.c
new file mode 100644 (file)
index 0000000..4c11716
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_above_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_above_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_above_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-above-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_above_source1");
+                       else
+                               dts_fail("utc_cairo_over_above_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_around_source_gl.c b/TC/testcase/utc_over_around_source_gl.c
new file mode 100644 (file)
index 0000000..1d38aa4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_around_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_around_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_around_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-around-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_around_source1");
+                       else
+                               dts_fail("utc_cairo_over_around_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_around_source_image.c b/TC/testcase/utc_over_around_source_image.c
new file mode 100644 (file)
index 0000000..a551e1c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_around_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_around_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_around_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-around-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_around_source1");
+                       else
+                               dts_fail("utc_cairo_over_around_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_below_source_gl.c b/TC/testcase/utc_over_below_source_gl.c
new file mode 100644 (file)
index 0000000..83005dc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_below_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_below_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_below_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-below-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_below_source1");
+                       else
+                               dts_fail("utc_cairo_over_below_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_below_source_image.c b/TC/testcase/utc_over_below_source_image.c
new file mode 100644 (file)
index 0000000..f0b0187
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_below_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_below_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_below_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-below-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_below_source1");
+                       else
+                               dts_fail("utc_cairo_over_below_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_between_source_gl.c b/TC/testcase/utc_over_between_source_gl.c
new file mode 100644 (file)
index 0000000..2be9317
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_between_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_between_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_between_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-between-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_between_source1");
+                       else
+                               dts_fail("utc_cairo_over_between_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_over_between_source_image.c b/TC/testcase/utc_over_between_source_image.c
new file mode 100644 (file)
index 0000000..88b700b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_over_between_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_over_between_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_over_between_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite over-between-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_over_between_source1");
+                       else
+                               dts_fail("utc_cairo_over_between_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_overlapping_boxes_gl.c b/TC/testcase/utc_overlapping_boxes_gl.c
new file mode 100644 (file)
index 0000000..5e17c96
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_overlapping_boxes1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_overlapping_boxes1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_overlapping_boxes1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite overlapping-boxes", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_overlapping_boxes1");
+                       else
+                               dts_fail("utc_cairo_overlapping_boxes1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_overlapping_boxes_image.c b/TC/testcase/utc_overlapping_boxes_image.c
new file mode 100644 (file)
index 0000000..f9c1d1b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_overlapping_boxes1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_overlapping_boxes1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_overlapping_boxes1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite overlapping-boxes", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_overlapping_boxes1");
+                       else
+                               dts_fail("utc_cairo_overlapping_boxes1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_overlapping_dash_caps_gl.c b/TC/testcase/utc_overlapping_dash_caps_gl.c
new file mode 100644 (file)
index 0000000..1b89359
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_overlapping_dash_caps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_overlapping_dash_caps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_overlapping_dash_caps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite overlapping-dash-caps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_overlapping_dash_caps1");
+                       else
+                               dts_fail("utc_cairo_overlapping_dash_caps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_overlapping_dash_caps_image.c b/TC/testcase/utc_overlapping_dash_caps_image.c
new file mode 100644 (file)
index 0000000..1ffe657
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_overlapping_dash_caps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_overlapping_dash_caps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_overlapping_dash_caps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite overlapping-dash-caps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_overlapping_dash_caps1");
+                       else
+                               dts_fail("utc_cairo_overlapping_dash_caps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_overlapping_glyphs_gl.c b/TC/testcase/utc_overlapping_glyphs_gl.c
new file mode 100644 (file)
index 0000000..55012e0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_overlapping_glyphs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_overlapping_glyphs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_overlapping_glyphs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite overlapping-glyphs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_overlapping_glyphs1");
+                       else
+                               dts_fail("utc_cairo_overlapping_glyphs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_overlapping_glyphs_image.c b/TC/testcase/utc_overlapping_glyphs_image.c
new file mode 100644 (file)
index 0000000..28ef220
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_overlapping_glyphs1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_overlapping_glyphs1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_overlapping_glyphs1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite overlapping-glyphs", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_overlapping_glyphs1");
+                       else
+                               dts_fail("utc_cairo_overlapping_glyphs1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_clip_fill_aa_gl.c b/TC/testcase/utc_paint_clip_fill_aa_gl.c
new file mode 100644 (file)
index 0000000..bff58d9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_clip_fill_aa1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_clip_fill_aa1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_clip_fill_aa1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-clip-fill-aa", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_clip_fill_aa1");
+                       else
+                               dts_fail("utc_cairo_paint_clip_fill_aa1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_clip_fill_aa_image.c b/TC/testcase/utc_paint_clip_fill_aa_image.c
new file mode 100644 (file)
index 0000000..9d69575
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_clip_fill_aa1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_clip_fill_aa1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_clip_fill_aa1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-clip-fill-aa", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_clip_fill_aa1");
+                       else
+                               dts_fail("utc_cairo_paint_clip_fill_aa1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_clip_fill_mono_gl.c b/TC/testcase/utc_paint_clip_fill_mono_gl.c
new file mode 100644 (file)
index 0000000..7d5032c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_clip_fill_mono1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_clip_fill_mono1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_clip_fill_mono1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-clip-fill-mono", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_clip_fill_mono1");
+                       else
+                               dts_fail("utc_cairo_paint_clip_fill_mono1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_clip_fill_mono_image.c b/TC/testcase/utc_paint_clip_fill_mono_image.c
new file mode 100644 (file)
index 0000000..c1987d6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_clip_fill_mono1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_clip_fill_mono1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_clip_fill_mono1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-clip-fill-mono", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_clip_fill_mono1");
+                       else
+                               dts_fail("utc_cairo_paint_clip_fill_mono1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_gl.c b/TC/testcase/utc_paint_gl.c
new file mode 100644 (file)
index 0000000..5d33457
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint1");
+                       else
+                               dts_fail("utc_cairo_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_image.c b/TC/testcase/utc_paint_image.c
new file mode 100644 (file)
index 0000000..535518b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint1");
+                       else
+                               dts_fail("utc_cairo_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_repeat_gl.c b/TC/testcase/utc_paint_repeat_gl.c
new file mode 100644 (file)
index 0000000..dd0026c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_repeat1");
+                       else
+                               dts_fail("utc_cairo_paint_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_repeat_image.c b/TC/testcase/utc_paint_repeat_image.c
new file mode 100644 (file)
index 0000000..1119589
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_repeat1");
+                       else
+                               dts_fail("utc_cairo_paint_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_source_alpha_gl.c b/TC/testcase/utc_paint_source_alpha_gl.c
new file mode 100644 (file)
index 0000000..7e3e0fa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_source_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_source_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_source_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-source-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_source_alpha1");
+                       else
+                               dts_fail("utc_cairo_paint_source_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_source_alpha_image.c b/TC/testcase/utc_paint_source_alpha_image.c
new file mode 100644 (file)
index 0000000..e6ec3f2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_source_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_source_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_source_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-source-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_source_alpha1");
+                       else
+                               dts_fail("utc_cairo_paint_source_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_clip_gl.c b/TC/testcase/utc_paint_with_alpha_clip_gl.c
new file mode 100644 (file)
index 0000000..98e646e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_clip_image.c b/TC/testcase/utc_paint_with_alpha_clip_image.c
new file mode 100644 (file)
index 0000000..cf5adf4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_clip_mask_gl.c b/TC/testcase/utc_paint_with_alpha_clip_mask_gl.c
new file mode 100644 (file)
index 0000000..4f8a9ee
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_clip_mask_image.c b/TC/testcase/utc_paint_with_alpha_clip_mask_image.c
new file mode 100644 (file)
index 0000000..112a580
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_gl.c b/TC/testcase/utc_paint_with_alpha_gl.c
new file mode 100644 (file)
index 0000000..17256fa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_image.c b/TC/testcase/utc_paint_with_alpha_image.c
new file mode 100644 (file)
index 0000000..85a1ba5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_solid_clip_gl.c b/TC/testcase/utc_paint_with_alpha_solid_clip_gl.c
new file mode 100644 (file)
index 0000000..8c18060
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_paint_with_alpha_solid_clip_image.c b/TC/testcase/utc_paint_with_alpha_solid_clip_image.c
new file mode 100644 (file)
index 0000000..856f399
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_paint_with_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_paint_with_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_paint_with_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite paint-with-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_paint_with_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_paint_with_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_bottom_gl.c b/TC/testcase/utc_partial_clip_text_bottom_gl.c
new file mode 100644 (file)
index 0000000..57671f1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_bottom1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_bottom1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_bottom1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-bottom", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_bottom1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_bottom1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_bottom_image.c b/TC/testcase/utc_partial_clip_text_bottom_image.c
new file mode 100644 (file)
index 0000000..5fba26d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_bottom1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_bottom1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_bottom1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-bottom", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_bottom1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_bottom1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_left_gl.c b/TC/testcase/utc_partial_clip_text_left_gl.c
new file mode 100644 (file)
index 0000000..29b19d2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_left1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_left1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_left1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-left", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_left1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_left1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_left_image.c b/TC/testcase/utc_partial_clip_text_left_image.c
new file mode 100644 (file)
index 0000000..fb4f044
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_left1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_left1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_left1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-left", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_left1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_left1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_right_gl.c b/TC/testcase/utc_partial_clip_text_right_gl.c
new file mode 100644 (file)
index 0000000..f3e6847
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_right1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_right1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_right1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-right", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_right1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_right1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_right_image.c b/TC/testcase/utc_partial_clip_text_right_image.c
new file mode 100644 (file)
index 0000000..56c4404
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_right1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_right1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_right1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-right", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_right1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_right1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_top_gl.c b/TC/testcase/utc_partial_clip_text_top_gl.c
new file mode 100644 (file)
index 0000000..dd01438
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_top1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_top1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_top1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-top", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_top1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_top1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_clip_text_top_image.c b/TC/testcase/utc_partial_clip_text_top_image.c
new file mode 100644 (file)
index 0000000..8d9c1f1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_clip_text_top1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_clip_text_top1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_clip_text_top1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-clip-text-top", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_clip_text_top1");
+                       else
+                               dts_fail("utc_cairo_partial_clip_text_top1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_half_reference_gl.c b/TC/testcase/utc_partial_coverage_half_reference_gl.c
new file mode 100644 (file)
index 0000000..16cd007
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_half_reference1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_half_reference1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_half_reference1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-half-reference", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_half_reference1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_half_reference1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_half_reference_image.c b/TC/testcase/utc_partial_coverage_half_reference_image.c
new file mode 100644 (file)
index 0000000..9310dc5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_half_reference1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_half_reference1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_half_reference1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-half-reference", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_half_reference1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_half_reference1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_half_triangles_gl.c b/TC/testcase/utc_partial_coverage_half_triangles_gl.c
new file mode 100644 (file)
index 0000000..0a32316
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_half_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_half_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_half_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-half-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_half_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_half_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_half_triangles_image.c b/TC/testcase/utc_partial_coverage_half_triangles_image.c
new file mode 100644 (file)
index 0000000..6a23c08
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_half_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_half_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_half_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-half-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_half_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_half_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_intersecting_quads_gl.c b/TC/testcase/utc_partial_coverage_intersecting_quads_gl.c
new file mode 100644 (file)
index 0000000..20c4120
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_intersecting_quads1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_intersecting_quads1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_intersecting_quads1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-intersecting-quads", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_intersecting_quads1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_intersecting_quads1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_intersecting_quads_image.c b/TC/testcase/utc_partial_coverage_intersecting_quads_image.c
new file mode 100644 (file)
index 0000000..24c4b8f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_intersecting_quads1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_intersecting_quads1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_intersecting_quads1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-intersecting-quads", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_intersecting_quads1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_intersecting_quads1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_intersecting_triangles_gl.c b/TC/testcase/utc_partial_coverage_intersecting_triangles_gl.c
new file mode 100644 (file)
index 0000000..3d9aabb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_intersecting_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_intersecting_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_intersecting_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-intersecting-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_intersecting_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_intersecting_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_intersecting_triangles_image.c b/TC/testcase/utc_partial_coverage_intersecting_triangles_image.c
new file mode 100644 (file)
index 0000000..cdd68e3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_intersecting_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_intersecting_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_intersecting_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-intersecting-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_intersecting_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_intersecting_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_overlap_half_triangles_eo_gl.c b/TC/testcase/utc_partial_coverage_overlap_half_triangles_eo_gl.c
new file mode 100644 (file)
index 0000000..09b31b6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_overlap_half_triangles_eo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_overlap_half_triangles_eo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_overlap_half_triangles_eo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-overlap-half-triangles-eo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_overlap_half_triangles_eo1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_overlap_half_triangles_eo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_overlap_half_triangles_eo_image.c b/TC/testcase/utc_partial_coverage_overlap_half_triangles_eo_image.c
new file mode 100644 (file)
index 0000000..e1526ed
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_overlap_half_triangles_eo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_overlap_half_triangles_eo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_overlap_half_triangles_eo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-overlap-half-triangles-eo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_overlap_half_triangles_eo1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_overlap_half_triangles_eo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_overlap_half_triangles_gl.c b/TC/testcase/utc_partial_coverage_overlap_half_triangles_gl.c
new file mode 100644 (file)
index 0000000..6ae8f30
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_overlap_half_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_overlap_half_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_overlap_half_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-overlap-half-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_overlap_half_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_overlap_half_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_overlap_half_triangles_image.c b/TC/testcase/utc_partial_coverage_overlap_half_triangles_image.c
new file mode 100644 (file)
index 0000000..0eae267
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_overlap_half_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_overlap_half_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_overlap_half_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-overlap-half-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_overlap_half_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_overlap_half_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_overlap_three_quarter_triangles_gl.c b/TC/testcase/utc_partial_coverage_overlap_three_quarter_triangles_gl.c
new file mode 100644 (file)
index 0000000..0f0a140
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_overlap_three_quarter_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_overlap_three_quarter_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_overlap_three_quarter_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-overlap-three-quarter-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_overlap_three_quarter_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_overlap_three_quarter_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_overlap_three_quarter_triangles_image.c b/TC/testcase/utc_partial_coverage_overlap_three_quarter_triangles_image.c
new file mode 100644 (file)
index 0000000..dae2788
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_overlap_three_quarter_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_overlap_three_quarter_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_overlap_three_quarter_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-overlap-three-quarter-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_overlap_three_quarter_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_overlap_three_quarter_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_rectangles_gl.c b/TC/testcase/utc_partial_coverage_rectangles_gl.c
new file mode 100644 (file)
index 0000000..7772a9a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_rectangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_rectangles_image.c b/TC/testcase/utc_partial_coverage_rectangles_image.c
new file mode 100644 (file)
index 0000000..922fa24
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_rectangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_rectangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_rectangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-rectangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_rectangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_rectangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_reference_gl.c b/TC/testcase/utc_partial_coverage_reference_gl.c
new file mode 100644 (file)
index 0000000..8319ece
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_reference1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_reference1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_reference1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-reference", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_reference1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_reference1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_reference_image.c b/TC/testcase/utc_partial_coverage_reference_image.c
new file mode 100644 (file)
index 0000000..79bfe3d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_reference1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_reference1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_reference1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-reference", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_reference1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_reference1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_three_quarter_reference_gl.c b/TC/testcase/utc_partial_coverage_three_quarter_reference_gl.c
new file mode 100644 (file)
index 0000000..82b1782
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_three_quarter_reference1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_three_quarter_reference1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_three_quarter_reference1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-three-quarter-reference", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_three_quarter_reference1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_three_quarter_reference1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_three_quarter_reference_image.c b/TC/testcase/utc_partial_coverage_three_quarter_reference_image.c
new file mode 100644 (file)
index 0000000..f24a375
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_three_quarter_reference1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_three_quarter_reference1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_three_quarter_reference1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-three-quarter-reference", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_three_quarter_reference1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_three_quarter_reference1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_triangles_gl.c b/TC/testcase/utc_partial_coverage_triangles_gl.c
new file mode 100644 (file)
index 0000000..bc1e5e4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_partial_coverage_triangles_image.c b/TC/testcase/utc_partial_coverage_triangles_image.c
new file mode 100644 (file)
index 0000000..70be118
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_partial_coverage_triangles1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_partial_coverage_triangles1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_partial_coverage_triangles1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite partial-coverage-triangles", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_partial_coverage_triangles1");
+                       else
+                               dts_fail("utc_cairo_partial_coverage_triangles1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pass_through_gl.c b/TC/testcase/utc_pass_through_gl.c
new file mode 100644 (file)
index 0000000..fc334c0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pass_through1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pass_through1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pass_through1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pass-through", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pass_through1");
+                       else
+                               dts_fail("utc_cairo_pass_through1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pass_through_image.c b/TC/testcase/utc_pass_through_image.c
new file mode 100644 (file)
index 0000000..0b1ea6d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pass_through1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pass_through1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pass_through1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pass-through", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pass_through1");
+                       else
+                               dts_fail("utc_cairo_pass_through1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_path_append_gl.c b/TC/testcase/utc_path_append_gl.c
new file mode 100644 (file)
index 0000000..f20a26e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_path_append1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_path_append1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_path_append1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite path-append", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_path_append1");
+                       else
+                               dts_fail("utc_cairo_path_append1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_path_append_image.c b/TC/testcase/utc_path_append_image.c
new file mode 100644 (file)
index 0000000..8b8fdaa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_path_append1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_path_append1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_path_append1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite path-append", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_path_append1");
+                       else
+                               dts_fail("utc_cairo_path_append1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_path_precision_gl.c b/TC/testcase/utc_path_precision_gl.c
new file mode 100644 (file)
index 0000000..41df5ca
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_path_precision1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_path_precision1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_path_precision1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite path-precision", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_path_precision1");
+                       else
+                               dts_fail("utc_cairo_path_precision1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_path_precision_image.c b/TC/testcase/utc_path_precision_image.c
new file mode 100644 (file)
index 0000000..f9edebd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_path_precision1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_path_precision1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_path_precision1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite path-precision", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_path_precision1");
+                       else
+                               dts_fail("utc_cairo_path_precision1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_path_stroke_twice_gl.c b/TC/testcase/utc_path_stroke_twice_gl.c
new file mode 100644 (file)
index 0000000..38684c2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_path_stroke_twice1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_path_stroke_twice1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_path_stroke_twice1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite path-stroke-twice", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_path_stroke_twice1");
+                       else
+                               dts_fail("utc_cairo_path_stroke_twice1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_path_stroke_twice_image.c b/TC/testcase/utc_path_stroke_twice_image.c
new file mode 100644 (file)
index 0000000..b93e2df
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_path_stroke_twice1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_path_stroke_twice1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_path_stroke_twice1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite path-stroke-twice", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_path_stroke_twice1");
+                       else
+                               dts_fail("utc_cairo_path_stroke_twice1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pattern_get_type_gl.c b/TC/testcase/utc_pattern_get_type_gl.c
new file mode 100644 (file)
index 0000000..7805b9f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pattern_get_type1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pattern_get_type1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pattern_get_type1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pattern-get-type", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pattern_get_type1");
+                       else
+                               dts_fail("utc_cairo_pattern_get_type1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pattern_get_type_image.c b/TC/testcase/utc_pattern_get_type_image.c
new file mode 100644 (file)
index 0000000..de5a5d1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pattern_get_type1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pattern_get_type1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pattern_get_type1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pattern-get-type", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pattern_get_type1");
+                       else
+                               dts_fail("utc_cairo_pattern_get_type1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pattern_getters_gl.c b/TC/testcase/utc_pattern_getters_gl.c
new file mode 100644 (file)
index 0000000..cd138c7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pattern_getters1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pattern_getters1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pattern_getters1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pattern-getters", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pattern_getters1");
+                       else
+                               dts_fail("utc_cairo_pattern_getters1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pattern_getters_image.c b/TC/testcase/utc_pattern_getters_image.c
new file mode 100644 (file)
index 0000000..da12772
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pattern_getters1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pattern_getters1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pattern_getters1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pattern-getters", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pattern_getters1");
+                       else
+                               dts_fail("utc_cairo_pattern_getters1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_features_gl.c b/TC/testcase/utc_pdf_features_gl.c
new file mode 100644 (file)
index 0000000..e035f3e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_features1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_features1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_features1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-features", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_features1");
+                       else
+                               dts_fail("utc_cairo_pdf_features1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_features_image.c b/TC/testcase/utc_pdf_features_image.c
new file mode 100644 (file)
index 0000000..77813ca
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_features1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_features1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_features1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-features", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_features1");
+                       else
+                               dts_fail("utc_cairo_pdf_features1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_isolated_group_gl.c b/TC/testcase/utc_pdf_isolated_group_gl.c
new file mode 100644 (file)
index 0000000..596d3f4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_isolated_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_isolated_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_isolated_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-isolated-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_isolated_group1");
+                       else
+                               dts_fail("utc_cairo_pdf_isolated_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_isolated_group_image.c b/TC/testcase/utc_pdf_isolated_group_image.c
new file mode 100644 (file)
index 0000000..e0860bb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_isolated_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_isolated_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_isolated_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-isolated-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_isolated_group1");
+                       else
+                               dts_fail("utc_cairo_pdf_isolated_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_mime_data_gl.c b/TC/testcase/utc_pdf_mime_data_gl.c
new file mode 100644 (file)
index 0000000..863f1bb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_mime_data1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_mime_data1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_mime_data1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-mime-data", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_mime_data1");
+                       else
+                               dts_fail("utc_cairo_pdf_mime_data1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_mime_data_image.c b/TC/testcase/utc_pdf_mime_data_image.c
new file mode 100644 (file)
index 0000000..c0cde32
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_mime_data1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_mime_data1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_mime_data1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-mime-data", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_mime_data1");
+                       else
+                               dts_fail("utc_cairo_pdf_mime_data1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_surface_source_gl.c b/TC/testcase/utc_pdf_surface_source_gl.c
new file mode 100644 (file)
index 0000000..453eb78
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_surface_source1");
+                       else
+                               dts_fail("utc_cairo_pdf_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pdf_surface_source_image.c b/TC/testcase/utc_pdf_surface_source_image.c
new file mode 100644 (file)
index 0000000..1de35b8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pdf_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pdf_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pdf_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pdf-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pdf_surface_source1");
+                       else
+                               dts_fail("utc_cairo_pdf_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pixman_rotate_gl.c b/TC/testcase/utc_pixman_rotate_gl.c
new file mode 100644 (file)
index 0000000..d575c84
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pixman_rotate1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pixman_rotate1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pixman_rotate1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pixman-rotate", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pixman_rotate1");
+                       else
+                               dts_fail("utc_cairo_pixman_rotate1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pixman_rotate_image.c b/TC/testcase/utc_pixman_rotate_image.c
new file mode 100644 (file)
index 0000000..7845e5c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pixman_rotate1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pixman_rotate1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pixman_rotate1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pixman-rotate", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pixman_rotate1");
+                       else
+                               dts_fail("utc_cairo_pixman_rotate1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_png_gl.c b/TC/testcase/utc_png_gl.c
new file mode 100644 (file)
index 0000000..d0ed8a4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_png1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_png1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_png1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite png", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_png1");
+                       else
+                               dts_fail("utc_cairo_png1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_png_image.c b/TC/testcase/utc_png_image.c
new file mode 100644 (file)
index 0000000..e45721c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_png1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_png1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_png1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite png", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_png1");
+                       else
+                               dts_fail("utc_cairo_png1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ps_eps_gl.c b/TC/testcase/utc_ps_eps_gl.c
new file mode 100644 (file)
index 0000000..3de0839
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ps_eps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ps_eps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ps_eps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ps-eps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ps_eps1");
+                       else
+                               dts_fail("utc_cairo_ps_eps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ps_eps_image.c b/TC/testcase/utc_ps_eps_image.c
new file mode 100644 (file)
index 0000000..ca37c39
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ps_eps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ps_eps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ps_eps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ps-eps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ps_eps1");
+                       else
+                               dts_fail("utc_cairo_ps_eps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ps_features_gl.c b/TC/testcase/utc_ps_features_gl.c
new file mode 100644 (file)
index 0000000..731391c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ps_features1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ps_features1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ps_features1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ps-features", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ps_features1");
+                       else
+                               dts_fail("utc_cairo_ps_features1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ps_features_image.c b/TC/testcase/utc_ps_features_image.c
new file mode 100644 (file)
index 0000000..5cfcdad
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ps_features1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ps_features1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ps_features1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ps-features", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ps_features1");
+                       else
+                               dts_fail("utc_cairo_ps_features1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ps_surface_source_gl.c b/TC/testcase/utc_ps_surface_source_gl.c
new file mode 100644 (file)
index 0000000..ef156b8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ps_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ps_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ps_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ps-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ps_surface_source1");
+                       else
+                               dts_fail("utc_cairo_ps_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_ps_surface_source_image.c b/TC/testcase/utc_ps_surface_source_image.c
new file mode 100644 (file)
index 0000000..8a67fc9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_ps_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_ps_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_ps_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite ps-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_ps_surface_source1");
+                       else
+                               dts_fail("utc_cairo_ps_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pthread_same_source_gl.c b/TC/testcase/utc_pthread_same_source_gl.c
new file mode 100644 (file)
index 0000000..1088cef
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pthread_same_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pthread_same_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pthread_same_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pthread-same-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pthread_same_source1");
+                       else
+                               dts_fail("utc_cairo_pthread_same_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pthread_same_source_image.c b/TC/testcase/utc_pthread_same_source_image.c
new file mode 100644 (file)
index 0000000..f9d6032
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pthread_same_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pthread_same_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pthread_same_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pthread-same-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pthread_same_source1");
+                       else
+                               dts_fail("utc_cairo_pthread_same_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pthread_show_text_gl.c b/TC/testcase/utc_pthread_show_text_gl.c
new file mode 100644 (file)
index 0000000..8602d67
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pthread_show_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pthread_show_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pthread_show_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pthread-show-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pthread_show_text1");
+                       else
+                               dts_fail("utc_cairo_pthread_show_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pthread_show_text_image.c b/TC/testcase/utc_pthread_show_text_image.c
new file mode 100644 (file)
index 0000000..f36e843
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pthread_show_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pthread_show_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pthread_show_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pthread-show-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pthread_show_text1");
+                       else
+                               dts_fail("utc_cairo_pthread_show_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pthread_similar_gl.c b/TC/testcase/utc_pthread_similar_gl.c
new file mode 100644 (file)
index 0000000..2abc572
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pthread_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pthread_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pthread_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pthread-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pthread_similar1");
+                       else
+                               dts_fail("utc_cairo_pthread_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_pthread_similar_image.c b/TC/testcase/utc_pthread_similar_image.c
new file mode 100644 (file)
index 0000000..89a5ccc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_pthread_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_pthread_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_pthread_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite pthread-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_pthread_similar1");
+                       else
+                               dts_fail("utc_cairo_pthread_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_push_group_color_gl.c b/TC/testcase/utc_push_group_color_gl.c
new file mode 100644 (file)
index 0000000..f88564d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_push_group_color1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_push_group_color1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_push_group_color1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite push-group-color", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_push_group_color1");
+                       else
+                               dts_fail("utc_cairo_push_group_color1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_push_group_color_image.c b/TC/testcase/utc_push_group_color_image.c
new file mode 100644 (file)
index 0000000..3c541bb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_push_group_color1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_push_group_color1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_push_group_color1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite push-group-color", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_push_group_color1");
+                       else
+                               dts_fail("utc_cairo_push_group_color1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_push_group_gl.c b/TC/testcase/utc_push_group_gl.c
new file mode 100644 (file)
index 0000000..d721aaf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_push_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_push_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_push_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite push-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_push_group1");
+                       else
+                               dts_fail("utc_cairo_push_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_push_group_image.c b/TC/testcase/utc_push_group_image.c
new file mode 100644 (file)
index 0000000..485d221
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_push_group1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_push_group1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_push_group1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite push-group", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_push_group1");
+                       else
+                               dts_fail("utc_cairo_push_group1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_push_group_path_offset_gl.c b/TC/testcase/utc_push_group_path_offset_gl.c
new file mode 100644 (file)
index 0000000..761fbee
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_push_group_path_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_push_group_path_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_push_group_path_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite push-group-path-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_push_group_path_offset1");
+                       else
+                               dts_fail("utc_cairo_push_group_path_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_push_group_path_offset_image.c b/TC/testcase/utc_push_group_path_offset_image.c
new file mode 100644 (file)
index 0000000..b7a0643
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_push_group_path_offset1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_push_group_path_offset1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_push_group_path_offset1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite push-group-path-offset", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_push_group_path_offset1");
+                       else
+                               dts_fail("utc_cairo_push_group_path_offset1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_quartz_surface_source_gl.c b/TC/testcase/utc_quartz_surface_source_gl.c
new file mode 100644 (file)
index 0000000..ecc8f2b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_quartz_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_quartz_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_quartz_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite quartz-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_quartz_surface_source1");
+                       else
+                               dts_fail("utc_cairo_quartz_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_quartz_surface_source_image.c b/TC/testcase/utc_quartz_surface_source_image.c
new file mode 100644 (file)
index 0000000..7dc9a46
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_quartz_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_quartz_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_quartz_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite quartz-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_quartz_surface_source1");
+                       else
+                               dts_fail("utc_cairo_quartz_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_extend_gl.c b/TC/testcase/utc_radial_gradient_extend_gl.c
new file mode 100644 (file)
index 0000000..c71ecfc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_extend1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_extend1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_extend1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-extend", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_extend1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_extend1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_extend_image.c b/TC/testcase/utc_radial_gradient_extend_image.c
new file mode 100644 (file)
index 0000000..2f16ca8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_extend1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_extend1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_extend1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-extend", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_extend1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_extend1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_gl.c b/TC/testcase/utc_radial_gradient_gl.c
new file mode 100644 (file)
index 0000000..3e933fe
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_image.c b/TC/testcase/utc_radial_gradient_image.c
new file mode 100644 (file)
index 0000000..7eaea2e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_mask_gl.c b/TC/testcase/utc_radial_gradient_mask_gl.c
new file mode 100644 (file)
index 0000000..b6a65e6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_mask1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_mask_image.c b/TC/testcase/utc_radial_gradient_mask_image.c
new file mode 100644 (file)
index 0000000..7c7145a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_mask1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_mask_source_gl.c b/TC/testcase/utc_radial_gradient_mask_source_gl.c
new file mode 100644 (file)
index 0000000..3f6659a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_mask_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_mask_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_mask_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-mask-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_mask_source1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_mask_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_mask_source_image.c b/TC/testcase/utc_radial_gradient_mask_source_image.c
new file mode 100644 (file)
index 0000000..adfa803
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_mask_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_mask_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_mask_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-mask-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_mask_source1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_mask_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_one_stop_gl.c b/TC/testcase/utc_radial_gradient_one_stop_gl.c
new file mode 100644 (file)
index 0000000..692a583
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_one_stop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_one_stop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_one_stop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-one-stop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_one_stop1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_one_stop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_one_stop_image.c b/TC/testcase/utc_radial_gradient_one_stop_image.c
new file mode 100644 (file)
index 0000000..19e951f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_one_stop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_one_stop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_one_stop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-one-stop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_one_stop1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_one_stop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_source_gl.c b/TC/testcase/utc_radial_gradient_source_gl.c
new file mode 100644 (file)
index 0000000..643fa81
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_source1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_gradient_source_image.c b/TC/testcase/utc_radial_gradient_source_image.c
new file mode 100644 (file)
index 0000000..dbee49b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_gradient_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_gradient_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_gradient_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-gradient-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_gradient_source1");
+                       else
+                               dts_fail("utc_cairo_radial_gradient_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_outer_focus_gl.c b/TC/testcase/utc_radial_outer_focus_gl.c
new file mode 100644 (file)
index 0000000..9884ecf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_outer_focus1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_outer_focus1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_outer_focus1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-outer-focus", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_outer_focus1");
+                       else
+                               dts_fail("utc_cairo_radial_outer_focus1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_radial_outer_focus_image.c b/TC/testcase/utc_radial_outer_focus_image.c
new file mode 100644 (file)
index 0000000..604b60a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_radial_outer_focus1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_radial_outer_focus1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_radial_outer_focus1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite radial-outer-focus", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_radial_outer_focus1");
+                       else
+                               dts_fail("utc_cairo_radial_outer_focus1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_clip_gl.c b/TC/testcase/utc_random_clip_gl.c
new file mode 100644 (file)
index 0000000..0e92476
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_clip1");
+                       else
+                               dts_fail("utc_cairo_random_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_clip_image.c b/TC/testcase/utc_random_clip_image.c
new file mode 100644 (file)
index 0000000..ca9f591
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_clip1");
+                       else
+                               dts_fail("utc_cairo_random_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_curves_eo_gl.c b/TC/testcase/utc_random_intersections_curves_eo_gl.c
new file mode 100644 (file)
index 0000000..b10998d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_curves_eo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_curves_eo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_curves_eo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-curves-eo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_curves_eo1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_curves_eo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_curves_eo_image.c b/TC/testcase/utc_random_intersections_curves_eo_image.c
new file mode 100644 (file)
index 0000000..81e26f5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_curves_eo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_curves_eo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_curves_eo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-curves-eo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_curves_eo1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_curves_eo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_curves_nz_gl.c b/TC/testcase/utc_random_intersections_curves_nz_gl.c
new file mode 100644 (file)
index 0000000..c17e1c0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_curves_nz1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_curves_nz1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_curves_nz1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-curves-nz", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_curves_nz1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_curves_nz1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_curves_nz_image.c b/TC/testcase/utc_random_intersections_curves_nz_image.c
new file mode 100644 (file)
index 0000000..0b8e571
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_curves_nz1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_curves_nz1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_curves_nz1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-curves-nz", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_curves_nz1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_curves_nz1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_eo_gl.c b/TC/testcase/utc_random_intersections_eo_gl.c
new file mode 100644 (file)
index 0000000..be5435e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_eo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_eo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_eo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-eo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_eo1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_eo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_eo_image.c b/TC/testcase/utc_random_intersections_eo_image.c
new file mode 100644 (file)
index 0000000..21e896b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_eo1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_eo1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_eo1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-eo", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_eo1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_eo1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_nonzero_gl.c b/TC/testcase/utc_random_intersections_nonzero_gl.c
new file mode 100644 (file)
index 0000000..d95ce8d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_nonzero1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_nonzero1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_nonzero1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-nonzero", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_nonzero1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_nonzero1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_random_intersections_nonzero_image.c b/TC/testcase/utc_random_intersections_nonzero_image.c
new file mode 100644 (file)
index 0000000..d5a0687
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_random_intersections_nonzero1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_random_intersections_nonzero1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_random_intersections_nonzero1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite random-intersections-nonzero", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_random_intersections_nonzero1");
+                       else
+                               dts_fail("utc_cairo_random_intersections_nonzero1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_raster_source_gl.c b/TC/testcase/utc_raster_source_gl.c
new file mode 100644 (file)
index 0000000..dd3182c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_raster_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_raster_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_raster_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite raster-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_raster_source1");
+                       else
+                               dts_fail("utc_cairo_raster_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_raster_source_image.c b/TC/testcase/utc_raster_source_image.c
new file mode 100644 (file)
index 0000000..188239d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_raster_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_raster_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_raster_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite raster-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_raster_source1");
+                       else
+                               dts_fail("utc_cairo_raster_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_fill_alpha_gl.c b/TC/testcase/utc_record1414x_fill_alpha_gl.c
new file mode 100644 (file)
index 0000000..7151ed6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record1414x_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_fill_alpha_image.c b/TC/testcase/utc_record1414x_fill_alpha_image.c
new file mode 100644 (file)
index 0000000..473c928
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record1414x_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_clip_gl.c b/TC/testcase/utc_record1414x_paint_alpha_clip_gl.c
new file mode 100644 (file)
index 0000000..d1fd7c3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_clip_image.c b/TC/testcase/utc_record1414x_paint_alpha_clip_image.c
new file mode 100644 (file)
index 0000000..02b65c9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_clip_mask_gl.c b/TC/testcase/utc_record1414x_paint_alpha_clip_mask_gl.c
new file mode 100644 (file)
index 0000000..ebfcfdf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_clip_mask_image.c b/TC/testcase/utc_record1414x_paint_alpha_clip_mask_image.c
new file mode 100644 (file)
index 0000000..d81da4d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_gl.c b/TC/testcase/utc_record1414x_paint_alpha_gl.c
new file mode 100644 (file)
index 0000000..569b354
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_image.c b/TC/testcase/utc_record1414x_paint_alpha_image.c
new file mode 100644 (file)
index 0000000..64165a0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_solid_clip_gl.c b/TC/testcase/utc_record1414x_paint_alpha_solid_clip_gl.c
new file mode 100644 (file)
index 0000000..0af8fea
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_alpha_solid_clip_image.c b/TC/testcase/utc_record1414x_paint_alpha_solid_clip_image.c
new file mode 100644 (file)
index 0000000..6912ef8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_gl.c b/TC/testcase/utc_record1414x_paint_gl.c
new file mode 100644 (file)
index 0000000..641cede
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_paint_image.c b/TC/testcase/utc_record1414x_paint_image.c
new file mode 100644 (file)
index 0000000..741c51b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_paint1");
+                       else
+                               dts_fail("utc_cairo_record1414x_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_select_font_face_gl.c b/TC/testcase/utc_record1414x_select_font_face_gl.c
new file mode 100644 (file)
index 0000000..1363019
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record1414x_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_select_font_face_image.c b/TC/testcase/utc_record1414x_select_font_face_image.c
new file mode 100644 (file)
index 0000000..c0ef82f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record1414x_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_self_intersecting_gl.c b/TC/testcase/utc_record1414x_self_intersecting_gl.c
new file mode 100644 (file)
index 0000000..c3d199c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record1414x_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_self_intersecting_image.c b/TC/testcase/utc_record1414x_self_intersecting_image.c
new file mode 100644 (file)
index 0000000..ed81571
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record1414x_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_text_transform_gl.c b/TC/testcase/utc_record1414x_text_transform_gl.c
new file mode 100644 (file)
index 0000000..f92b021
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record1414x_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record1414x_text_transform_image.c b/TC/testcase/utc_record1414x_text_transform_image.c
new file mode 100644 (file)
index 0000000..b6e80f6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record1414x_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record1414x_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record1414x_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record1414x-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record1414x_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record1414x_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_fill_alpha_gl.c b/TC/testcase/utc_record2x_fill_alpha_gl.c
new file mode 100644 (file)
index 0000000..e672a0d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record2x_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_fill_alpha_image.c b/TC/testcase/utc_record2x_fill_alpha_image.c
new file mode 100644 (file)
index 0000000..9940a07
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record2x_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_clip_gl.c b/TC/testcase/utc_record2x_paint_alpha_clip_gl.c
new file mode 100644 (file)
index 0000000..cbda6fb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_clip_image.c b/TC/testcase/utc_record2x_paint_alpha_clip_image.c
new file mode 100644 (file)
index 0000000..955ec52
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_clip_mask_gl.c b/TC/testcase/utc_record2x_paint_alpha_clip_mask_gl.c
new file mode 100644 (file)
index 0000000..be54a56
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_clip_mask_image.c b/TC/testcase/utc_record2x_paint_alpha_clip_mask_image.c
new file mode 100644 (file)
index 0000000..74e19fb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_gl.c b/TC/testcase/utc_record2x_paint_alpha_gl.c
new file mode 100644 (file)
index 0000000..84b0508
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_image.c b/TC/testcase/utc_record2x_paint_alpha_image.c
new file mode 100644 (file)
index 0000000..acee312
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_solid_clip_gl.c b/TC/testcase/utc_record2x_paint_alpha_solid_clip_gl.c
new file mode 100644 (file)
index 0000000..3a4273c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_alpha_solid_clip_image.c b/TC/testcase/utc_record2x_paint_alpha_solid_clip_image.c
new file mode 100644 (file)
index 0000000..402160d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_gl.c b/TC/testcase/utc_record2x_paint_gl.c
new file mode 100644 (file)
index 0000000..bfdfe24
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_paint_image.c b/TC/testcase/utc_record2x_paint_image.c
new file mode 100644 (file)
index 0000000..049e862
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_paint1");
+                       else
+                               dts_fail("utc_cairo_record2x_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_select_font_face_gl.c b/TC/testcase/utc_record2x_select_font_face_gl.c
new file mode 100644 (file)
index 0000000..b777462
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record2x_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_select_font_face_image.c b/TC/testcase/utc_record2x_select_font_face_image.c
new file mode 100644 (file)
index 0000000..88db5b6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record2x_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_self_intersecting_gl.c b/TC/testcase/utc_record2x_self_intersecting_gl.c
new file mode 100644 (file)
index 0000000..145493a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record2x_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_self_intersecting_image.c b/TC/testcase/utc_record2x_self_intersecting_image.c
new file mode 100644 (file)
index 0000000..10099a9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record2x_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_text_transform_gl.c b/TC/testcase/utc_record2x_text_transform_gl.c
new file mode 100644 (file)
index 0000000..bb38611
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record2x_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record2x_text_transform_image.c b/TC/testcase/utc_record2x_text_transform_image.c
new file mode 100644 (file)
index 0000000..ca5d776
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record2x_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record2x_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record2x_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record2x-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record2x_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record2x_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_fill_alpha_gl.c b/TC/testcase/utc_record90_fill_alpha_gl.c
new file mode 100644 (file)
index 0000000..af96141
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record90_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_fill_alpha_image.c b/TC/testcase/utc_record90_fill_alpha_image.c
new file mode 100644 (file)
index 0000000..2e9cd63
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record90_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_clip_gl.c b/TC/testcase/utc_record90_paint_alpha_clip_gl.c
new file mode 100644 (file)
index 0000000..c8b56d0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_clip_image.c b/TC/testcase/utc_record90_paint_alpha_clip_image.c
new file mode 100644 (file)
index 0000000..81c3a47
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_clip_mask_gl.c b/TC/testcase/utc_record90_paint_alpha_clip_mask_gl.c
new file mode 100644 (file)
index 0000000..a2cd2d7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_clip_mask_image.c b/TC/testcase/utc_record90_paint_alpha_clip_mask_image.c
new file mode 100644 (file)
index 0000000..72aac9a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_gl.c b/TC/testcase/utc_record90_paint_alpha_gl.c
new file mode 100644 (file)
index 0000000..8f82afb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_image.c b/TC/testcase/utc_record90_paint_alpha_image.c
new file mode 100644 (file)
index 0000000..9917c3c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_solid_clip_gl.c b/TC/testcase/utc_record90_paint_alpha_solid_clip_gl.c
new file mode 100644 (file)
index 0000000..e83bba3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_alpha_solid_clip_image.c b/TC/testcase/utc_record90_paint_alpha_solid_clip_image.c
new file mode 100644 (file)
index 0000000..c99ec20
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record90_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_gl.c b/TC/testcase/utc_record90_paint_gl.c
new file mode 100644 (file)
index 0000000..e1dd2bd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint1");
+                       else
+                               dts_fail("utc_cairo_record90_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_paint_image.c b/TC/testcase/utc_record90_paint_image.c
new file mode 100644 (file)
index 0000000..3a23f97
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_paint1");
+                       else
+                               dts_fail("utc_cairo_record90_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_select_font_face_gl.c b/TC/testcase/utc_record90_select_font_face_gl.c
new file mode 100644 (file)
index 0000000..67533d2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record90_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_select_font_face_image.c b/TC/testcase/utc_record90_select_font_face_image.c
new file mode 100644 (file)
index 0000000..fc6e166
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record90_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_self_intersecting_gl.c b/TC/testcase/utc_record90_self_intersecting_gl.c
new file mode 100644 (file)
index 0000000..2b76ca2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record90_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_self_intersecting_image.c b/TC/testcase/utc_record90_self_intersecting_image.c
new file mode 100644 (file)
index 0000000..9ab9b44
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record90_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_text_transform_gl.c b/TC/testcase/utc_record90_text_transform_gl.c
new file mode 100644 (file)
index 0000000..993c3ae
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record90_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record90_text_transform_image.c b/TC/testcase/utc_record90_text_transform_image.c
new file mode 100644 (file)
index 0000000..6e614f1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record90_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record90_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record90_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record90-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record90_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record90_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_none_gl.c b/TC/testcase/utc_record_extend_none_gl.c
new file mode 100644 (file)
index 0000000..b108706
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_none1");
+                       else
+                               dts_fail("utc_cairo_record_extend_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_none_image.c b/TC/testcase/utc_record_extend_none_image.c
new file mode 100644 (file)
index 0000000..c84e587
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_none1");
+                       else
+                               dts_fail("utc_cairo_record_extend_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_none_similar_gl.c b/TC/testcase/utc_record_extend_none_similar_gl.c
new file mode 100644 (file)
index 0000000..78f307a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_none_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_none_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_none_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-none-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_none_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_none_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_none_similar_image.c b/TC/testcase/utc_record_extend_none_similar_image.c
new file mode 100644 (file)
index 0000000..970ba10
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_none_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_none_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_none_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-none-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_none_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_none_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_pad_gl.c b/TC/testcase/utc_record_extend_pad_gl.c
new file mode 100644 (file)
index 0000000..eb37913
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_record_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_pad_image.c b/TC/testcase/utc_record_extend_pad_image.c
new file mode 100644 (file)
index 0000000..5124a22
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_record_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_pad_similar_gl.c b/TC/testcase/utc_record_extend_pad_similar_gl.c
new file mode 100644 (file)
index 0000000..57eae4f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_pad_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_pad_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_pad_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-pad-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_pad_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_pad_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_pad_similar_image.c b/TC/testcase/utc_record_extend_pad_similar_image.c
new file mode 100644 (file)
index 0000000..77e13da
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_pad_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_pad_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_pad_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-pad-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_pad_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_pad_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_reflect_gl.c b/TC/testcase/utc_record_extend_reflect_gl.c
new file mode 100644 (file)
index 0000000..9b15109
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_record_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_reflect_image.c b/TC/testcase/utc_record_extend_reflect_image.c
new file mode 100644 (file)
index 0000000..0536d62
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_record_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_reflect_similar_gl.c b/TC/testcase/utc_record_extend_reflect_similar_gl.c
new file mode 100644 (file)
index 0000000..d0da69d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_reflect_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_reflect_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_reflect_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-reflect-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_reflect_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_reflect_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_reflect_similar_image.c b/TC/testcase/utc_record_extend_reflect_similar_image.c
new file mode 100644 (file)
index 0000000..ad2466b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_reflect_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_reflect_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_reflect_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-reflect-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_reflect_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_reflect_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_repeat_gl.c b/TC/testcase/utc_record_extend_repeat_gl.c
new file mode 100644 (file)
index 0000000..90ce69f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_record_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_repeat_image.c b/TC/testcase/utc_record_extend_repeat_image.c
new file mode 100644 (file)
index 0000000..bed66b1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_record_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_repeat_similar_gl.c b/TC/testcase/utc_record_extend_repeat_similar_gl.c
new file mode 100644 (file)
index 0000000..23e7099
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_repeat_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_repeat_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_repeat_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-repeat-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_repeat_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_repeat_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_extend_repeat_similar_image.c b/TC/testcase/utc_record_extend_repeat_similar_image.c
new file mode 100644 (file)
index 0000000..d1d7d80
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_extend_repeat_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_extend_repeat_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_extend_repeat_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-extend-repeat-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_extend_repeat_similar1");
+                       else
+                               dts_fail("utc_cairo_record_extend_repeat_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_fill_alpha_gl.c b/TC/testcase/utc_record_fill_alpha_gl.c
new file mode 100644 (file)
index 0000000..36764ac
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_fill_alpha_image.c b/TC/testcase/utc_record_fill_alpha_image.c
new file mode 100644 (file)
index 0000000..2a065f0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_fill_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_fill_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_fill_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-fill-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_fill_alpha1");
+                       else
+                               dts_fail("utc_cairo_record_fill_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_mesh_gl.c b/TC/testcase/utc_record_mesh_gl.c
new file mode 100644 (file)
index 0000000..8a906d5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_mesh1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_mesh1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_mesh1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-mesh", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_mesh1");
+                       else
+                               dts_fail("utc_cairo_record_mesh1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_mesh_image.c b/TC/testcase/utc_record_mesh_image.c
new file mode 100644 (file)
index 0000000..f8bcb6c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_mesh1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_mesh1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_mesh1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-mesh", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_mesh1");
+                       else
+                               dts_fail("utc_cairo_record_mesh1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_clip_gl.c b/TC/testcase/utc_record_paint_alpha_clip_gl.c
new file mode 100644 (file)
index 0000000..b584ebb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_clip_image.c b/TC/testcase/utc_record_paint_alpha_clip_image.c
new file mode 100644 (file)
index 0000000..7283b8f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha_clip1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_clip_mask_gl.c b/TC/testcase/utc_record_paint_alpha_clip_mask_gl.c
new file mode 100644 (file)
index 0000000..ff1112b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_clip_mask_image.c b/TC/testcase/utc_record_paint_alpha_clip_mask_image.c
new file mode 100644 (file)
index 0000000..570421b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha_clip_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha_clip_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha_clip_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha-clip-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha_clip_mask1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha_clip_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_gl.c b/TC/testcase/utc_record_paint_alpha_gl.c
new file mode 100644 (file)
index 0000000..606d176
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_image.c b/TC/testcase/utc_record_paint_alpha_image.c
new file mode 100644 (file)
index 0000000..7d24fcc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_solid_clip_gl.c b/TC/testcase/utc_record_paint_alpha_solid_clip_gl.c
new file mode 100644 (file)
index 0000000..6751e1a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_alpha_solid_clip_image.c b/TC/testcase/utc_record_paint_alpha_solid_clip_image.c
new file mode 100644 (file)
index 0000000..e7c1c87
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint_alpha_solid_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint_alpha_solid_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint_alpha_solid_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint-alpha-solid-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint_alpha_solid_clip1");
+                       else
+                               dts_fail("utc_cairo_record_paint_alpha_solid_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_gl.c b/TC/testcase/utc_record_paint_gl.c
new file mode 100644 (file)
index 0000000..d8fa35b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint1");
+                       else
+                               dts_fail("utc_cairo_record_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_paint_image.c b/TC/testcase/utc_record_paint_image.c
new file mode 100644 (file)
index 0000000..7bf318a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_paint1");
+                       else
+                               dts_fail("utc_cairo_record_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_select_font_face_gl.c b/TC/testcase/utc_record_select_font_face_gl.c
new file mode 100644 (file)
index 0000000..2472b7d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_select_font_face_image.c b/TC/testcase/utc_record_select_font_face_image.c
new file mode 100644 (file)
index 0000000..b092377
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_record_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_self_intersecting_gl.c b/TC/testcase/utc_record_self_intersecting_gl.c
new file mode 100644 (file)
index 0000000..6ec4f82
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_self_intersecting_image.c b/TC/testcase/utc_record_self_intersecting_image.c
new file mode 100644 (file)
index 0000000..1c43d44
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_record_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_text_transform_gl.c b/TC/testcase/utc_record_text_transform_gl.c
new file mode 100644 (file)
index 0000000..c872cb0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_record_text_transform_image.c b/TC/testcase/utc_record_text_transform_image.c
new file mode 100644 (file)
index 0000000..0ec5910
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_record_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_record_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_record_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite record-text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_record_text_transform1");
+                       else
+                               dts_fail("utc_cairo_record_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_none_gl.c b/TC/testcase/utc_recording_surface_extend_none_gl.c
new file mode 100644 (file)
index 0000000..f65a5f6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_none1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_none_image.c b/TC/testcase/utc_recording_surface_extend_none_image.c
new file mode 100644 (file)
index 0000000..8636057
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_none1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_pad_gl.c b/TC/testcase/utc_recording_surface_extend_pad_gl.c
new file mode 100644 (file)
index 0000000..fbf0271
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_pad_image.c b/TC/testcase/utc_recording_surface_extend_pad_image.c
new file mode 100644 (file)
index 0000000..e47b2a6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_reflect_gl.c b/TC/testcase/utc_recording_surface_extend_reflect_gl.c
new file mode 100644 (file)
index 0000000..f403a2d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_reflect_image.c b/TC/testcase/utc_recording_surface_extend_reflect_image.c
new file mode 100644 (file)
index 0000000..22c8af0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_repeat_gl.c b/TC/testcase/utc_recording_surface_extend_repeat_gl.c
new file mode 100644 (file)
index 0000000..8e79cb6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_extend_repeat_image.c b/TC/testcase/utc_recording_surface_extend_repeat_image.c
new file mode 100644 (file)
index 0000000..0149c8c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_over_gl.c b/TC/testcase/utc_recording_surface_over_gl.c
new file mode 100644 (file)
index 0000000..8f259e4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_over1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_over1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_over1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-over", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_over1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_over1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_over_image.c b/TC/testcase/utc_recording_surface_over_image.c
new file mode 100644 (file)
index 0000000..6f31df4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_over1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_over1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_over1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-over", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_over1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_over1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_source_gl.c b/TC/testcase/utc_recording_surface_source_gl.c
new file mode 100644 (file)
index 0000000..865e858
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_source1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_recording_surface_source_image.c b/TC/testcase/utc_recording_surface_source_image.c
new file mode 100644 (file)
index 0000000..c45114a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_recording_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_recording_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_recording_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite recording-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_recording_surface_source1");
+                       else
+                               dts_fail("utc_cairo_recording_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectangle_rounding_error_gl.c b/TC/testcase/utc_rectangle_rounding_error_gl.c
new file mode 100644 (file)
index 0000000..c90edf4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectangle_rounding_error1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectangle_rounding_error1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectangle_rounding_error1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectangle-rounding-error", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectangle_rounding_error1");
+                       else
+                               dts_fail("utc_cairo_rectangle_rounding_error1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectangle_rounding_error_image.c b/TC/testcase/utc_rectangle_rounding_error_image.c
new file mode 100644 (file)
index 0000000..490829d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectangle_rounding_error1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectangle_rounding_error1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectangle_rounding_error1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectangle-rounding-error", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectangle_rounding_error1");
+                       else
+                               dts_fail("utc_cairo_rectangle_rounding_error1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_dash_gl.c b/TC/testcase/utc_rectilinear_dash_gl.c
new file mode 100644 (file)
index 0000000..760dcbf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_dash1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_dash_image.c b/TC/testcase/utc_rectilinear_dash_image.c
new file mode 100644 (file)
index 0000000..707b31d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_dash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_dash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_dash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-dash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_dash1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_dash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_dash_scale_gl.c b/TC/testcase/utc_rectilinear_dash_scale_gl.c
new file mode 100644 (file)
index 0000000..5b30404
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_dash_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_dash_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_dash_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-dash-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_dash_scale1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_dash_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_dash_scale_image.c b/TC/testcase/utc_rectilinear_dash_scale_image.c
new file mode 100644 (file)
index 0000000..2da9155
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_dash_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_dash_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_dash_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-dash-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_dash_scale1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_dash_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_dash_scale_unaligned_gl.c b/TC/testcase/utc_rectilinear_dash_scale_unaligned_gl.c
new file mode 100644 (file)
index 0000000..4d67cee
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_dash_scale_unaligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_dash_scale_unaligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_dash_scale_unaligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-dash-scale-unaligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_dash_scale_unaligned1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_dash_scale_unaligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_dash_scale_unaligned_image.c b/TC/testcase/utc_rectilinear_dash_scale_unaligned_image.c
new file mode 100644 (file)
index 0000000..b29a1f0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_dash_scale_unaligned1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_dash_scale_unaligned1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_dash_scale_unaligned1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-dash-scale-unaligned", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_dash_scale_unaligned1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_dash_scale_unaligned1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_fill_gl.c b/TC/testcase/utc_rectilinear_fill_gl.c
new file mode 100644 (file)
index 0000000..825c789
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_fill1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_fill_image.c b/TC/testcase/utc_rectilinear_fill_image.c
new file mode 100644 (file)
index 0000000..b03e14d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_fill1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_grid_gl.c b/TC/testcase/utc_rectilinear_grid_gl.c
new file mode 100644 (file)
index 0000000..07c326a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_grid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_grid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_grid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-grid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_grid1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_grid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_grid_image.c b/TC/testcase/utc_rectilinear_grid_image.c
new file mode 100644 (file)
index 0000000..06ad966
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_grid1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_grid1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_grid1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-grid", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_grid1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_grid1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_miter_limit_gl.c b/TC/testcase/utc_rectilinear_miter_limit_gl.c
new file mode 100644 (file)
index 0000000..84ec928
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_miter_limit1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_miter_limit1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_miter_limit1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-miter-limit", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_miter_limit1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_miter_limit1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_miter_limit_image.c b/TC/testcase/utc_rectilinear_miter_limit_image.c
new file mode 100644 (file)
index 0000000..42918ba
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_miter_limit1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_miter_limit1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_miter_limit1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-miter-limit", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_miter_limit1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_miter_limit1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_stroke_gl.c b/TC/testcase/utc_rectilinear_stroke_gl.c
new file mode 100644 (file)
index 0000000..b224df5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_stroke1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rectilinear_stroke_image.c b/TC/testcase/utc_rectilinear_stroke_image.c
new file mode 100644 (file)
index 0000000..845c7ed
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rectilinear_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rectilinear_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rectilinear_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rectilinear-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rectilinear_stroke1");
+                       else
+                               dts_fail("utc_cairo_rectilinear_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_reflected_stroke_gl.c b/TC/testcase/utc_reflected_stroke_gl.c
new file mode 100644 (file)
index 0000000..b96d7cf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_reflected_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_reflected_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_reflected_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite reflected-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_reflected_stroke1");
+                       else
+                               dts_fail("utc_cairo_reflected_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_reflected_stroke_image.c b/TC/testcase/utc_reflected_stroke_image.c
new file mode 100644 (file)
index 0000000..7f792f7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_reflected_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_reflected_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_reflected_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite reflected-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_reflected_stroke1");
+                       else
+                               dts_fail("utc_cairo_reflected_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rel_path_gl.c b/TC/testcase/utc_rel_path_gl.c
new file mode 100644 (file)
index 0000000..fa1c819
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rel_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rel_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rel_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rel-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rel_path1");
+                       else
+                               dts_fail("utc_cairo_rel_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rel_path_image.c b/TC/testcase/utc_rel_path_image.c
new file mode 100644 (file)
index 0000000..f9709e0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rel_path1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rel_path1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rel_path1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rel-path", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rel_path1");
+                       else
+                               dts_fail("utc_cairo_rel_path1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rgb24_ignore_alpha_gl.c b/TC/testcase/utc_rgb24_ignore_alpha_gl.c
new file mode 100644 (file)
index 0000000..21f2ec8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rgb24_ignore_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rgb24_ignore_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rgb24_ignore_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rgb24-ignore-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rgb24_ignore_alpha1");
+                       else
+                               dts_fail("utc_cairo_rgb24_ignore_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rgb24_ignore_alpha_image.c b/TC/testcase/utc_rgb24_ignore_alpha_image.c
new file mode 100644 (file)
index 0000000..4287965
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rgb24_ignore_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rgb24_ignore_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rgb24_ignore_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rgb24-ignore-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rgb24_ignore_alpha1");
+                       else
+                               dts_fail("utc_cairo_rgb24_ignore_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rotate_clip_image_surface_paint_gl.c b/TC/testcase/utc_rotate_clip_image_surface_paint_gl.c
new file mode 100644 (file)
index 0000000..0240057
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rotate_clip_image_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rotate_clip_image_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rotate_clip_image_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rotate-clip-image-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rotate_clip_image_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_rotate_clip_image_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rotate_clip_image_surface_paint_image.c b/TC/testcase/utc_rotate_clip_image_surface_paint_image.c
new file mode 100644 (file)
index 0000000..1416266
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rotate_clip_image_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rotate_clip_image_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rotate_clip_image_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rotate-clip-image-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rotate_clip_image_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_rotate_clip_image_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rotate_image_surface_paint_gl.c b/TC/testcase/utc_rotate_image_surface_paint_gl.c
new file mode 100644 (file)
index 0000000..7fa6e00
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rotate_image_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rotate_image_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rotate_image_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rotate-image-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rotate_image_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_rotate_image_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rotate_image_surface_paint_image.c b/TC/testcase/utc_rotate_image_surface_paint_image.c
new file mode 100644 (file)
index 0000000..bdfb3e4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rotate_image_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rotate_image_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rotate_image_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rotate-image-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rotate_image_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_rotate_image_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rotated_clip_gl.c b/TC/testcase/utc_rotated_clip_gl.c
new file mode 100644 (file)
index 0000000..c92cb30
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rotated_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rotated_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rotated_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rotated-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rotated_clip1");
+                       else
+                               dts_fail("utc_cairo_rotated_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rotated_clip_image.c b/TC/testcase/utc_rotated_clip_image.c
new file mode 100644 (file)
index 0000000..ffdd784
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rotated_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rotated_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rotated_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rotated-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rotated_clip1");
+                       else
+                               dts_fail("utc_cairo_rotated_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rounded_rectangle_fill_gl.c b/TC/testcase/utc_rounded_rectangle_fill_gl.c
new file mode 100644 (file)
index 0000000..903250b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rounded_rectangle_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rounded_rectangle_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rounded_rectangle_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rounded-rectangle-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rounded_rectangle_fill1");
+                       else
+                               dts_fail("utc_cairo_rounded_rectangle_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rounded_rectangle_fill_image.c b/TC/testcase/utc_rounded_rectangle_fill_image.c
new file mode 100644 (file)
index 0000000..e97adf6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rounded_rectangle_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rounded_rectangle_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rounded_rectangle_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rounded-rectangle-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rounded_rectangle_fill1");
+                       else
+                               dts_fail("utc_cairo_rounded_rectangle_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rounded_rectangle_stroke_gl.c b/TC/testcase/utc_rounded_rectangle_stroke_gl.c
new file mode 100644 (file)
index 0000000..50edb2f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rounded_rectangle_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rounded_rectangle_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rounded_rectangle_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rounded-rectangle-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rounded_rectangle_stroke1");
+                       else
+                               dts_fail("utc_cairo_rounded_rectangle_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_rounded_rectangle_stroke_image.c b/TC/testcase/utc_rounded_rectangle_stroke_image.c
new file mode 100644 (file)
index 0000000..7af0ca1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_rounded_rectangle_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_rounded_rectangle_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_rounded_rectangle_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite rounded-rectangle-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_rounded_rectangle_stroke1");
+                       else
+                               dts_fail("utc_cairo_rounded_rectangle_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_down_source_surface_paint_gl.c b/TC/testcase/utc_scale_down_source_surface_paint_gl.c
new file mode 100644 (file)
index 0000000..6c176b4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_down_source_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_down_source_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_down_source_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-down-source-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_down_source_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_scale_down_source_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_down_source_surface_paint_image.c b/TC/testcase/utc_scale_down_source_surface_paint_image.c
new file mode 100644 (file)
index 0000000..d1f6adc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_down_source_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_down_source_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_down_source_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-down-source-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_down_source_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_scale_down_source_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_offset_image_gl.c b/TC/testcase/utc_scale_offset_image_gl.c
new file mode 100644 (file)
index 0000000..2372136
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_offset_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_offset_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_offset_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-offset-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_offset_image1");
+                       else
+                               dts_fail("utc_cairo_scale_offset_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_offset_image_image.c b/TC/testcase/utc_scale_offset_image_image.c
new file mode 100644 (file)
index 0000000..21de1eb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_offset_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_offset_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_offset_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-offset-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_offset_image1");
+                       else
+                               dts_fail("utc_cairo_scale_offset_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_offset_similar_gl.c b/TC/testcase/utc_scale_offset_similar_gl.c
new file mode 100644 (file)
index 0000000..9aca28e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_offset_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_offset_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_offset_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-offset-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_offset_similar1");
+                       else
+                               dts_fail("utc_cairo_scale_offset_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_offset_similar_image.c b/TC/testcase/utc_scale_offset_similar_image.c
new file mode 100644 (file)
index 0000000..effef30
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_offset_similar1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_offset_similar1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_offset_similar1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-offset-similar", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_offset_similar1");
+                       else
+                               dts_fail("utc_cairo_scale_offset_similar1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_source_surface_paint_gl.c b/TC/testcase/utc_scale_source_surface_paint_gl.c
new file mode 100644 (file)
index 0000000..6d4e951
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_source_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_source_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_source_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-source-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_source_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_scale_source_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scale_source_surface_paint_image.c b/TC/testcase/utc_scale_source_surface_paint_image.c
new file mode 100644 (file)
index 0000000..836c0bd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scale_source_surface_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scale_source_surface_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scale_source_surface_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scale-source-surface-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scale_source_surface_paint1");
+                       else
+                               dts_fail("utc_cairo_scale_source_surface_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scaled_font_zero_matrix_gl.c b/TC/testcase/utc_scaled_font_zero_matrix_gl.c
new file mode 100644 (file)
index 0000000..7b0b722
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scaled_font_zero_matrix1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scaled_font_zero_matrix1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scaled_font_zero_matrix1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scaled-font-zero-matrix", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scaled_font_zero_matrix1");
+                       else
+                               dts_fail("utc_cairo_scaled_font_zero_matrix1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_scaled_font_zero_matrix_image.c b/TC/testcase/utc_scaled_font_zero_matrix_image.c
new file mode 100644 (file)
index 0000000..3996b8d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_scaled_font_zero_matrix1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_scaled_font_zero_matrix1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_scaled_font_zero_matrix1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite scaled-font-zero-matrix", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_scaled_font_zero_matrix1");
+                       else
+                               dts_fail("utc_cairo_scaled_font_zero_matrix1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_select_font_face_gl.c b/TC/testcase/utc_select_font_face_gl.c
new file mode 100644 (file)
index 0000000..447d3e6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_select_font_face_image.c b/TC/testcase/utc_select_font_face_image.c
new file mode 100644 (file)
index 0000000..3adc3da
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_select_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_select_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_select_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite select-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_select_font_face1");
+                       else
+                               dts_fail("utc_cairo_select_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_select_font_no_show_text_gl.c b/TC/testcase/utc_select_font_no_show_text_gl.c
new file mode 100644 (file)
index 0000000..2a32f21
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_select_font_no_show_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_select_font_no_show_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_select_font_no_show_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite select-font-no-show-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_select_font_no_show_text1");
+                       else
+                               dts_fail("utc_cairo_select_font_no_show_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_select_font_no_show_text_image.c b/TC/testcase/utc_select_font_no_show_text_image.c
new file mode 100644 (file)
index 0000000..7e7b2fa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_select_font_no_show_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_select_font_no_show_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_select_font_no_show_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite select-font-no-show-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_select_font_no_show_text1");
+                       else
+                               dts_fail("utc_cairo_select_font_no_show_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_self_copy_gl.c b/TC/testcase/utc_self_copy_gl.c
new file mode 100644 (file)
index 0000000..d53f5df
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_self_copy1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_self_copy1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_self_copy1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite self-copy", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_self_copy1");
+                       else
+                               dts_fail("utc_cairo_self_copy1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_self_copy_image.c b/TC/testcase/utc_self_copy_image.c
new file mode 100644 (file)
index 0000000..dda3b5f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_self_copy1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_self_copy1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_self_copy1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite self-copy", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_self_copy1");
+                       else
+                               dts_fail("utc_cairo_self_copy1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_self_copy_overlap_gl.c b/TC/testcase/utc_self_copy_overlap_gl.c
new file mode 100644 (file)
index 0000000..7befa9d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_self_copy_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_self_copy_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_self_copy_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite self-copy-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_self_copy_overlap1");
+                       else
+                               dts_fail("utc_cairo_self_copy_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_self_copy_overlap_image.c b/TC/testcase/utc_self_copy_overlap_image.c
new file mode 100644 (file)
index 0000000..6789c75
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_self_copy_overlap1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_self_copy_overlap1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_self_copy_overlap1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite self-copy-overlap", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_self_copy_overlap1");
+                       else
+                               dts_fail("utc_cairo_self_copy_overlap1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_self_intersecting_gl.c b/TC/testcase/utc_self_intersecting_gl.c
new file mode 100644 (file)
index 0000000..667124c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_self_intersecting_image.c b/TC/testcase/utc_self_intersecting_image.c
new file mode 100644 (file)
index 0000000..440a970
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_self_intersecting1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_self_intersecting1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_self_intersecting1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite self-intersecting", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_self_intersecting1");
+                       else
+                               dts_fail("utc_cairo_self_intersecting1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_set_source_gl.c b/TC/testcase/utc_set_source_gl.c
new file mode 100644 (file)
index 0000000..a1ece62
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_set_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_set_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_set_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite set-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_set_source1");
+                       else
+                               dts_fail("utc_cairo_set_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_set_source_image.c b/TC/testcase/utc_set_source_image.c
new file mode 100644 (file)
index 0000000..84e4ebf
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_set_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_set_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_set_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite set-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_set_source1");
+                       else
+                               dts_fail("utc_cairo_set_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_shape_general_convex_gl.c b/TC/testcase/utc_shape_general_convex_gl.c
new file mode 100644 (file)
index 0000000..e74e4f4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_shape_general_convex1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_shape_general_convex1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_shape_general_convex1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite shape-general-convex", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_shape_general_convex1");
+                       else
+                               dts_fail("utc_cairo_shape_general_convex1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_shape_general_convex_image.c b/TC/testcase/utc_shape_general_convex_image.c
new file mode 100644 (file)
index 0000000..697f205
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_shape_general_convex1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_shape_general_convex1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_shape_general_convex1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite shape-general-convex", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_shape_general_convex1");
+                       else
+                               dts_fail("utc_cairo_shape_general_convex1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_shape_sierpinski_gl.c b/TC/testcase/utc_shape_sierpinski_gl.c
new file mode 100644 (file)
index 0000000..8ca3413
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_shape_sierpinski1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_shape_sierpinski1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_shape_sierpinski1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite shape-sierpinski", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_shape_sierpinski1");
+                       else
+                               dts_fail("utc_cairo_shape_sierpinski1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_shape_sierpinski_image.c b/TC/testcase/utc_shape_sierpinski_image.c
new file mode 100644 (file)
index 0000000..2295ba8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_shape_sierpinski1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_shape_sierpinski1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_shape_sierpinski1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite shape-sierpinski", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_shape_sierpinski1");
+                       else
+                               dts_fail("utc_cairo_shape_sierpinski1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_show_glyphs_advance_gl.c b/TC/testcase/utc_show_glyphs_advance_gl.c
new file mode 100644 (file)
index 0000000..4bd4748
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_show_glyphs_advance1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_show_glyphs_advance1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_show_glyphs_advance1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite show-glyphs-advance", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_show_glyphs_advance1");
+                       else
+                               dts_fail("utc_cairo_show_glyphs_advance1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_show_glyphs_advance_image.c b/TC/testcase/utc_show_glyphs_advance_image.c
new file mode 100644 (file)
index 0000000..4a8f012
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_show_glyphs_advance1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_show_glyphs_advance1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_show_glyphs_advance1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite show-glyphs-advance", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_show_glyphs_advance1");
+                       else
+                               dts_fail("utc_cairo_show_glyphs_advance1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_show_glyphs_many_gl.c b/TC/testcase/utc_show_glyphs_many_gl.c
new file mode 100644 (file)
index 0000000..7bf61fa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_show_glyphs_many1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_show_glyphs_many1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_show_glyphs_many1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite show-glyphs-many", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_show_glyphs_many1");
+                       else
+                               dts_fail("utc_cairo_show_glyphs_many1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_show_glyphs_many_image.c b/TC/testcase/utc_show_glyphs_many_image.c
new file mode 100644 (file)
index 0000000..058b2ee
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_show_glyphs_many1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_show_glyphs_many1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_show_glyphs_many1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite show-glyphs-many", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_show_glyphs_many1");
+                       else
+                               dts_fail("utc_cairo_show_glyphs_many1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_show_text_current_point_gl.c b/TC/testcase/utc_show_text_current_point_gl.c
new file mode 100644 (file)
index 0000000..3cc8c87
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_show_text_current_point1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_show_text_current_point1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_show_text_current_point1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite show-text-current-point", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_show_text_current_point1");
+                       else
+                               dts_fail("utc_cairo_show_text_current_point1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_show_text_current_point_image.c b/TC/testcase/utc_show_text_current_point_image.c
new file mode 100644 (file)
index 0000000..080d31e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_show_text_current_point1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_show_text_current_point1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_show_text_current_point1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite show-text-current-point", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_show_text_current_point1");
+                       else
+                               dts_fail("utc_cairo_show_text_current_point1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_skew_extreme_gl.c b/TC/testcase/utc_skew_extreme_gl.c
new file mode 100644 (file)
index 0000000..7cfd5e7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_skew_extreme1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_skew_extreme1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_skew_extreme1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite skew-extreme", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_skew_extreme1");
+                       else
+                               dts_fail("utc_cairo_skew_extreme1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_skew_extreme_image.c b/TC/testcase/utc_skew_extreme_image.c
new file mode 100644 (file)
index 0000000..93096e9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_skew_extreme1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_skew_extreme1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_skew_extreme1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite skew-extreme", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_skew_extreme1");
+                       else
+                               dts_fail("utc_cairo_skew_extreme1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_fill_gl.c b/TC/testcase/utc_smask_fill_gl.c
new file mode 100644 (file)
index 0000000..a1f3278
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_fill1(void)
+{
+       char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_fill1");
+                       else
+                               dts_fail("utc_cairo_smask_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_fill_image.c b/TC/testcase/utc_smask_fill_image.c
new file mode 100644 (file)
index 0000000..5000a6f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_fill1(void)
+{
+       char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_fill1");
+                       else
+                               dts_fail("utc_cairo_smask_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_gl.c b/TC/testcase/utc_smask_gl.c
new file mode 100644 (file)
index 0000000..18fca7b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask1");
+                       else
+                               dts_fail("utc_cairo_smask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_image.c b/TC/testcase/utc_smask_image.c
new file mode 100644 (file)
index 0000000..20d4d80
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask1");
+                       else
+                               dts_fail("utc_cairo_smask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_image_mask_gl.c b/TC/testcase/utc_smask_image_mask_gl.c
new file mode 100644 (file)
index 0000000..fce8c30
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_image_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_image_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_image_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-image-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_image_mask1");
+                       else
+                               dts_fail("utc_cairo_smask_image_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_image_mask_image.c b/TC/testcase/utc_smask_image_mask_image.c
new file mode 100644 (file)
index 0000000..09f7bbb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_image_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_image_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_image_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-image-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_image_mask1");
+                       else
+                               dts_fail("utc_cairo_smask_image_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_mask_gl.c b/TC/testcase/utc_smask_mask_gl.c
new file mode 100644 (file)
index 0000000..f91e778
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_mask1");
+                       else
+                               dts_fail("utc_cairo_smask_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_mask_image.c b/TC/testcase/utc_smask_mask_image.c
new file mode 100644 (file)
index 0000000..07364fb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_mask1");
+                       else
+                               dts_fail("utc_cairo_smask_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_paint_gl.c b/TC/testcase/utc_smask_paint_gl.c
new file mode 100644 (file)
index 0000000..673a439
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_paint1");
+                       else
+                               dts_fail("utc_cairo_smask_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_paint_image.c b/TC/testcase/utc_smask_paint_image.c
new file mode 100644 (file)
index 0000000..ed72df0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_paint1");
+                       else
+                               dts_fail("utc_cairo_smask_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_stroke_gl.c b/TC/testcase/utc_smask_stroke_gl.c
new file mode 100644 (file)
index 0000000..acaee6f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_stroke1");
+                       else
+                               dts_fail("utc_cairo_smask_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_stroke_image.c b/TC/testcase/utc_smask_stroke_image.c
new file mode 100644 (file)
index 0000000..85128cb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_stroke1");
+                       else
+                               dts_fail("utc_cairo_smask_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_text_gl.c b/TC/testcase/utc_smask_text_gl.c
new file mode 100644 (file)
index 0000000..9acff9c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_text1");
+                       else
+                               dts_fail("utc_cairo_smask_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_smask_text_image.c b/TC/testcase/utc_smask_text_image.c
new file mode 100644 (file)
index 0000000..bd2e1ee
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_smask_text1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_smask_text1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_smask_text1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite smask-text", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_smask_text1");
+                       else
+                               dts_fail("utc_cairo_smask_text1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_solid_pattern_cache_stress_gl.c b/TC/testcase/utc_solid_pattern_cache_stress_gl.c
new file mode 100644 (file)
index 0000000..0b7b1ec
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_solid_pattern_cache_stress1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_solid_pattern_cache_stress1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_solid_pattern_cache_stress1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite solid-pattern-cache-stress", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_solid_pattern_cache_stress1");
+                       else
+                               dts_fail("utc_cairo_solid_pattern_cache_stress1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_solid_pattern_cache_stress_image.c b/TC/testcase/utc_solid_pattern_cache_stress_image.c
new file mode 100644 (file)
index 0000000..e2ab0de
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_solid_pattern_cache_stress1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_solid_pattern_cache_stress1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_solid_pattern_cache_stress1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite solid-pattern-cache-stress", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_solid_pattern_cache_stress1");
+                       else
+                               dts_fail("utc_cairo_solid_pattern_cache_stress1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_source_clip_gl.c b/TC/testcase/utc_source_clip_gl.c
new file mode 100644 (file)
index 0000000..5987fdd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_source_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_source_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_source_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite source-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_source_clip1");
+                       else
+                               dts_fail("utc_cairo_source_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_source_clip_image.c b/TC/testcase/utc_source_clip_image.c
new file mode 100644 (file)
index 0000000..8243664
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_source_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_source_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_source_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite source-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_source_clip1");
+                       else
+                               dts_fail("utc_cairo_source_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_source_clip_scale_gl.c b/TC/testcase/utc_source_clip_scale_gl.c
new file mode 100644 (file)
index 0000000..4ea80c7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_source_clip_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_source_clip_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_source_clip_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite source-clip-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_source_clip_scale1");
+                       else
+                               dts_fail("utc_cairo_source_clip_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_source_clip_scale_image.c b/TC/testcase/utc_source_clip_scale_image.c
new file mode 100644 (file)
index 0000000..7d6929c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_source_clip_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_source_clip_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_source_clip_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite source-clip-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_source_clip_scale1");
+                       else
+                               dts_fail("utc_cairo_source_clip_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_source_surface_scale_paint_gl.c b/TC/testcase/utc_source_surface_scale_paint_gl.c
new file mode 100644 (file)
index 0000000..61b59d0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_source_surface_scale_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_source_surface_scale_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_source_surface_scale_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite source-surface-scale-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_source_surface_scale_paint1");
+                       else
+                               dts_fail("utc_cairo_source_surface_scale_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_source_surface_scale_paint_image.c b/TC/testcase/utc_source_surface_scale_paint_image.c
new file mode 100644 (file)
index 0000000..2819507
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_source_surface_scale_paint1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_source_surface_scale_paint1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_source_surface_scale_paint1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite source-surface-scale-paint", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_source_surface_scale_paint1");
+                       else
+                               dts_fail("utc_cairo_source_surface_scale_paint1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_spline_decomposition_gl.c b/TC/testcase/utc_spline_decomposition_gl.c
new file mode 100644 (file)
index 0000000..8470428
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_spline_decomposition1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_spline_decomposition1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_spline_decomposition1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite spline-decomposition", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_spline_decomposition1");
+                       else
+                               dts_fail("utc_cairo_spline_decomposition1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_spline_decomposition_image.c b/TC/testcase/utc_spline_decomposition_image.c
new file mode 100644 (file)
index 0000000..21414e9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_spline_decomposition1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_spline_decomposition1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_spline_decomposition1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite spline-decomposition", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_spline_decomposition1");
+                       else
+                               dts_fail("utc_cairo_spline_decomposition1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stride_12_image_gl.c b/TC/testcase/utc_stride_12_image_gl.c
new file mode 100644 (file)
index 0000000..40adb0b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stride_12_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stride_12_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stride_12_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stride-12-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stride_12_image1");
+                       else
+                               dts_fail("utc_cairo_stride_12_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stride_12_image_image.c b/TC/testcase/utc_stride_12_image_image.c
new file mode 100644 (file)
index 0000000..8e34ab1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stride_12_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stride_12_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stride_12_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stride-12-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stride_12_image1");
+                       else
+                               dts_fail("utc_cairo_stride_12_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_ctm_caps_gl.c b/TC/testcase/utc_stroke_ctm_caps_gl.c
new file mode 100644 (file)
index 0000000..c8f083b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_ctm_caps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_ctm_caps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_ctm_caps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-ctm-caps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_ctm_caps1");
+                       else
+                               dts_fail("utc_cairo_stroke_ctm_caps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_ctm_caps_image.c b/TC/testcase/utc_stroke_ctm_caps_image.c
new file mode 100644 (file)
index 0000000..20b5ca3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_ctm_caps1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_ctm_caps1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_ctm_caps1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-ctm-caps", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_ctm_caps1");
+                       else
+                               dts_fail("utc_cairo_stroke_ctm_caps1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_image_gl.c b/TC/testcase/utc_stroke_image_gl.c
new file mode 100644 (file)
index 0000000..fad88d1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_image1");
+                       else
+                               dts_fail("utc_cairo_stroke_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_image_image.c b/TC/testcase/utc_stroke_image_image.c
new file mode 100644 (file)
index 0000000..775d6bc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_image1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_image1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_image1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-image", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_image1");
+                       else
+                               dts_fail("utc_cairo_stroke_image1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_open_box_gl.c b/TC/testcase/utc_stroke_open_box_gl.c
new file mode 100644 (file)
index 0000000..484323c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_open_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_open_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_open_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-open-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_open_box1");
+                       else
+                               dts_fail("utc_cairo_stroke_open_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_open_box_image.c b/TC/testcase/utc_stroke_open_box_image.c
new file mode 100644 (file)
index 0000000..6d0ed88
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_open_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_open_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_open_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-open-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_open_box1");
+                       else
+                               dts_fail("utc_cairo_stroke_open_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_pattern_gl.c b/TC/testcase/utc_stroke_pattern_gl.c
new file mode 100644 (file)
index 0000000..d379542
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_pattern1");
+                       else
+                               dts_fail("utc_cairo_stroke_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_stroke_pattern_image.c b/TC/testcase/utc_stroke_pattern_image.c
new file mode 100644 (file)
index 0000000..d0094f5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_stroke_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_stroke_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_stroke_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite stroke-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_stroke_pattern1");
+                       else
+                               dts_fail("utc_cairo_stroke_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_gl.c b/TC/testcase/utc_subsurface_gl.c
new file mode 100644 (file)
index 0000000..a970f5c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface1");
+                       else
+                               dts_fail("utc_cairo_subsurface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_image.c b/TC/testcase/utc_subsurface_image.c
new file mode 100644 (file)
index 0000000..5dba254
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface1");
+                       else
+                               dts_fail("utc_cairo_subsurface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_image_repeat_gl.c b/TC/testcase/utc_subsurface_image_repeat_gl.c
new file mode 100644 (file)
index 0000000..2ddeef3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_image_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_image_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_image_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-image-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_image_repeat1");
+                       else
+                               dts_fail("utc_cairo_subsurface_image_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_image_repeat_image.c b/TC/testcase/utc_subsurface_image_repeat_image.c
new file mode 100644 (file)
index 0000000..2cff3fb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_image_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_image_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_image_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-image-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_image_repeat1");
+                       else
+                               dts_fail("utc_cairo_subsurface_image_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_modify_child_gl.c b/TC/testcase/utc_subsurface_modify_child_gl.c
new file mode 100644 (file)
index 0000000..7d23a66
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_modify_child1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_modify_child1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_modify_child1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-modify-child", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_modify_child1");
+                       else
+                               dts_fail("utc_cairo_subsurface_modify_child1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_modify_child_image.c b/TC/testcase/utc_subsurface_modify_child_image.c
new file mode 100644 (file)
index 0000000..423bf0c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_modify_child1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_modify_child1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_modify_child1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-modify-child", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_modify_child1");
+                       else
+                               dts_fail("utc_cairo_subsurface_modify_child1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_modify_parent_gl.c b/TC/testcase/utc_subsurface_modify_parent_gl.c
new file mode 100644 (file)
index 0000000..ef6c6f5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_modify_parent1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_modify_parent1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_modify_parent1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-modify-parent", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_modify_parent1");
+                       else
+                               dts_fail("utc_cairo_subsurface_modify_parent1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_modify_parent_image.c b/TC/testcase/utc_subsurface_modify_parent_image.c
new file mode 100644 (file)
index 0000000..f77d6f5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_modify_parent1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_modify_parent1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_modify_parent1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-modify-parent", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_modify_parent1");
+                       else
+                               dts_fail("utc_cairo_subsurface_modify_parent1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_outside_target_gl.c b/TC/testcase/utc_subsurface_outside_target_gl.c
new file mode 100644 (file)
index 0000000..eb1040a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_outside_target1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_outside_target1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_outside_target1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-outside-target", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_outside_target1");
+                       else
+                               dts_fail("utc_cairo_subsurface_outside_target1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_outside_target_image.c b/TC/testcase/utc_subsurface_outside_target_image.c
new file mode 100644 (file)
index 0000000..c93a67e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_outside_target1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_outside_target1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_outside_target1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-outside-target", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_outside_target1");
+                       else
+                               dts_fail("utc_cairo_subsurface_outside_target1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_pad_gl.c b/TC/testcase/utc_subsurface_pad_gl.c
new file mode 100644 (file)
index 0000000..4b32a52
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_pad1");
+                       else
+                               dts_fail("utc_cairo_subsurface_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_pad_image.c b/TC/testcase/utc_subsurface_pad_image.c
new file mode 100644 (file)
index 0000000..53bce2c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_pad1");
+                       else
+                               dts_fail("utc_cairo_subsurface_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_reflect_gl.c b/TC/testcase/utc_subsurface_reflect_gl.c
new file mode 100644 (file)
index 0000000..53bbb5b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_reflect1");
+                       else
+                               dts_fail("utc_cairo_subsurface_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_reflect_image.c b/TC/testcase/utc_subsurface_reflect_image.c
new file mode 100644 (file)
index 0000000..c1b592f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_reflect1");
+                       else
+                               dts_fail("utc_cairo_subsurface_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_repeat_gl.c b/TC/testcase/utc_subsurface_repeat_gl.c
new file mode 100644 (file)
index 0000000..0309efd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_repeat1");
+                       else
+                               dts_fail("utc_cairo_subsurface_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_repeat_image.c b/TC/testcase/utc_subsurface_repeat_image.c
new file mode 100644 (file)
index 0000000..79b2c4b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_repeat1");
+                       else
+                               dts_fail("utc_cairo_subsurface_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_scale_gl.c b/TC/testcase/utc_subsurface_scale_gl.c
new file mode 100644 (file)
index 0000000..d23667d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_scale1");
+                       else
+                               dts_fail("utc_cairo_subsurface_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_scale_image.c b/TC/testcase/utc_subsurface_scale_image.c
new file mode 100644 (file)
index 0000000..0dbc772
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_scale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_scale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_scale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-scale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_scale1");
+                       else
+                               dts_fail("utc_cairo_subsurface_scale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_similar_repeat_gl.c b/TC/testcase/utc_subsurface_similar_repeat_gl.c
new file mode 100644 (file)
index 0000000..d4cd617
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_similar_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_similar_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_similar_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-similar-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_similar_repeat1");
+                       else
+                               dts_fail("utc_cairo_subsurface_similar_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_subsurface_similar_repeat_image.c b/TC/testcase/utc_subsurface_similar_repeat_image.c
new file mode 100644 (file)
index 0000000..fba4a2a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_subsurface_similar_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_subsurface_similar_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_subsurface_similar_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite subsurface-similar-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_subsurface_similar_repeat1");
+                       else
+                               dts_fail("utc_cairo_subsurface_similar_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_finish_twice_gl.c b/TC/testcase/utc_surface_finish_twice_gl.c
new file mode 100644 (file)
index 0000000..e3247ef
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_finish_twice1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_finish_twice1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_finish_twice1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-finish-twice", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_finish_twice1");
+                       else
+                               dts_fail("utc_cairo_surface_finish_twice1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_finish_twice_image.c b/TC/testcase/utc_surface_finish_twice_image.c
new file mode 100644 (file)
index 0000000..2b38f86
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_finish_twice1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_finish_twice1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_finish_twice1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-finish-twice", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_finish_twice1");
+                       else
+                               dts_fail("utc_cairo_surface_finish_twice1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_big_scale_down_gl.c b/TC/testcase/utc_surface_pattern_big_scale_down_gl.c
new file mode 100644 (file)
index 0000000..79b3a96
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_big_scale_down1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_big_scale_down1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_big_scale_down1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-big-scale-down", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_big_scale_down1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_big_scale_down1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_big_scale_down_image.c b/TC/testcase/utc_surface_pattern_big_scale_down_image.c
new file mode 100644 (file)
index 0000000..f78cc1b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_big_scale_down1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_big_scale_down1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_big_scale_down1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-big-scale-down", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_big_scale_down1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_big_scale_down1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_gl.c b/TC/testcase/utc_surface_pattern_gl.c
new file mode 100644 (file)
index 0000000..07ed82d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_image.c b/TC/testcase/utc_surface_pattern_image.c
new file mode 100644 (file)
index 0000000..ef62b50
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_operator_gl.c b/TC/testcase/utc_surface_pattern_operator_gl.c
new file mode 100644 (file)
index 0000000..b5f4d04
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_operator1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_operator_image.c b/TC/testcase/utc_surface_pattern_operator_image.c
new file mode 100644 (file)
index 0000000..f1d4b00
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_operator1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_none_gl.c b/TC/testcase/utc_surface_pattern_scale_down_extend_none_gl.c
new file mode 100644 (file)
index 0000000..bf4a73e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_none1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_none_image.c b/TC/testcase/utc_surface_pattern_scale_down_extend_none_image.c
new file mode 100644 (file)
index 0000000..38d0aba
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_none1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_pad_gl.c b/TC/testcase/utc_surface_pattern_scale_down_extend_pad_gl.c
new file mode 100644 (file)
index 0000000..2133eaa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_pad_image.c b/TC/testcase/utc_surface_pattern_scale_down_extend_pad_image.c
new file mode 100644 (file)
index 0000000..823c26a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_pad1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_pad1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_pad1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-pad", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_pad1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_pad1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_reflect_gl.c b/TC/testcase/utc_surface_pattern_scale_down_extend_reflect_gl.c
new file mode 100644 (file)
index 0000000..bbd8e60
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_reflect_image.c b/TC/testcase/utc_surface_pattern_scale_down_extend_reflect_image.c
new file mode 100644 (file)
index 0000000..f8c44ce
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_reflect1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_reflect1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_reflect1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-reflect", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_reflect1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_reflect1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_repeat_gl.c b/TC/testcase/utc_surface_pattern_scale_down_extend_repeat_gl.c
new file mode 100644 (file)
index 0000000..9e8e861
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_extend_repeat_image.c b/TC/testcase/utc_surface_pattern_scale_down_extend_repeat_image.c
new file mode 100644 (file)
index 0000000..449329e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down_extend_repeat1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down_extend_repeat1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down_extend_repeat1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down-extend-repeat", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down_extend_repeat1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down_extend_repeat1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_gl.c b/TC/testcase/utc_surface_pattern_scale_down_gl.c
new file mode 100644 (file)
index 0000000..558d26c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_down_image.c b/TC/testcase/utc_surface_pattern_scale_down_image.c
new file mode 100644 (file)
index 0000000..4be3bcb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_down1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_down1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_down1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-down", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_down1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_down1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_up_gl.c b/TC/testcase/utc_surface_pattern_scale_up_gl.c
new file mode 100644 (file)
index 0000000..765bb4c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_up1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_up1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_up1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-up", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_up1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_up1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_surface_pattern_scale_up_image.c b/TC/testcase/utc_surface_pattern_scale_up_image.c
new file mode 100644 (file)
index 0000000..ffd0ba8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_surface_pattern_scale_up1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_surface_pattern_scale_up1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_surface_pattern_scale_up1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite surface-pattern-scale-up", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_surface_pattern_scale_up1");
+                       else
+                               dts_fail("utc_cairo_surface_pattern_scale_up1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_svg_clip_gl.c b/TC/testcase/utc_svg_clip_gl.c
new file mode 100644 (file)
index 0000000..052a4a4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_svg_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_svg_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_svg_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite svg-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_svg_clip1");
+                       else
+                               dts_fail("utc_cairo_svg_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_svg_clip_image.c b/TC/testcase/utc_svg_clip_image.c
new file mode 100644 (file)
index 0000000..56c1c6c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_svg_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_svg_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_svg_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite svg-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_svg_clip1");
+                       else
+                               dts_fail("utc_cairo_svg_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_svg_surface_gl.c b/TC/testcase/utc_svg_surface_gl.c
new file mode 100644 (file)
index 0000000..47f67a1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_svg_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_svg_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_svg_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite svg-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_svg_surface1");
+                       else
+                               dts_fail("utc_cairo_svg_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_svg_surface_image.c b/TC/testcase/utc_svg_surface_image.c
new file mode 100644 (file)
index 0000000..b00c53d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_svg_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_svg_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_svg_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite svg-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_svg_surface1");
+                       else
+                               dts_fail("utc_cairo_svg_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_svg_surface_source_gl.c b/TC/testcase/utc_svg_surface_source_gl.c
new file mode 100644 (file)
index 0000000..35a5b30
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_svg_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_svg_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_svg_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite svg-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_svg_surface_source1");
+                       else
+                               dts_fail("utc_cairo_svg_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_svg_surface_source_image.c b/TC/testcase/utc_svg_surface_source_image.c
new file mode 100644 (file)
index 0000000..db79ecd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_svg_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_svg_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_svg_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite svg-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_svg_surface_source1");
+                       else
+                               dts_fail("utc_cairo_svg_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_gray_gl.c b/TC/testcase/utc_text_antialias_gray_gl.c
new file mode 100644 (file)
index 0000000..71c9f92
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_gray1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_gray1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_gray1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-gray", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_gray1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_gray1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_gray_image.c b/TC/testcase/utc_text_antialias_gray_image.c
new file mode 100644 (file)
index 0000000..5095885
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_gray1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_gray1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_gray1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-gray", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_gray1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_gray1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_none_gl.c b/TC/testcase/utc_text_antialias_none_gl.c
new file mode 100644 (file)
index 0000000..239bc3c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_none1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_none_image.c b/TC/testcase/utc_text_antialias_none_image.c
new file mode 100644 (file)
index 0000000..d0e307e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_none1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_bgr_gl.c b/TC/testcase/utc_text_antialias_subpixel_bgr_gl.c
new file mode 100644 (file)
index 0000000..d0ffefa
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_bgr1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_bgr1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_bgr1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-bgr", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_bgr1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_bgr1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_bgr_image.c b/TC/testcase/utc_text_antialias_subpixel_bgr_image.c
new file mode 100644 (file)
index 0000000..b730bc8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_bgr1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_bgr1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_bgr1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-bgr", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_bgr1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_bgr1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_gl.c b/TC/testcase/utc_text_antialias_subpixel_gl.c
new file mode 100644 (file)
index 0000000..04d582d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_image.c b/TC/testcase/utc_text_antialias_subpixel_image.c
new file mode 100644 (file)
index 0000000..4ea9d84
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_rgb_gl.c b/TC/testcase/utc_text_antialias_subpixel_rgb_gl.c
new file mode 100644 (file)
index 0000000..1012ce1
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_rgb1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_rgb1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_rgb1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-rgb", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_rgb1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_rgb1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_rgb_image.c b/TC/testcase/utc_text_antialias_subpixel_rgb_image.c
new file mode 100644 (file)
index 0000000..6a415c7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_rgb1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_rgb1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_rgb1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-rgb", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_rgb1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_rgb1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_vbgr_gl.c b/TC/testcase/utc_text_antialias_subpixel_vbgr_gl.c
new file mode 100644 (file)
index 0000000..edebb04
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_vbgr1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_vbgr1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_vbgr1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-vbgr", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_vbgr1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_vbgr1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_vbgr_image.c b/TC/testcase/utc_text_antialias_subpixel_vbgr_image.c
new file mode 100644 (file)
index 0000000..616fe90
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_vbgr1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_vbgr1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_vbgr1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-vbgr", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_vbgr1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_vbgr1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_vrgb_gl.c b/TC/testcase/utc_text_antialias_subpixel_vrgb_gl.c
new file mode 100644 (file)
index 0000000..686e28c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_vrgb1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_vrgb1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_vrgb1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-vrgb", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_vrgb1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_vrgb1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_antialias_subpixel_vrgb_image.c b/TC/testcase/utc_text_antialias_subpixel_vrgb_image.c
new file mode 100644 (file)
index 0000000..358f929
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_antialias_subpixel_vrgb1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_antialias_subpixel_vrgb1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_antialias_subpixel_vrgb1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-antialias-subpixel-vrgb", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_antialias_subpixel_vrgb1");
+                       else
+                               dts_fail("utc_cairo_text_antialias_subpixel_vrgb1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_cache_crash_gl.c b/TC/testcase/utc_text_cache_crash_gl.c
new file mode 100644 (file)
index 0000000..e125cba
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_cache_crash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_cache_crash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_cache_crash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-cache-crash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_cache_crash1");
+                       else
+                               dts_fail("utc_cairo_text_cache_crash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_cache_crash_image.c b/TC/testcase/utc_text_cache_crash_image.c
new file mode 100644 (file)
index 0000000..098345e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_cache_crash1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_cache_crash1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_cache_crash1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-cache-crash", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_cache_crash1");
+                       else
+                               dts_fail("utc_cairo_text_cache_crash1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_glyph_range_gl.c b/TC/testcase/utc_text_glyph_range_gl.c
new file mode 100644 (file)
index 0000000..b942d52
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_glyph_range1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_glyph_range1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_glyph_range1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-glyph-range", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_glyph_range1");
+                       else
+                               dts_fail("utc_cairo_text_glyph_range1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_glyph_range_image.c b/TC/testcase/utc_text_glyph_range_image.c
new file mode 100644 (file)
index 0000000..23de848
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_glyph_range1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_glyph_range1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_glyph_range1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-glyph-range", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_glyph_range1");
+                       else
+                               dts_fail("utc_cairo_text_glyph_range1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_pattern_gl.c b/TC/testcase/utc_text_pattern_gl.c
new file mode 100644 (file)
index 0000000..dd1dda4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_pattern1");
+                       else
+                               dts_fail("utc_cairo_text_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_pattern_image.c b/TC/testcase/utc_text_pattern_image.c
new file mode 100644 (file)
index 0000000..ad18ab3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_pattern1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_pattern1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_pattern1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-pattern", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_pattern1");
+                       else
+                               dts_fail("utc_cairo_text_pattern1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_rotate_gl.c b/TC/testcase/utc_text_rotate_gl.c
new file mode 100644 (file)
index 0000000..023c19f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_rotate1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_rotate1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_rotate1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-rotate", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_rotate1");
+                       else
+                               dts_fail("utc_cairo_text_rotate1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_rotate_image.c b/TC/testcase/utc_text_rotate_image.c
new file mode 100644 (file)
index 0000000..111fcfd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_rotate1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_rotate1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_rotate1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-rotate", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_rotate1");
+                       else
+                               dts_fail("utc_cairo_text_rotate1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_transform_gl.c b/TC/testcase/utc_text_transform_gl.c
new file mode 100644 (file)
index 0000000..4e224b0
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_transform1");
+                       else
+                               dts_fail("utc_cairo_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_transform_image.c b/TC/testcase/utc_text_transform_image.c
new file mode 100644 (file)
index 0000000..32150be
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_transform1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_transform1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_transform1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-transform", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_transform1");
+                       else
+                               dts_fail("utc_cairo_text_transform1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_zero_len_gl.c b/TC/testcase/utc_text_zero_len_gl.c
new file mode 100644 (file)
index 0000000..e36f624
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_zero_len1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_zero_len1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_zero_len1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-zero-len", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_zero_len1");
+                       else
+                               dts_fail("utc_cairo_text_zero_len1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_text_zero_len_image.c b/TC/testcase/utc_text_zero_len_image.c
new file mode 100644 (file)
index 0000000..1f66edb
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_text_zero_len1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_text_zero_len1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_text_zero_len1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite text-zero-len", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_text_zero_len1");
+                       else
+                               dts_fail("utc_cairo_text_zero_len1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_tiger_gl.c b/TC/testcase/utc_tiger_gl.c
new file mode 100644 (file)
index 0000000..83a1105
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_tiger1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_tiger1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_tiger1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite tiger", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_tiger1");
+                       else
+                               dts_fail("utc_cairo_tiger1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_tiger_image.c b/TC/testcase/utc_tiger_image.c
new file mode 100644 (file)
index 0000000..cb05a87
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_tiger1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_tiger1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_tiger1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite tiger", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_tiger1");
+                       else
+                               dts_fail("utc_cairo_tiger1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_tighten_bounds_gl.c b/TC/testcase/utc_tighten_bounds_gl.c
new file mode 100644 (file)
index 0000000..a4fe2c3
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_tighten_bounds1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_tighten_bounds1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_tighten_bounds1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite tighten-bounds", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_tighten_bounds1");
+                       else
+                               dts_fail("utc_cairo_tighten_bounds1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_tighten_bounds_image.c b/TC/testcase/utc_tighten_bounds_image.c
new file mode 100644 (file)
index 0000000..748d843
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_tighten_bounds1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_tighten_bounds1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_tighten_bounds1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite tighten-bounds", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_tighten_bounds1");
+                       else
+                               dts_fail("utc_cairo_tighten_bounds1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_toy_font_face_gl.c b/TC/testcase/utc_toy_font_face_gl.c
new file mode 100644 (file)
index 0000000..8073f4d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_toy_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_toy_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_toy_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite toy-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_toy_font_face1");
+                       else
+                               dts_fail("utc_cairo_toy_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_toy_font_face_image.c b/TC/testcase/utc_toy_font_face_image.c
new file mode 100644 (file)
index 0000000..f08fe5f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_toy_font_face1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_toy_font_face1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_toy_font_face1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite toy-font-face", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_toy_font_face1");
+                       else
+                               dts_fail("utc_cairo_toy_font_face1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_transforms_gl.c b/TC/testcase/utc_transforms_gl.c
new file mode 100644 (file)
index 0000000..2408717
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_transforms1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_transforms1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_transforms1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite transforms", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_transforms1");
+                       else
+                               dts_fail("utc_cairo_transforms1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_transforms_image.c b/TC/testcase/utc_transforms_image.c
new file mode 100644 (file)
index 0000000..2563a1b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_transforms1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_transforms1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_transforms1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite transforms", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_transforms1");
+                       else
+                               dts_fail("utc_cairo_transforms1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_translate_show_surface_gl.c b/TC/testcase/utc_translate_show_surface_gl.c
new file mode 100644 (file)
index 0000000..d97c861
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_translate_show_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_translate_show_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_translate_show_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite translate-show-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_translate_show_surface1");
+                       else
+                               dts_fail("utc_cairo_translate_show_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_translate_show_surface_image.c b/TC/testcase/utc_translate_show_surface_image.c
new file mode 100644 (file)
index 0000000..5bb4d19
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_translate_show_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_translate_show_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_translate_show_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite translate-show-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_translate_show_surface1");
+                       else
+                               dts_fail("utc_cairo_translate_show_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_trap_clip_gl.c b/TC/testcase/utc_trap_clip_gl.c
new file mode 100644 (file)
index 0000000..7bef236
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_trap_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_trap_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_trap_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite trap-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_trap_clip1");
+                       else
+                               dts_fail("utc_cairo_trap_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_trap_clip_image.c b/TC/testcase/utc_trap_clip_image.c
new file mode 100644 (file)
index 0000000..2699d62
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_trap_clip1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_trap_clip1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_trap_clip1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite trap-clip", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_trap_clip1");
+                       else
+                               dts_fail("utc_cairo_trap_clip1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_gray_gl.c b/TC/testcase/utc_twin_antialias_gray_gl.c
new file mode 100644 (file)
index 0000000..ac64718
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_gray1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_gray1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_gray1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-gray", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_gray1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_gray1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_gray_image.c b/TC/testcase/utc_twin_antialias_gray_image.c
new file mode 100644 (file)
index 0000000..f64a157
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_gray1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_gray1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_gray1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-gray", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_gray1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_gray1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_mixed_gl.c b/TC/testcase/utc_twin_antialias_mixed_gl.c
new file mode 100644 (file)
index 0000000..9a3c2e5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_mixed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_mixed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_mixed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-mixed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_mixed1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_mixed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_mixed_image.c b/TC/testcase/utc_twin_antialias_mixed_image.c
new file mode 100644 (file)
index 0000000..d04ba3f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_mixed1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_mixed1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_mixed1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-mixed", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_mixed1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_mixed1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_none_gl.c b/TC/testcase/utc_twin_antialias_none_gl.c
new file mode 100644 (file)
index 0000000..8370549
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_none1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_none_image.c b/TC/testcase/utc_twin_antialias_none_image.c
new file mode 100644 (file)
index 0000000..8300b04
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_none1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_none1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_none1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-none", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_none1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_none1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_subpixel_gl.c b/TC/testcase/utc_twin_antialias_subpixel_gl.c
new file mode 100644 (file)
index 0000000..a3086a9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_subpixel1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_subpixel1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_subpixel1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-subpixel", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_subpixel1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_subpixel1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_antialias_subpixel_image.c b/TC/testcase/utc_twin_antialias_subpixel_image.c
new file mode 100644 (file)
index 0000000..f781014
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin_antialias_subpixel1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin_antialias_subpixel1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin_antialias_subpixel1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin-antialias-subpixel", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin_antialias_subpixel1");
+                       else
+                               dts_fail("utc_cairo_twin_antialias_subpixel1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_gl.c b/TC/testcase/utc_twin_gl.c
new file mode 100644 (file)
index 0000000..1fa832f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin1");
+                       else
+                               dts_fail("utc_cairo_twin1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_twin_image.c b/TC/testcase/utc_twin_image.c
new file mode 100644 (file)
index 0000000..3b110b4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_twin1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_twin1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_twin1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite twin", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_twin1");
+                       else
+                               dts_fail("utc_cairo_twin1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unaligned_box_gl.c b/TC/testcase/utc_unaligned_box_gl.c
new file mode 100644 (file)
index 0000000..90aad51
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unaligned_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unaligned_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unaligned_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unaligned-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unaligned_box1");
+                       else
+                               dts_fail("utc_cairo_unaligned_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unaligned_box_image.c b/TC/testcase/utc_unaligned_box_image.c
new file mode 100644 (file)
index 0000000..d9b9eb8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unaligned_box1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unaligned_box1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unaligned_box1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unaligned-box", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unaligned_box1");
+                       else
+                               dts_fail("utc_cairo_unaligned_box1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unantialiased_shapes_gl.c b/TC/testcase/utc_unantialiased_shapes_gl.c
new file mode 100644 (file)
index 0000000..369b942
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unantialiased_shapes1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unantialiased_shapes1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unantialiased_shapes1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unantialiased-shapes", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unantialiased_shapes1");
+                       else
+                               dts_fail("utc_cairo_unantialiased_shapes1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unantialiased_shapes_image.c b/TC/testcase/utc_unantialiased_shapes_image.c
new file mode 100644 (file)
index 0000000..8c7d789
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unantialiased_shapes1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unantialiased_shapes1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unantialiased_shapes1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unantialiased-shapes", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unantialiased_shapes1");
+                       else
+                               dts_fail("utc_cairo_unantialiased_shapes1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unbounded_operator_gl.c b/TC/testcase/utc_unbounded_operator_gl.c
new file mode 100644 (file)
index 0000000..e1a882d
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unbounded_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unbounded_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unbounded_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unbounded-operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unbounded_operator1");
+                       else
+                               dts_fail("utc_cairo_unbounded_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unbounded_operator_image.c b/TC/testcase/utc_unbounded_operator_image.c
new file mode 100644 (file)
index 0000000..1d2003e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unbounded_operator1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unbounded_operator1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unbounded_operator1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unbounded-operator", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unbounded_operator1");
+                       else
+                               dts_fail("utc_cairo_unbounded_operator1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unclosed_strokes_gl.c b/TC/testcase/utc_unclosed_strokes_gl.c
new file mode 100644 (file)
index 0000000..ebdd334
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unclosed_strokes1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unclosed_strokes1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unclosed_strokes1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unclosed-strokes", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unclosed_strokes1");
+                       else
+                               dts_fail("utc_cairo_unclosed_strokes1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_unclosed_strokes_image.c b/TC/testcase/utc_unclosed_strokes_image.c
new file mode 100644 (file)
index 0000000..aeb3392
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_unclosed_strokes1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_unclosed_strokes1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_unclosed_strokes1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite unclosed-strokes", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_unclosed_strokes1");
+                       else
+                               dts_fail("utc_cairo_unclosed_strokes1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_data_gl.c b/TC/testcase/utc_user_data_gl.c
new file mode 100644 (file)
index 0000000..37b018c
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_data1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_data1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_data1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-data", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_data1");
+                       else
+                               dts_fail("utc_cairo_user_data1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_data_image.c b/TC/testcase/utc_user_data_image.c
new file mode 100644 (file)
index 0000000..d067934
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_data1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_data1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_data1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-data", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_data1");
+                       else
+                               dts_fail("utc_cairo_user_data1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_gl.c b/TC/testcase/utc_user_font_gl.c
new file mode 100644 (file)
index 0000000..49fbc59
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font1");
+                       else
+                               dts_fail("utc_cairo_user_font1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_image.c b/TC/testcase/utc_user_font_image.c
new file mode 100644 (file)
index 0000000..356d057
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font1");
+                       else
+                               dts_fail("utc_cairo_user_font1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_mask_gl.c b/TC/testcase/utc_user_font_mask_gl.c
new file mode 100644 (file)
index 0000000..d942cda
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font_mask1");
+                       else
+                               dts_fail("utc_cairo_user_font_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_mask_image.c b/TC/testcase/utc_user_font_mask_image.c
new file mode 100644 (file)
index 0000000..327a58b
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font_mask1");
+                       else
+                               dts_fail("utc_cairo_user_font_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_proxy_gl.c b/TC/testcase/utc_user_font_proxy_gl.c
new file mode 100644 (file)
index 0000000..b39b71a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font_proxy1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font_proxy1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font_proxy1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font-proxy", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font_proxy1");
+                       else
+                               dts_fail("utc_cairo_user_font_proxy1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_proxy_image.c b/TC/testcase/utc_user_font_proxy_image.c
new file mode 100644 (file)
index 0000000..e61b895
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font_proxy1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font_proxy1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font_proxy1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font-proxy", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font_proxy1");
+                       else
+                               dts_fail("utc_cairo_user_font_proxy1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_rescale_gl.c b/TC/testcase/utc_user_font_rescale_gl.c
new file mode 100644 (file)
index 0000000..4ece9ce
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font_rescale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font_rescale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font_rescale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font-rescale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font_rescale1");
+                       else
+                               dts_fail("utc_cairo_user_font_rescale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_user_font_rescale_image.c b/TC/testcase/utc_user_font_rescale_image.c
new file mode 100644 (file)
index 0000000..5c5a573
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_user_font_rescale1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_user_font_rescale1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_user_font_rescale1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite user-font-rescale", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_user_font_rescale1");
+                       else
+                               dts_fail("utc_cairo_user_font_rescale1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_white_in_noop_gl.c b/TC/testcase/utc_white_in_noop_gl.c
new file mode 100644 (file)
index 0000000..0a1f0bc
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_white_in_noop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_white_in_noop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_white_in_noop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite white-in-noop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_white_in_noop1");
+                       else
+                               dts_fail("utc_cairo_white_in_noop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_white_in_noop_image.c b/TC/testcase/utc_white_in_noop_image.c
new file mode 100644 (file)
index 0000000..c8b04d4
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_white_in_noop1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_white_in_noop1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_white_in_noop1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite white-in-noop", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_white_in_noop1");
+                       else
+                               dts_fail("utc_cairo_white_in_noop1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_world_map_fill_gl.c b/TC/testcase/utc_world_map_fill_gl.c
new file mode 100644 (file)
index 0000000..38c030f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_world_map_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_world_map_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_world_map_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite world-map-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_world_map_fill1");
+                       else
+                               dts_fail("utc_cairo_world_map_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_world_map_fill_image.c b/TC/testcase/utc_world_map_fill_image.c
new file mode 100644 (file)
index 0000000..2017b98
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_world_map_fill1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_world_map_fill1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_world_map_fill1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite world-map-fill", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_world_map_fill1");
+                       else
+                               dts_fail("utc_cairo_world_map_fill1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_world_map_gl.c b/TC/testcase/utc_world_map_gl.c
new file mode 100644 (file)
index 0000000..c6f2cb9
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_world_map1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_world_map1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_world_map1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite world-map", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_world_map1");
+                       else
+                               dts_fail("utc_cairo_world_map1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_world_map_image.c b/TC/testcase/utc_world_map_image.c
new file mode 100644 (file)
index 0000000..b093360
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_world_map1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_world_map1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_world_map1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite world-map", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_world_map1");
+                       else
+                               dts_fail("utc_cairo_world_map1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_world_map_stroke_gl.c b/TC/testcase/utc_world_map_stroke_gl.c
new file mode 100644 (file)
index 0000000..65ef38a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_world_map_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_world_map_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_world_map_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite world-map-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_world_map_stroke1");
+                       else
+                               dts_fail("utc_cairo_world_map_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_world_map_stroke_image.c b/TC/testcase/utc_world_map_stroke_image.c
new file mode 100644 (file)
index 0000000..b66f371
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_world_map_stroke1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_world_map_stroke1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_world_map_stroke1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite world-map-stroke", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_world_map_stroke1");
+                       else
+                               dts_fail("utc_cairo_world_map_stroke1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_huge_image_shm_gl.c b/TC/testcase/utc_xcb_huge_image_shm_gl.c
new file mode 100644 (file)
index 0000000..ed198a7
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_huge_image_shm1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_huge_image_shm1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_huge_image_shm1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-huge-image-shm", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_huge_image_shm1");
+                       else
+                               dts_fail("utc_cairo_xcb_huge_image_shm1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_huge_image_shm_image.c b/TC/testcase/utc_xcb_huge_image_shm_image.c
new file mode 100644 (file)
index 0000000..0e6cd2a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_huge_image_shm1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_huge_image_shm1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_huge_image_shm1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-huge-image-shm", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_huge_image_shm1");
+                       else
+                               dts_fail("utc_cairo_xcb_huge_image_shm1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_snapshot_assert_gl.c b/TC/testcase/utc_xcb_snapshot_assert_gl.c
new file mode 100644 (file)
index 0000000..93b741f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_snapshot_assert1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_snapshot_assert1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_snapshot_assert1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-snapshot-assert", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_snapshot_assert1");
+                       else
+                               dts_fail("utc_cairo_xcb_snapshot_assert1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_snapshot_assert_image.c b/TC/testcase/utc_xcb_snapshot_assert_image.c
new file mode 100644 (file)
index 0000000..7e787dd
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_snapshot_assert1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_snapshot_assert1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_snapshot_assert1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-snapshot-assert", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_snapshot_assert1");
+                       else
+                               dts_fail("utc_cairo_xcb_snapshot_assert1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_stress_cache_gl.c b/TC/testcase/utc_xcb_stress_cache_gl.c
new file mode 100644 (file)
index 0000000..294061a
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_stress_cache1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_stress_cache1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_stress_cache1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-stress-cache", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_stress_cache1");
+                       else
+                               dts_fail("utc_cairo_xcb_stress_cache1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_stress_cache_image.c b/TC/testcase/utc_xcb_stress_cache_image.c
new file mode 100644 (file)
index 0000000..db33df6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_stress_cache1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_stress_cache1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_stress_cache1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-stress-cache", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_stress_cache1");
+                       else
+                               dts_fail("utc_cairo_xcb_stress_cache1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_surface_source_gl.c b/TC/testcase/utc_xcb_surface_source_gl.c
new file mode 100644 (file)
index 0000000..be8fbc8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_surface_source1");
+                       else
+                               dts_fail("utc_cairo_xcb_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcb_surface_source_image.c b/TC/testcase/utc_xcb_surface_source_image.c
new file mode 100644 (file)
index 0000000..b100ea8
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcb_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcb_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcb_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcb-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcb_surface_source1");
+                       else
+                               dts_fail("utc_cairo_xcb_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcomposite_projection_gl.c b/TC/testcase/utc_xcomposite_projection_gl.c
new file mode 100644 (file)
index 0000000..abcb478
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcomposite_projection1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcomposite_projection1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcomposite_projection1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcomposite-projection", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcomposite_projection1");
+                       else
+                               dts_fail("utc_cairo_xcomposite_projection1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xcomposite_projection_image.c b/TC/testcase/utc_xcomposite_projection_image.c
new file mode 100644 (file)
index 0000000..9c9da9e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xcomposite_projection1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xcomposite_projection1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xcomposite_projection1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xcomposite-projection", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xcomposite_projection1");
+                       else
+                               dts_fail("utc_cairo_xcomposite_projection1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xlib_expose_event_gl.c b/TC/testcase/utc_xlib_expose_event_gl.c
new file mode 100644 (file)
index 0000000..f1df28e
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xlib_expose_event1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xlib_expose_event1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xlib_expose_event1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xlib-expose-event", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xlib_expose_event1");
+                       else
+                               dts_fail("utc_cairo_xlib_expose_event1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xlib_expose_event_image.c b/TC/testcase/utc_xlib_expose_event_image.c
new file mode 100644 (file)
index 0000000..f10f026
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xlib_expose_event1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xlib_expose_event1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xlib_expose_event1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xlib-expose-event", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xlib_expose_event1");
+                       else
+                               dts_fail("utc_cairo_xlib_expose_event1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xlib_surface_gl.c b/TC/testcase/utc_xlib_surface_gl.c
new file mode 100644 (file)
index 0000000..4d37e0f
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xlib_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xlib_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xlib_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xlib-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xlib_surface1");
+                       else
+                               dts_fail("utc_cairo_xlib_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xlib_surface_image.c b/TC/testcase/utc_xlib_surface_image.c
new file mode 100644 (file)
index 0000000..46a8d01
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xlib_surface1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xlib_surface1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xlib_surface1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xlib-surface", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xlib_surface1");
+                       else
+                               dts_fail("utc_cairo_xlib_surface1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xlib_surface_source_gl.c b/TC/testcase/utc_xlib_surface_source_gl.c
new file mode 100644 (file)
index 0000000..22f5345
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xlib_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xlib_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xlib_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xlib-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xlib_surface_source1");
+                       else
+                               dts_fail("utc_cairo_xlib_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_xlib_surface_source_image.c b/TC/testcase/utc_xlib_surface_source_image.c
new file mode 100644 (file)
index 0000000..e62c8a5
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_xlib_surface_source1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_xlib_surface_source1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_xlib_surface_source1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite xlib-surface-source", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_xlib_surface_source1");
+                       else
+                               dts_fail("utc_cairo_xlib_surface_source1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_zero_alpha_gl.c b/TC/testcase/utc_zero_alpha_gl.c
new file mode 100644 (file)
index 0000000..7fa9d01
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_zero_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_zero_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_zero_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite zero-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_zero_alpha1");
+                       else
+                               dts_fail("utc_cairo_zero_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_zero_alpha_image.c b/TC/testcase/utc_zero_alpha_image.c
new file mode 100644 (file)
index 0000000..d1b2bd6
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_zero_alpha1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_zero_alpha1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_zero_alpha1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite zero-alpha", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_zero_alpha1");
+                       else
+                               dts_fail("utc_cairo_zero_alpha1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_zero_mask_gl.c b/TC/testcase/utc_zero_mask_gl.c
new file mode 100644 (file)
index 0000000..3ada2ba
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_zero_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_zero_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_zero_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite zero-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_zero_mask1");
+                       else
+                               dts_fail("utc_cairo_zero_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=egl","DISPLAY=:0", "CAIRO_GL_COMPOSITOR=msaa", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/testcase/utc_zero_mask_image.c b/TC/testcase/utc_zero_mask_image.c
new file mode 100644 (file)
index 0000000..0a84d30
--- /dev/null
@@ -0,0 +1,70 @@
+#include <tet_api.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-script-interpreter.h>
+
+#include "cairo-test.h"
+
+#include <unistd.h>
+#include <sys/wait.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_cairo_zero_mask1(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_cairo_zero_mask1, 1 },
+       { NULL, 0 },
+};
+
+static void startup(void)
+{
+       /* start of TC */
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+}
+
+static void utc_cairo_zero_mask1(void)
+{
+        char buf[128];
+        int ret;
+        sprintf(buf, "cd %s && ./cairo-test-suite zero-mask", getenv("CAIRO_TC_ROOT_PATH"));
+       int pid=0;
+       int status=0;
+
+       pid = fork();
+       if(pid > 0) {
+               if (waitpid(pid,&status,0) != pid) {
+                       fprintf(stderr, "Failed to wait!!!");
+                       exit(EXIT_FAILURE);
+               }
+               if(WIFEXITED(status)) {
+                       ret=status;
+                       if(WEXITSTATUS(ret) == CAIRO_TEST_SUCCESS)
+                               dts_pass("utc_cairo_zero_mask1");
+                       else
+                               dts_fail("utc_cairo_zero_mask1");
+               }
+       }
+       else if(pid == 0) {
+               char *env[]={"CAIRO_TEST_TARGET=image", (char *)0};
+               char parse0[4]={0,};
+               char parse1[1024]={0,};
+               char parse2[4]={0,};
+               char parse3[32]={0,};
+               char parse4[32]={0,};
+               sscanf(buf,"%s %s %s %s %s", parse0, parse1, parse2, parse3, parse4 );
+               chdir(parse1);
+               execle(parse3, parse3, parse4, NULL, env);
+       }
+       else {
+               fprintf(stderr, "Failed to fork!!!");
+               exit(EXIT_FAILURE);
+       }
+}
diff --git a/TC/tet_scen b/TC/tet_scen
new file mode 100755 (executable)
index 0000000..03f029a
--- /dev/null
@@ -0,0 +1,7 @@
+all
+       ^TEST
+##### Scenarios for TEST #####
+
+# Test scenario
+TEST
+       :include:/testcase/tslist
diff --git a/TC/tetbuild.cfg b/TC/tetbuild.cfg
new file mode 100755 (executable)
index 0000000..f7eda55
--- /dev/null
@@ -0,0 +1,5 @@
+TET_OUTPUT_CAPTURE=True # capture option for build operation checking
+TET_BUILD_TOOL=make # build with using make command
+TET_BUILD_FILE=-f Makefile # execution file (Makefile) for build
+TET_API_COMPLIANT=True # use TET API in Test Case ?
+TET_PASS_TC_NAME=True # report passed TC name in Journal file?
diff --git a/TC/tetclean.cfg b/TC/tetclean.cfg
new file mode 100755 (executable)
index 0000000..02d7030
--- /dev/null
@@ -0,0 +1,5 @@
+TET_OUTPUT_CAPTURE=True # capture option
+TET_CLEAN_TOOL= make clean # clean tool
+TET_CLEAN_FILE= Makefile # file for clean
+TET_API_COMPLIANT=True # TET API useage 
+TET_PASS_TC_NAME=True # showing name , passed TC
diff --git a/TC/tetexec.cfg b/TC/tetexec.cfg
new file mode 100755 (executable)
index 0000000..ef3e452
--- /dev/null
@@ -0,0 +1,5 @@
+TET_OUTPUT_CAPTURE=True # capturing execution or not
+TET_EXEC_TOOL=  # ex) exec : execution tool set up/ Optional
+TET_EXEC_FILE=   # ex) exectool : execution file/ Optional
+TET_API_COMPLIANT=True # Test case or Tool usesTET API?
+TET_PASS_TC_NAME=True # showing Passed TC name ?
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..36fe50f
--- /dev/null
@@ -0,0 +1,1026 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
+[m4_warning([this file was generated for autoconf 2.67.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                 [_AM_DEPENDENCIES(CC)],
+                 [define([AC_PROG_CC],
+                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES(CXX)],
+                 [define([AC_PROG_CXX],
+                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES(OBJC)],
+                 [define([AC_PROG_OBJC],
+                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# (`yes' being less verbose, `no' or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules],
+[  --enable-silent-rules          less verbose build output (undo: `make V=1')
+  --disable-silent-rules         verbose build output (undo: `make V=0')])
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([build/aclocal.cairo.m4])
+m4_include([build/aclocal.compare.m4])
+m4_include([build/aclocal.enable.m4])
+m4_include([build/aclocal.float.m4])
+m4_include([build/aclocal.makefile.m4])
+m4_include([build/aclocal.pkg.m4])
+m4_include([build/gtk-doc.m4])
+m4_include([build/libtool.m4])
+m4_include([build/ltoptions.m4])
+m4_include([build/ltsugar.m4])
+m4_include([build/ltversion.m4])
+m4_include([build/lt~obsolete.m4])
+m4_include([acinclude.m4])
index 10c2832..4d113f8 100755 (executable)
 #!/bin/sh
 # Run this to generate all the initial makefiles, etc.
-set -e
 
-ARGV0=$0
-
-# Allow invocation from a separate build directory; in that case, we change
-# to the source directory to run the auto*, then change back before running configure
-srcdir=`dirname $ARGV0`
-test -z "$srcdir" && srcdir=.
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
 
 ORIGDIR=`pwd`
 cd $srcdir
 
-PACKAGE=cairo
-
-LIBTOOLIZE_FLAGS="--copy --force --automake"
-ACLOCAL_FLAGS="-I build"
-AUTOHEADER=${AUTOHEADER-autoheader}
-GTKDOCIZE_FLAGS="--copy"
-GTKDOCIZE=${GTKDOCIZE-gtkdocize}
-AUTOMAKE_FLAGS="--add-missing --gnu -Wall"
-AUTOCONF=${AUTOCONF-autoconf}
-
-CONFIGURE_AC=
-test -f configure.ac && CONFIGURE_AC=configure.ac
-
-if test "X$CONFIGURE_AC" = X; then
-  echo "$ARGV0: ERROR: No $srcdir/configure.in or $srcdir/configure.ac found."
-  exit 1
-fi
-
-extract_version() {
-       grep "^ *$1" "$CONFIGURE_AC" | sed 's/.*(\[*\([^])]*\)]*).*/\1/'
-}
-
-autoconf_min_vers=`extract_version AC_PREREQ`
-automake_min_vers=`extract_version AM_INIT_AUTOMAKE`
-libtoolize_min_vers=`extract_version AC_PROG_LIBTOOL`
-aclocal_min_vers=$automake_min_vers
-
-
-# Not all echo versions allow -n, so we check what is possible. This test is
-# based on the one in autoconf.
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ;;
-  *c*,*  ) ECHO_N=-n ;;
-  *)       ECHO_N= ;;
-esac
-
-
-# some terminal codes ...
-boldface="`tput bold 2>/dev/null || true`"
-normal="`tput sgr0 2>/dev/null || true`"
-printbold() {
-    echo $ECHO_N "$boldface"
-    echo "$@"
-    echo $ECHO_N "$normal"
-}
-printerr() {
-    echo "$@" >&2
-}
-
-
-# Usage:
-#     compare_versions MIN_VERSION ACTUAL_VERSION
-# returns true if ACTUAL_VERSION >= MIN_VERSION
-compare_versions() {
-    ch_min_version=$1
-    ch_actual_version=$2
-    ch_status=0
-    IFS="${IFS=         }"; ch_save_IFS="$IFS"; IFS="."
-    set $ch_actual_version
-    for ch_min in $ch_min_version; do
-        ch_cur=`echo $1 | sed 's/[^0-9].*$//'`; # remove letter suffixes
-        if [ $# -gt 0 ]; then shift; fi
-        if [ -z "$ch_min" ]; then break; fi
-        if [ -z "$ch_cur" ]; then ch_status=1; break; fi
-        if [ $ch_cur -gt $ch_min ]; then break; fi
-        if [ $ch_cur -lt $ch_min ]; then ch_status=1; break; fi
-    done
-    IFS="$ch_save_IFS"
-    return $ch_status
-}
-
-# Usage:
-#     version_check PACKAGE VARIABLE CHECKPROGS MIN_VERSION SOURCE
-# checks to see if the package is available
-version_check() {
-    vc_package=$1
-    vc_variable=$2
-    vc_checkprogs=$3
-    vc_min_version=$4
-    vc_source=$5
-    vc_status=1
-
-    vc_checkprog=`eval echo "\\$$vc_variable"`
-    if [ -n "$vc_checkprog" ]; then
-       printbold "using $vc_checkprog for $vc_package"
-       return 0
-    fi
-
-    printbold "checking for $vc_package >= $vc_min_version..."
-    for vc_checkprog in $vc_checkprogs; do
-       echo $ECHO_N "  testing $vc_checkprog... "
-       if $vc_checkprog --version < /dev/null > /dev/null 2>&1; then
-           vc_actual_version=`$vc_checkprog --version | head -n 1 | \
-                               sed 's/^.*[     ]\([0-9.]*[a-z]*\).*$/\1/'`
-           if compare_versions $vc_min_version $vc_actual_version; then
-               echo "found $vc_actual_version"
-               # set variable
-               eval "$vc_variable=$vc_checkprog"
-               vc_status=0
-               break
-           else
-               echo "too old (found version $vc_actual_version)"
-           fi
-       else
-           echo "not found."
-       fi
-    done
-    if [ "$vc_status" != 0 ]; then
-       printerr "***Error***: You must have $vc_package >= $vc_min_version installed"
-       printerr "  to build $PROJECT.  Download the appropriate package for"
-       printerr "  from your distribution or get the source tarball at"
-        printerr "    $vc_source"
-       printerr
-    fi
-    return $vc_status
-}
-
-
-version_check autoconf AUTOCONF $AUTOCONF $autoconf_min_vers \
-    "http://ftp.gnu.org/pub/gnu/autoconf/autoconf-${autoconf_min_vers}.tar.gz" || DIE=1
-
-#
-# Hunt for an appropriate version of automake and aclocal; we can't
-# assume that 'automake' is necessarily the most recent installed version
-# 
-# We check automake first to allow it to be a newer version than we know about.
-#
-version_check automake AUTOMAKE "$AUTOMAKE automake automake-1.10 automake-1.9 automake-1.8 automake-1.7" $automake_min_vers \
-    "http://ftp.gnu.org/pub/gnu/automake/automake-${automake_min_vers}.tar.gz" || DIE=1
-ACLOCAL=`echo $AUTOMAKE | sed s/automake/aclocal/`
-
-
-version_check libtool LIBTOOLIZE "$LIBTOOLIZE glibtoolize libtoolize" $libtoolize_min_vers \
-    "http://ftp.gnu.org/pub/gnu/libtool/libtool-${libtool_min_vers}.tar.gz" || DIE=1
-
-if test -n "$DIE"; then
-  exit 1
+AUTORECONF=`which autoreconf`
+if test -z $AUTORECONF; then
+        echo "*** No autoreconf found, please intall it ***"
+        exit 1
 fi
 
-
-if test -z "$*"; then
-  echo "$ARGV0:        Note: \`./configure' will be run with no arguments."
-  echo "               If you wish to pass any to it, please specify them on the"
-  echo "               \`$0' command line."
-  echo
+GTKDOCIZE=`which gtkdocize`
+if test -z $GTKDOCIZE; then
+        echo "*** No GTK-Doc found, documentation won't be generated ***"
+else
+        gtkdocize || exit $?
 fi
 
-do_cmd() {
-    echo "$ARGV0: running \`$@'"
-    $@
-}
-
-do_cmd $LIBTOOLIZE $LIBTOOLIZE_FLAGS
-
-do_cmd $ACLOCAL $ACLOCAL_FLAGS
-
-do_cmd $AUTOHEADER
-
 # create dummy */Makefile.am.features and ChangeLog to make automake happy
 > boilerplate/Makefile.am.features
 > src/Makefile.am.features
 touch ChangeLog
 
-# We don't call gtkdocize right now.  When we do, we should then modify
-# the generated gtk-doc.make and move it to build/Makefile.am.gtk-doc.
-# See that file for details.
-#do_cmd $GTKDOCIZE $GTKDOCIZE_FLAGS
-
-do_cmd $AUTOMAKE $AUTOMAKE_FLAGS
+autoreconf --install --verbose || exit $?
 
-do_cmd $AUTOCONF
-
-cd "$ORIGDIR" || exit 1
-
-rm -f config.cache
-
-if test -z "$NOCONFIGURE"; then
-  do_cmd $srcdir/configure \
-       --cache-file=config.cache \
-       --disable-static \
-       --enable-test-surfaces \
-       ${1+"$@"} && echo "Now type \`make' to compile $PROJECT." || exit 1
-fi
+cd $ORIGDIR
+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
diff --git a/boilerplate/.gitignore b/boilerplate/.gitignore
new file mode 100644 (file)
index 0000000..a81663b
--- /dev/null
@@ -0,0 +1,24 @@
+TAGS
+tags
+Makefile
+Makefile.in
+Makefile.am.features
+#Makefile.win32.features
+*.lo
+*.la
+*.exe
+*.manifest
+*.o
+*.gcda
+*.gcno
+*.obj
+*.ilk
+*.suo
+*.lib
+*.pdb
+*~
+.*.sw?
+check-link
+cairo-boilerplate-constructors.c
+cairo-boilerplate-constructors
+make-cairo-boilerplate-constructors
index 63ef34e..101e997 100644 (file)
@@ -38,3 +38,4 @@ cairo_boilerplate_xcb_sources = cairo-boilerplate-xcb.c
 cairo_boilerplate_xlib_headers = cairo-boilerplate-xlib.h
 cairo_boilerplate_xlib_sources = cairo-boilerplate-xlib.c
 cairo_boilerplate_vg_sources = cairo-boilerplate-vg.c
+cairo_boilerplate_cogl_sources = cairo-boilerplate-cogl.c
index 8b6a673..e60a95b 100644 (file)
@@ -247,6 +247,18 @@ enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glesv2_cxx_sources)
 enabled_cairo_boilerplate_sources += $(cairo_boilerplate_glesv2_sources)
 endif
 
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_cogl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_cogl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_cogl_sources)
+ifeq ($(CAIRO_HAS_COGL_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_cogl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_cogl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_cogl_sources)
+endif
+
 unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)
 all_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)
 all_cairo_boilerplate_private += $(cairo_boilerplate_directfb_private)
diff --git a/boilerplate/cairo-boilerplate-cogl.c b/boilerplate/cairo-boilerplate-cogl.c
new file mode 100644 (file)
index 0000000..e39ad33
--- /dev/null
@@ -0,0 +1,206 @@
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2009 Chris Wilson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson.
+ */
+
+#include "cairo-boilerplate-private.h"
+
+#include <cairo-cogl.h>
+#include <cogl/cogl2-experimental.h>
+
+typedef struct _cogl_closure {
+    cairo_device_t *device;
+    CoglFramebuffer *fb;
+    cairo_surface_t *surface;
+} cogl_closure_t;
+
+static const cairo_user_data_key_t cogl_closure_key;
+
+static CoglContext *context = NULL;
+
+static void
+_cairo_boilerplate_cogl_cleanup (void *abstract_closure)
+{
+    cogl_closure_t *closure = abstract_closure;
+
+    cogl_object_unref (closure->fb);
+
+    cairo_device_finish (closure->device);
+    cairo_device_destroy (closure->device);
+
+    free (closure);
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_cogl_create_offscreen_color_surface (const char             *name,
+                                                       cairo_content_t          content,
+                                                       double                   width,
+                                                       double                   height,
+                                                       double                   max_width,
+                                                       double                   max_height,
+                                                       cairo_boilerplate_mode_t mode,
+                                                       void                   **abstract_closure)
+{
+    cairo_device_t *device;
+    CoglTexture *tex;
+    CoglHandle offscreen;
+    CoglFramebuffer *fb;
+    cogl_closure_t *closure;
+    cairo_status_t status;
+
+    if (!context)
+       context = cogl_context_new (NULL, NULL);
+
+    device = cairo_cogl_device_create (context);
+    tex = cogl_texture_new_with_size (width, height,
+                                     COGL_TEXTURE_NO_SLICING,
+                                     COGL_PIXEL_FORMAT_BGRA_8888_PRE);
+    offscreen = cogl_offscreen_new_to_texture (tex);
+    fb = COGL_FRAMEBUFFER (offscreen);
+
+    cogl_framebuffer_allocate (fb, NULL);
+    cogl_push_framebuffer (fb);
+    cogl_ortho (0, cogl_framebuffer_get_width (fb),
+                cogl_framebuffer_get_height (fb), 0,
+                -1, 100);
+    cogl_pop_framebuffer ();
+
+    closure = malloc (sizeof (cogl_closure_t));
+    *abstract_closure = closure;
+    closure->device = device;
+    closure->fb = fb;
+    closure->surface = cairo_cogl_surface_create (device, fb);
+
+    status = cairo_surface_set_user_data (closure->surface,
+                                         &cogl_closure_key, closure, NULL);
+    if (status == CAIRO_STATUS_SUCCESS)
+       return closure->surface;
+
+    _cairo_boilerplate_cogl_cleanup (closure);
+    return cairo_boilerplate_surface_create_in_error (status);
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_cogl_create_onscreen_color_surface (const char             *name,
+                                                      cairo_content_t          content,
+                                                      double                   width,
+                                                      double                   height,
+                                                      double                   max_width,
+                                                      double                   max_height,
+                                                      cairo_boilerplate_mode_t mode,
+                                                      void                   **abstract_closure)
+{
+    cairo_device_t *device;
+    CoglOnscreen *onscreen;
+    CoglFramebuffer *fb;
+    cogl_closure_t *closure;
+    cairo_status_t status;
+
+    if (!context)
+       context = cogl_context_new (NULL, NULL);
+
+    device = cairo_cogl_device_create (context);
+    onscreen = cogl_onscreen_new (context, width, height);
+    fb = COGL_FRAMEBUFFER (onscreen);
+
+    cogl_onscreen_show (onscreen);
+
+    cogl_push_framebuffer (fb);
+    cogl_ortho (0, cogl_framebuffer_get_width (fb),
+                cogl_framebuffer_get_height (fb), 0,
+                -1, 100);
+    cogl_pop_framebuffer ();
+
+    closure = malloc (sizeof (cogl_closure_t));
+    *abstract_closure = closure;
+    closure->device = device;
+    closure->fb = fb;
+    closure->surface = cairo_cogl_surface_create (device, fb);
+
+    status = cairo_surface_set_user_data (closure->surface,
+                                         &cogl_closure_key, closure, NULL);
+    if (status == CAIRO_STATUS_SUCCESS)
+       return closure->surface;
+
+    _cairo_boilerplate_cogl_cleanup (closure);
+    return cairo_boilerplate_surface_create_in_error (status);
+}
+
+static cairo_status_t
+_cairo_boilerplate_cogl_finish_onscreen (cairo_surface_t *surface)
+{
+    cogl_closure_t *closure = cairo_surface_get_user_data (surface, &cogl_closure_key);
+
+    cairo_cogl_surface_end_frame (surface);
+
+    cogl_framebuffer_swap_buffers (closure->fb);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_boilerplate_cogl_synchronize (void *abstract_closure)
+{
+    cogl_closure_t *closure = abstract_closure;
+    cogl_framebuffer_finish (closure->fb);
+}
+
+static const cairo_boilerplate_target_t targets[] = {
+    {
+       "cogl-offscreen-color", "cogl", NULL, NULL,
+       CAIRO_SURFACE_TYPE_COGL, CAIRO_CONTENT_COLOR_ALPHA, 1,
+       "cairo_cogl_device_create",
+       _cairo_boilerplate_cogl_create_offscreen_color_surface,
+       cairo_surface_create_similar,
+       NULL, NULL,
+       _cairo_boilerplate_get_image_surface,
+       cairo_surface_write_to_png,
+       _cairo_boilerplate_cogl_cleanup,
+       _cairo_boilerplate_cogl_synchronize,
+        NULL,
+       TRUE, FALSE, FALSE
+    },
+    {
+       "cogl-onscreen-color", "cogl", NULL, NULL,
+       CAIRO_SURFACE_TYPE_COGL, CAIRO_CONTENT_COLOR_ALPHA, 1,
+       "cairo_cogl_device_create",
+       _cairo_boilerplate_cogl_create_onscreen_color_surface,
+       cairo_surface_create_similar,
+       NULL,
+       _cairo_boilerplate_cogl_finish_onscreen,
+       _cairo_boilerplate_get_image_surface,
+       cairo_surface_write_to_png,
+       _cairo_boilerplate_cogl_cleanup,
+       _cairo_boilerplate_cogl_synchronize,
+        NULL,
+       TRUE, FALSE, FALSE
+    }
+};
+CAIRO_BOILERPLATE (cogl, targets)
index be5efb6..a479011 100644 (file)
@@ -175,7 +175,6 @@ _cairo_boilerplate_directfb_create_surface (const char                    *name,
                                            double                     max_width,
                                            double                     max_height,
                                            cairo_boilerplate_mode_t   mode,
-                                           int                        id,
                                            void                     **closure)
 {
 
index 8f04314..214ce50 100644 (file)
@@ -42,7 +42,6 @@ _cairo_boilerplate_drm_create_surface (const char              *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     cairo_device_t *device;
index 0e1c9b9..e1a46e4 100644 (file)
@@ -72,7 +72,6 @@ _cairo_boilerplate_egl_create_surface (const char              *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     egl_target_closure_t *gltc;
@@ -132,6 +131,11 @@ _cairo_boilerplate_egl_create_surface (const char           *name,
 
     gltc->device = cairo_egl_device_create (gltc->dpy, gltc->ctx);
 
+    if (width < 1)
+       width = 1;
+    if (height < 1)
+       height = 1;
+
     gltc->surface = surface = cairo_gl_surface_create (gltc->device,
                                                       content,
                                                       ceil (width),
index 690844e..4cf51f0 100644 (file)
@@ -74,7 +74,6 @@ _cairo_boilerplate_gl_create_surface (const char              *name,
                                      double                     max_width,
                                      double                     max_height,
                                      cairo_boilerplate_mode_t   mode,
-                                     int                        id,
                                      void                     **closure)
 {
     int rgba_attribs[] = { GLX_RGBA,
@@ -151,7 +150,6 @@ _cairo_boilerplate_gl_create_window (const char            *name,
                                     double                     max_width,
                                     double                     max_height,
                                     cairo_boilerplate_mode_t   mode,
-                                    int                        id,
                                     void                     **closure)
 {
     int rgba_attribs[] = { GLX_RGBA,
@@ -161,6 +159,18 @@ _cairo_boilerplate_gl_create_window (const char           *name,
                           GLX_ALPHA_SIZE, 1,
                           GLX_DOUBLEBUFFER,
                           None };
+
+    int msaa_attribs[] = { GLX_RGBA,
+                          GLX_RED_SIZE, 1,
+                          GLX_GREEN_SIZE, 1,
+                          GLX_BLUE_SIZE, 1,
+                          GLX_ALPHA_SIZE, 1,
+                          GLX_STENCIL_SIZE, 1,
+                          GLX_SAMPLES, 4,
+                          GLX_SAMPLE_BUFFERS, 1,
+                          GLX_DOUBLEBUFFER,
+                          None };
+
     XVisualInfo *vi;
     GLXContext ctx;
     gl_target_closure_t *gltc;
@@ -187,7 +197,11 @@ _cairo_boilerplate_gl_create_window (const char           *name,
     if (mode == CAIRO_BOILERPLATE_MODE_TEST)
        XSynchronize (gltc->dpy, 1);
 
-    vi = glXChooseVisual (dpy, DefaultScreen (dpy), rgba_attribs);
+    vi = glXChooseVisual (dpy, DefaultScreen (dpy), msaa_attribs);
+
+    if (vi == NULL)
+       vi = glXChooseVisual (dpy, DefaultScreen (dpy), rgba_attribs);
+
     if (vi == NULL) {
        fprintf (stderr, "Failed to create RGBA, double-buffered visual\n");
        XCloseDisplay (dpy);
@@ -232,7 +246,6 @@ _cairo_boilerplate_gl_create_window_db (const char            *name,
                                        double                     max_width,
                                        double                     max_height,
                                        cairo_boilerplate_mode_t   mode,
-                                       int                        id,
                                        void                     **closure)
 {
     int rgba_attribs[] = { GLX_RGBA,
@@ -242,6 +255,18 @@ _cairo_boilerplate_gl_create_window_db (const char           *name,
                           GLX_ALPHA_SIZE, 1,
                           GLX_DOUBLEBUFFER,
                           None };
+
+    int msaa_attribs[] = { GLX_RGBA,
+                          GLX_RED_SIZE, 1,
+                          GLX_GREEN_SIZE, 1,
+                          GLX_BLUE_SIZE, 1,
+                          GLX_ALPHA_SIZE, 1,
+                          GLX_STENCIL_SIZE, 1,
+                          GLX_SAMPLES, 4,
+                          GLX_SAMPLE_BUFFERS, 1,
+                          GLX_DOUBLEBUFFER,
+                          None };
+
     XVisualInfo *vi;
     GLXContext ctx;
     gl_target_closure_t *gltc;
@@ -269,7 +294,11 @@ _cairo_boilerplate_gl_create_window_db (const char           *name,
     if (mode == CAIRO_BOILERPLATE_MODE_TEST)
        XSynchronize (gltc->dpy, 1);
 
-    vi = glXChooseVisual (dpy, DefaultScreen (dpy), rgba_attribs);
+    vi = glXChooseVisual (dpy, DefaultScreen (dpy), msaa_attribs);
+
+    if (vi == NULL)
+       vi = glXChooseVisual (dpy, DefaultScreen (dpy), rgba_attribs);
+
     if (vi == NULL) {
        fprintf (stderr, "Failed to create RGBA, double-buffered visual\n");
        XCloseDisplay (dpy);
index 5173780..d76d139 100644 (file)
@@ -64,7 +64,6 @@ _cairo_boilerplate_pdf_create_surface (const char              *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     pdf_target_closure_t *ptc;
index 53c8cb8..ae61239 100644 (file)
@@ -82,7 +82,6 @@ _cairo_boilerplate_ps_create_surface (const char              *name,
                                      double                     max_width,
                                      double                     max_height,
                                      cairo_boilerplate_mode_t   mode,
-                                     int                        id,
                                      void                     **closure)
 {
     ps_target_closure_t *ptc;
@@ -144,14 +143,13 @@ _cairo_boilerplate_ps2_create_surface (const char          *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     return _cairo_boilerplate_ps_create_surface (name, content,
                                                 CAIRO_PS_LEVEL_2,
                                                 width, height,
                                                 max_width, max_height,
-                                                mode, id,
+                                                mode,
                                                 closure);
 }
 
@@ -163,14 +161,13 @@ _cairo_boilerplate_ps3_create_surface (const char          *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     return _cairo_boilerplate_ps_create_surface (name, content,
                                                 CAIRO_PS_LEVEL_3,
                                                 width, height,
                                                 max_width, max_height,
-                                                mode, id,
+                                                mode,
                                                 closure);
 }
 
index bbeea4a..31c0814 100644 (file)
@@ -60,7 +60,6 @@ _cairo_boilerplate_qt_create_surface (const char              *name,
                                      double                     max_width,
                                      double                     max_height,
                                      cairo_boilerplate_mode_t   mode,
-                                     int                        id,
                                      void                     **closure)
 {
     qt_closure_t *qtc;
@@ -94,7 +93,7 @@ static const cairo_boilerplate_target_t targets[] = {
        CAIRO_SURFACE_TYPE_QT, CAIRO_CONTENT_COLOR_ALPHA, 0,
        "cairo_qt_surface_create",
        _cairo_boilerplate_qt_create_surface,
-       NULL, NULL,
+       NULL, NULL, NULL,
        _cairo_boilerplate_get_image_surface,
        cairo_surface_write_to_png,
        _cairo_boilerplate_qt_cleanup
@@ -104,7 +103,7 @@ static const cairo_boilerplate_target_t targets[] = {
        CAIRO_SURFACE_TYPE_QT, CAIRO_CONTENT_COLOR, 0,
        "cairo_qt_surface_create",
        _cairo_boilerplate_qt_create_surface,
-       NULL, NULL,
+       NULL, NULL, NULL,
        _cairo_boilerplate_get_image_surface,
        cairo_surface_write_to_png,
        _cairo_boilerplate_qt_cleanup
index 6b9697a..d4ca353 100644 (file)
@@ -36,7 +36,6 @@ _cairo_boilerplate_quartz_create_surface (const char              *name,
                                          double                     max_width,
                                          double                     max_height,
                                          cairo_boilerplate_mode_t   mode,
-                                         int                        id,
                                          void                     **closure)
 {
     cairo_format_t format;
index f031744..da8ae3b 100644 (file)
@@ -44,7 +44,6 @@ _cairo_boilerplate_script_create_surface (const char              *name,
                                          double                     max_width,
                                          double                     max_height,
                                          cairo_boilerplate_mode_t   mode,
-                                         int                        id,
                                          void                     **closure)
 {
     script_target_closure_t *ptc;
index 2bd31b0..c06e7f0 100644 (file)
@@ -11,7 +11,6 @@ _cairo_boilerplate_skia_create_surface (const char              *name,
                                        double                     max_width,
                                        double                     max_height,
                                        cairo_boilerplate_mode_t   mode,
-                                       int                        id,
                                        void                     **closure)
 {
     cairo_format_t format;
index 310dc5d..797106e 100644 (file)
@@ -62,7 +62,6 @@ _cairo_boilerplate_svg_create_surface (const char              *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     svg_target_closure_t *ptc;
@@ -117,7 +116,6 @@ _cairo_boilerplate_svg11_create_surface (const char            *name,
                                         double                     max_width,
                                         double                     max_height,
                                         cairo_boilerplate_mode_t   mode,
-                                        int                        id,
                                         void                     **closure)
 {
     /* current default, but be explicit in case the default changes */
@@ -125,7 +123,7 @@ _cairo_boilerplate_svg11_create_surface (const char            *name,
                                                  CAIRO_SVG_VERSION_1_1,
                                                  width, height,
                                                  max_width, max_height,
-                                                 mode, id,
+                                                 mode,
                                                  closure);
 }
 
@@ -137,14 +135,13 @@ _cairo_boilerplate_svg12_create_surface (const char                  *name,
                                         double                     max_width,
                                         double                     max_height,
                                         cairo_boilerplate_mode_t   mode,
-                                        int                        id,
                                         void                     **closure)
 {
     return _cairo_boilerplate_svg_create_surface (name, content,
                                                  CAIRO_SVG_VERSION_1_2,
                                                  width, height,
                                                  max_width, max_height,
-                                                 mode, id,
+                                                 mode,
                                                  closure);
 }
 
@@ -286,7 +283,7 @@ static const cairo_boilerplate_target_t targets[] = {
      * tests. XXX: I'd still like to chase these down at some point.
      * For now just set the svg error tolerance to 1. */
     {
-       "svg11", "svg", NULL, NULL,
+       "svg11", "svg", ".svg", NULL,
        CAIRO_SURFACE_TYPE_SVG, CAIRO_CONTENT_COLOR_ALPHA, 1,
        "cairo_svg_surface_create",
        _cairo_boilerplate_svg11_create_surface,
@@ -299,7 +296,7 @@ static const cairo_boilerplate_target_t targets[] = {
        NULL, NULL, FALSE, TRUE, TRUE
     },
     {
-       "svg11", "svg", NULL, NULL,
+       "svg11", "svg", ".svg", NULL,
        CAIRO_SURFACE_TYPE_RECORDING, CAIRO_CONTENT_COLOR, 1,
        "cairo_svg_surface_create",
        _cairo_boilerplate_svg11_create_surface,
@@ -312,7 +309,7 @@ static const cairo_boilerplate_target_t targets[] = {
        NULL, NULL, FALSE, TRUE, TRUE
     },
     {
-       "svg12", "svg", NULL, NULL,
+       "svg12", "svg", ".svg", NULL,
        CAIRO_SURFACE_TYPE_SVG, CAIRO_CONTENT_COLOR_ALPHA, 1,
        "cairo_svg_surface_create",
        _cairo_boilerplate_svg12_create_surface,
@@ -325,7 +322,7 @@ static const cairo_boilerplate_target_t targets[] = {
        NULL, NULL, FALSE, TRUE, TRUE
     },
     {
-       "svg12", "svg", NULL, NULL,
+       "svg12", "svg", ".svg", NULL,
        CAIRO_SURFACE_TYPE_RECORDING, CAIRO_CONTENT_COLOR, 1,
        "cairo_svg_surface_create",
        _cairo_boilerplate_svg12_create_surface,
index 73f2503..293b77f 100644 (file)
@@ -44,7 +44,6 @@ _cairo_boilerplate_test_base_compositor_create_surface (const char               *name,
                                                        double              max_width,
                                                        double              max_height,
                                                        cairo_boilerplate_mode_t mode,
-                                                       int                         id,
                                                        void              **closure)
 {
     *closure = NULL;
@@ -60,7 +59,6 @@ _cairo_boilerplate_test_fallback_compositor_create_surface (const char                   *name
                                                            double                  max_width,
                                                            double                  max_height,
                                                            cairo_boilerplate_mode_t mode,
-                                                           int                     id,
                                                            void                  **closure)
 {
     *closure = NULL;
@@ -75,7 +73,6 @@ _cairo_boilerplate_test_mask_compositor_create_surface (const char               *name,
                                                         double                     max_width,
                                                         double                     max_height,
                                                         cairo_boilerplate_mode_t   mode,
-                                                        int                        id,
                                                         void                     **closure)
 {
     *closure = NULL;
@@ -91,7 +88,6 @@ _cairo_boilerplate_test_traps_compositor_create_surface (const char              *name,
                                                         double                     max_width,
                                                         double                     max_height,
                                                         cairo_boilerplate_mode_t   mode,
-                                                        int                        id,
                                                         void                     **closure)
 {
     *closure = NULL;
@@ -106,7 +102,6 @@ _cairo_boilerplate_test_spans_compositor_create_surface (const char            *name,
                                                         double                     max_width,
                                                         double                     max_height,
                                                         cairo_boilerplate_mode_t   mode,
-                                                        int                        id,
                                                         void                     **closure)
 {
     *closure = NULL;
@@ -121,7 +116,6 @@ _cairo_boilerplate_test_no_fallback_compositor_create_surface (const char              *n
                                                               double                       max_width,
                                                               double                       max_height,
                                                               cairo_boilerplate_mode_t   mode,
-                                                              int                          id,
                                                               void                       **closure)
 {
     if (mode == CAIRO_BOILERPLATE_MODE_TEST)
@@ -139,7 +133,6 @@ _cairo_boilerplate_test_no_traps_compositor_create_surface (const char                 *name
                                                         double                     max_width,
                                                         double                     max_height,
                                                         cairo_boilerplate_mode_t   mode,
-                                                        int                        id,
                                                         void                     **closure)
 {
     if (mode == CAIRO_BOILERPLATE_MODE_TEST)
@@ -157,7 +150,6 @@ _cairo_boilerplate_test_no_spans_compositor_create_surface (const char                 *name
                                                         double                     max_width,
                                                         double                     max_height,
                                                         cairo_boilerplate_mode_t   mode,
-                                                        int                        id,
                                                         void                     **closure)
 {
     if (mode == CAIRO_BOILERPLATE_MODE_TEST)
@@ -182,7 +174,6 @@ _cairo_boilerplate_test_paginated_create_surface (const char                    *name,
                                                  double                     max_width,
                                                  double                     max_height,
                                                  cairo_boilerplate_mode_t   mode,
-                                                 int                        id,
                                                  void                     **closure)
 {
     test_paginated_closure_t *tpc;
index a49ed5d..ee32b3c 100644 (file)
@@ -78,7 +78,6 @@ _cairo_boilerplate_vg_create_surface_glx (const char              *name,
                                          double                     max_width,
                                          double                     max_height,
                                          cairo_boilerplate_mode_t   mode,
-                                         int                        id,
                                          void                     **closure)
 {
     int rgba_attribs[] = {
@@ -207,7 +206,6 @@ _cairo_boilerplate_vg_create_surface_egl (const char                    *name,
                                          double                     max_width,
                                          double                     max_height,
                                          cairo_boilerplate_mode_t   mode,
-                                         int                        id,
                                          void                     **closure)
 {
     int rgba_attribs[] = {
index 8ae1dcb..9088177 100644 (file)
@@ -109,7 +109,6 @@ _cairo_boilerplate_wgl_create_surface (const char            *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     wgl_target_closure_t *wgltc;
@@ -146,7 +145,6 @@ _cairo_boilerplate_wgl_for_create_window (const char                    *name,
                                          double                     max_width,
                                          double                     max_height,
                                          cairo_boilerplate_mode_t   mode,
-                                         int                        id,
                                          void                     **closure)
 {
     wgl_target_closure_t *wgltc;
index 0e54512..625d52c 100644 (file)
@@ -39,7 +39,6 @@
 #if CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE
 
 #include <cairo-win32.h>
-#include <cairo-win32-private.h>
 #include <cairo-paginated-surface-private.h>
 
 #include <windows.h>
 # define FEATURESETTING_PSLEVEL 0x0002
 #endif
 
+static cairo_status_t
+_cairo_win32_print_gdi_error (const char *context)
+{
+    void *lpMsgBuf;
+    DWORD last_error = GetLastError ();
+
+    if (!FormatMessageW (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                        FORMAT_MESSAGE_FROM_SYSTEM,
+                        NULL,
+                        last_error,
+                        MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+                        (LPWSTR) &lpMsgBuf,
+                        0, NULL)) {
+       fprintf (stderr, "%s: Unknown GDI error", context);
+    } else {
+       fprintf (stderr, "%s: %S", context, (wchar_t *)lpMsgBuf);
+
+       LocalFree (lpMsgBuf);
+    }
+
+    fflush (stderr);
+
+    /* We should switch off of last_status, but we'd either return
+     * CAIRO_STATUS_NO_MEMORY or CAIRO_STATUS_UNKNOWN_ERROR and there
+     * is no CAIRO_STATUS_UNKNOWN_ERROR.
+     */
+    return CAIRO_STATUS_NO_MEMORY;
+}
+
 static cairo_user_data_key_t win32_closure_key;
 
 typedef struct _win32_target_closure {
@@ -169,7 +197,6 @@ _cairo_boilerplate_win32_printing_create_surface (const char                    *name,
                                                  double                     max_width,
                                                  double                     max_height,
                                                  cairo_boilerplate_mode_t   mode,
-                                                 int                        id,
                                                  void                     **closure)
 {
     win32_target_closure_t *ptc;
index f7be663..7469cc7 100644 (file)
@@ -36,7 +36,6 @@ _cairo_boilerplate_win32_create_surface (const char              *name,
                                         double                     max_width,
                                         double                     max_height,
                                         cairo_boilerplate_mode_t   mode,
-                                        int                        id,
                                         void                     **closure)
 {
     cairo_format_t format;
index f9810ee..979f5b5 100644 (file)
@@ -245,7 +245,6 @@ _cairo_boilerplate_xcb_create_surface (const char            *name,
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure)
 {
     xcb_screen_t *root;
@@ -394,7 +393,6 @@ _cairo_boilerplate_xcb_create_window (const char            *name,
                                      double                     max_width,
                                      double                     max_height,
                                      cairo_boilerplate_mode_t   mode,
-                                     int                        id,
                                      void                     **closure)
 {
     xcb_target_closure_t *xtc;
@@ -471,7 +469,6 @@ _cairo_boilerplate_xcb_create_window_db (const char            *name,
                                         double                     max_width,
                                         double                     max_height,
                                         cairo_boilerplate_mode_t   mode,
-                                        int                        id,
                                         void                     **closure)
 {
     xcb_target_closure_t *xtc;
@@ -549,7 +546,6 @@ _cairo_boilerplate_xcb_create_render_0_0 (const char                    *name,
                                          double                     max_width,
                                          double                     max_height,
                                          cairo_boilerplate_mode_t   mode,
-                                         int                        id,
                                          void                     **closure)
 {
     xcb_screen_t *root;
@@ -651,7 +647,6 @@ _cairo_boilerplate_xcb_create_fallback (const char            *name,
                                        double                     max_width,
                                        double                     max_height,
                                        cairo_boilerplate_mode_t   mode,
-                                       int                        id,
                                        void                     **closure)
 {
     xcb_target_closure_t *xtc;
index 38c1135..aed075f 100644 (file)
@@ -274,13 +274,12 @@ _cairo_boilerplate_xlib_create_similar (cairo_surface_t           *other,
 
 static cairo_surface_t *
 _cairo_boilerplate_xlib_create_surface (const char               *name,
-                                       cairo_content_t            content,
+                                       cairo_content_t            content,
                                        double                     width,
                                        double                     height,
                                        double                     max_width,
                                        double                     max_height,
                                        cairo_boilerplate_mode_t   mode,
-                                       int                        id,
                                        void                     **closure)
 {
     xlib_target_closure_t *xtc;
@@ -316,6 +315,63 @@ _cairo_boilerplate_xlib_create_surface (const char           *name,
 }
 
 static cairo_surface_t *
+_cairo_boilerplate_xlib_render_0_0_create_surface (const char            *name,
+                                                  cairo_content_t                 content,
+                                                  double                          width,
+                                                  double                          height,
+                                                  double                          max_width,
+                                                  double                          max_height,
+                                                  cairo_boilerplate_mode_t   mode,
+                                                  void                  **closure)
+{
+    xlib_target_closure_t *xtc;
+    Display *dpy;
+    int screen;
+    Pixmap pixmap;
+    cairo_surface_t *surface, *dummy;
+
+    *closure = xtc = xcalloc (1, sizeof (xlib_target_closure_t));
+
+    width = ceil (width);
+    if (width < 1)
+       width = 1;
+
+    height = ceil (height);
+    if (height < 1)
+       height = 1;
+
+    xtc->dpy = dpy = XOpenDisplay (NULL);
+    if (xtc->dpy == NULL) {
+       free (xtc);
+       CAIRO_BOILERPLATE_DEBUG (("Failed to open display: %s\n", XDisplayName(0)));
+       return NULL;
+    }
+
+
+    screen = DefaultScreen (dpy);
+    pixmap = XCreatePixmap (dpy, DefaultRootWindow (dpy), 1, 1,
+                           DefaultDepth (dpy, screen));
+    dummy = cairo_xlib_surface_create (dpy, pixmap,
+                                      DefaultVisual (dpy, screen),
+                                      1, 1);
+    cairo_xlib_device_debug_cap_xrender_version (cairo_surface_get_device (dummy),
+                                                0, 0);
+
+    if (mode == CAIRO_BOILERPLATE_MODE_TEST)
+       surface = _cairo_boilerplate_xlib_test_create_surface (dpy, content, width, height, xtc);
+    else /* mode == CAIRO_BOILERPLATE_MODE_PERF */
+       surface = _cairo_boilerplate_xlib_perf_create_surface (dpy, content, width, height, xtc);
+
+    cairo_surface_destroy (dummy);
+    XFreePixmap (dpy, pixmap);
+
+    if (surface == NULL || cairo_surface_status (surface))
+       _cairo_boilerplate_xlib_cleanup (xtc);
+
+    return surface;
+}
+
+static cairo_surface_t *
 _cairo_boilerplate_xlib_window_create_surface (const char               *name,
                                               cairo_content_t            content,
                                               double                     width,
@@ -323,13 +379,11 @@ _cairo_boilerplate_xlib_window_create_surface (const char          *name,
                                               double                     max_width,
                                               double                     max_height,
                                               cairo_boilerplate_mode_t   mode,
-                                              int                        id,
                                               void                     **closure)
 {
     xlib_target_closure_t *xtc;
     Display *dpy;
-    Screen *scr;
-    int screen, x, y;
+    int screen;
     XSetWindowAttributes attr;
     cairo_surface_t *surface;
 
@@ -374,25 +428,9 @@ _cairo_boilerplate_xlib_window_create_surface (const char           *name,
        return NULL;
     }
 
-    /* tile the windows so threads do not overlap */
-    scr = XScreenOfDisplay (dpy, screen);
-    x = 10; y = 15;
-    if (id-- > 1) do {
-       x += max_width;
-       if (x + max_width > WidthOfScreen (scr)) {
-           x = 10;
-           y += max_height;
-           if (y + max_height > HeightOfScreen (scr)) {
-               XCloseDisplay (dpy);
-               free (xtc);
-               return NULL;
-           }
-       }
-    } while (--id);
-
     attr.override_redirect = True;
     xtc->drawable = XCreateWindow (dpy, DefaultRootWindow (dpy),
-                                  x, y,
+                                  0, 0,
                                   width, height, 0,
                                   DefaultDepth (dpy, screen),
                                   InputOutput,
@@ -411,49 +449,6 @@ _cairo_boilerplate_xlib_window_create_surface (const char           *name,
 
     return surface;
 }
-
-cairo_status_t
-cairo_boilerplate_xlib_surface_disable_render (cairo_surface_t *abstract_surface)
-{
-#if 0
-    /* The following stunt doesn't work with xlib-xcb because it doesn't use
-     * cairo_xlib_surface_t for its surfaces. Sadly, there is no sane
-     * alternative, so we can't disable render with xlib-xcb.
-     * FIXME: Find an alternative. */
-#if !CAIRO_HAS_XLIB_XCB_FUNCTIONS
-    cairo_xlib_surface_t *surface = (cairo_xlib_surface_t*) abstract_surface;
-
-    if (cairo_surface_get_type (abstract_surface) != CAIRO_SURFACE_TYPE_XLIB)
-       return CAIRO_STATUS_SURFACE_TYPE_MISMATCH;
-
-    surface->render_major = surface->render_minor = -1;
-    surface->xrender_format = NULL;
-
-    /* The content type is forced by _xrender_format_to_content() during
-     * non-Render surface creation, so repeat the procedure here. */
-    surface->base.content = CAIRO_CONTENT_COLOR;
-
-    /* These flags are set based on known bugs and lack of RENDER support */
-#if CAIRO_XLIB_SURFACE_HAS_BUGGY_GRADIENTS
-    surface->buggy_gradients = TRUE;
-#endif
-#if CAIRO_XLIB_SURFACE_HAS_BUGGY_PAD_REFLECT
-    surface->buggy_pad_reflect = TRUE;
-#endif
-#if CAIRO_XLIB_SURFACE_HAS_BUGGY_REPEAT
-    surface->buggy_repeat = TRUE;
-#endif
-#endif
-#endif
-
-    return CAIRO_STATUS_SUCCESS;
-}
-#else
-cairo_status_t
-cairo_boilerplate_xlib_surface_disable_render (cairo_surface_t *abstract_surface)
-{
-    return CAIRO_STATUS_SUCCESS;
-}
 #endif
 
 
@@ -475,15 +470,13 @@ _cairo_boilerplate_xlib_fallback_create_surface (const char                  *name,
                                                 double                     max_width,
                                                 double                     max_height,
                                                 cairo_boilerplate_mode_t   mode,
-                                                int                        id,
                                                 void                     **closure)
 {
     xlib_target_closure_t *xtc;
     Display *dpy;
-    Screen *scr;
-    int screen, x, y;
+    int screen;
     XSetWindowAttributes attr;
-    cairo_surface_t *surface;
+    cairo_surface_t *surface, *dummy;
 
     /* We're not yet bothering to support perf mode for the
      * xlib-fallback surface. */
@@ -526,25 +519,9 @@ _cairo_boilerplate_xlib_fallback_create_surface (const char                   *name,
        return NULL;
     }
 
-    /* tile the windows so threads do not overlap */
-    scr = XScreenOfDisplay (dpy, screen);
-    x = y = 0;
-    if (id-- > 1) do {
-       x += max_width;
-       if (x + max_width > WidthOfScreen (scr)) {
-           x = 0;
-           y += max_height;
-           if (y + max_height > HeightOfScreen (scr)) {
-               XCloseDisplay (dpy);
-               free (xtc);
-               return NULL;
-           }
-       }
-    } while (--id);
-
     attr.override_redirect = True;
     xtc->drawable = XCreateWindow (dpy, DefaultRootWindow (dpy),
-                                  x, y,
+                                  0, 0,
                                   width, height, 0,
                                   DefaultDepth (dpy, screen),
                                   InputOutput,
@@ -553,13 +530,18 @@ _cairo_boilerplate_xlib_fallback_create_surface (const char                  *name,
     XMapWindow (dpy, xtc->drawable);
     xtc->drawable_is_pixmap = FALSE;
 
+    dummy = cairo_xlib_surface_create (dpy, xtc->drawable,
+                                      DefaultVisual (dpy, screen),
+                                      width, height);
+    cairo_xlib_device_debug_cap_xrender_version (cairo_surface_get_device (dummy),
+                                                -1, -1);
+
     surface = cairo_xlib_surface_create (dpy, xtc->drawable,
                                         DefaultVisual (dpy, screen),
                                         width, height);
+    cairo_surface_destroy (dummy);
     if (cairo_surface_status (surface))
        _cairo_boilerplate_xlib_cleanup (xtc);
-    else
-       cairo_boilerplate_xlib_surface_disable_render (surface);
 
     _cairo_boilerplate_xlib_setup_test_surface(surface);
 
@@ -613,12 +595,26 @@ static const cairo_boilerplate_target_t targets[] = {
         NULL,
        FALSE, FALSE, FALSE
     },
+    {
+       "xlib-render-0_0", "mask", NULL, NULL,
+       CAIRO_SURFACE_TYPE_XLIB, CAIRO_CONTENT_COLOR, 1,
+       "cairo_xlib_surface_create",
+       _cairo_boilerplate_xlib_render_0_0_create_surface,
+       cairo_surface_create_similar,
+       NULL, NULL,
+       _cairo_boilerplate_get_image_surface,
+       cairo_surface_write_to_png,
+       _cairo_boilerplate_xlib_cleanup,
+       _cairo_boilerplate_xlib_synchronize,
+        NULL,
+       FALSE, FALSE, FALSE
+    },
 #endif
 #if CAIRO_HAS_XLIB_SURFACE
     /* This is a fallback surface which uses xlib fallbacks instead of
      * the Render extension. */
     {
-       "xlib-fallback", "xlib", NULL, NULL,
+       "xlib-fallback", "image", NULL, NULL,
        CAIRO_SURFACE_TYPE_XLIB, CAIRO_CONTENT_COLOR, 1,
        "cairo_xlib_surface_create",
        _cairo_boilerplate_xlib_fallback_create_surface,
index 8e252f5..41db8b8 100644 (file)
@@ -132,7 +132,6 @@ _cairo_boilerplate_image_create_surface (const char            *name,
                                         double                     max_width,
                                         double                     max_height,
                                         cairo_boilerplate_mode_t   mode,
-                                        int                        id,
                                         void                     **closure)
 {
     cairo_format_t format;
@@ -188,7 +187,6 @@ _cairo_boilerplate_image16_create_surface (const char                    *name,
                                           double                     max_width,
                                           double                     max_height,
                                           cairo_boilerplate_mode_t   mode,
-                                          int                        id,
                                           void                     **closure)
 {
     *closure = NULL;
@@ -243,7 +241,6 @@ _cairo_boilerplate_recording_create_surface (const char            *name,
                                             double                     max_width,
                                             double                     max_height,
                                             cairo_boilerplate_mode_t   mode,
-                                            int                        id,
                                             void                     **closure)
 {
     cairo_rectangle_t extents;
@@ -678,8 +675,6 @@ cairo_boilerplate_get_targets (int      *pnum_targets,
 const cairo_boilerplate_target_t *
 cairo_boilerplate_get_image_target (cairo_content_t content)
 {
-    struct cairo_boilerplate_target_list *list;
-
     if (cairo_boilerplate_targets == NULL)
        _cairo_boilerplate_register_all ();
 
@@ -791,19 +786,27 @@ any2ppm_daemon_exists (void)
 FILE *
 cairo_boilerplate_open_any2ppm (const char   *filename,
                                int           page,
-                               unsigned int  flags)
+                               unsigned int  flags,
+                               int        (**close_cb) (FILE *))
 {
     char command[4096];
+    const char *any2ppm;
 #if HAS_DAEMON
     int sk;
     struct sockaddr_un addr;
     int len;
+#endif
 
+    any2ppm = getenv ("ANY2PPM");
+    if (any2ppm == NULL)
+       any2ppm = "./any2ppm";
+
+#if HAS_DAEMON
     if (flags & CAIRO_BOILERPLATE_OPEN_NO_DAEMON)
        goto POPEN;
 
     if (! any2ppm_daemon_exists ()) {
-       if (system ("./any2ppm") != 0)
+       if (system (any2ppm) != 0)
            goto POPEN;
     }
 
@@ -826,11 +829,14 @@ cairo_boilerplate_open_any2ppm (const char   *filename,
        goto POPEN;
     }
 
+    *close_cb = fclose;
     return fdopen (sk, "r");
 
 POPEN:
 #endif
-    sprintf (command, "./any2ppm %s %d", filename, page);
+
+    *close_cb = pclose;
+    sprintf (command, "%s %s %d", any2ppm, filename, page);
     return popen (command, "r");
 }
 
@@ -923,10 +929,11 @@ cairo_boilerplate_convert_to_image (const char *filename,
     FILE *file;
     unsigned int flags = 0;
     cairo_surface_t *image;
+    int (*close_cb) (FILE *);
     int ret;
 
   RETRY:
-    file = cairo_boilerplate_open_any2ppm (filename, page, flags);
+    file = cairo_boilerplate_open_any2ppm (filename, page, flags, &close_cb);
     if (file == NULL) {
        switch (errno) {
        case ENOMEM:
@@ -937,7 +944,7 @@ cairo_boilerplate_convert_to_image (const char *filename,
     }
 
     image = cairo_boilerplate_image_surface_create_from_ppm_stream (file);
-    ret = pclose (file);
+    ret = close_cb (file);
     /* check for fatal errors from the interpreter */
     if (ret) { /* any2pmm should never die... */
        cairo_surface_destroy (image);
index 0615221..461b98b 100644 (file)
@@ -124,7 +124,6 @@ typedef cairo_surface_t *
                                       double                     max_width,
                                       double                     max_height,
                                       cairo_boilerplate_mode_t   mode,
-                                      int                        id,
                                       void                     **closure);
 
 typedef cairo_surface_t *
@@ -218,7 +217,9 @@ enum {
 FILE *
 cairo_boilerplate_open_any2ppm (const char   *filename,
                                int           page,
-                               unsigned int  flags);
+                               unsigned int  flags,
+                               int        (**close_cb) (FILE *));
+
 cairo_surface_t *
 cairo_boilerplate_image_surface_create_from_ppm_stream (FILE *file);
 
diff --git a/build/.gitignore b/build/.gitignore
new file mode 100644 (file)
index 0000000..53f31d7
--- /dev/null
@@ -0,0 +1,12 @@
+compile
+config.guess
+config.sub
+depcomp
+install-sh
+ltmain.sh
+missing
+mkinstalldirs
+#Makefile.win32.features
+#Makefile.win32.features-h
+libtool.m4
+lt*.m4
index 3ac479a..b17faab 100644 (file)
@@ -38,7 +38,7 @@ MANUAL_VERSIONED =            manual-$(VERSION)
 MANUAL_TAR_FILE =              $(MANUAL_VERSIONED).tar.gz
 MANUAL_UPLOAD_DIR =            $(RELEASE_UPLOAD_BASE)
 
-tar_file = $(PACKAGE)-$(VERSION).tar.gz
+tar_file = $(PACKAGE)-$(VERSION).tar.xz
 sha1_file = $(tar_file).sha1
 gpg_file = $(sha1_file).asc
 
index e422500..01a38cd 100644 (file)
@@ -3,6 +3,7 @@ default: all
 #
 # Edit build/Makefile.win32.features to enable features to build
 #
+include $(top_srcdir)/build/Makefile.win32.inform
 include $(top_srcdir)/build/Makefile.win32.features
 include $(top_srcdir)/build/Makefile.win32.features-h
 
@@ -48,28 +49,14 @@ DEFAULT_ARFLAGS = -nologo
 CAIRO_LDFLAGS = $(DEFAULT_LDFLAGS) $(LDFLAGS)
 CAIRO_ARFLAGS = $(DEFAULT_ARFLAGS) $(LDFLAGS)
 
-inform:
-       @echo
-ifneq ($(CFG),release)
-ifneq ($(CFG),debug)
-       @echo "Invalid configuration "$(CFG)" specified."
-       @echo -n "You must specify a configuration when "
-       @echo "running make, e.g. make CFG=debug"
-       @echo
-       @echo -n "Possible choices for configuration are "
-       @echo "'release' and 'debug'"
-       @exit 1
-endif
-endif
-
 # Some generic rules
 
 $(CFG)/%.obj: %.c $(top_srcdir)/src/cairo-features.h
-       @mkdir -p $(CFG)
+       @mkdir -p $(CFG)/`dirname $<`
        @$(CC) $(CAIRO_CFLAGS) -c -Fo"$@" $<
 
 $(CFG)/%-static.obj: %.c $(top_srcdir)/src/cairo-features.h
-       @mkdir -p $(CFG)
+       @mkdir -p $(CFG)/`dirname $<`
        @$(CC) $(CAIRO_CFLAGS) -c -DCAIRO_WIN32_STATIC_BUILD=1 -Fo"$@" $<
 
 clean:
index 650b224..8cb155d 100644 (file)
@@ -19,6 +19,7 @@ CAIRO_HAS_GALLIUM_SURFACE=0
 CAIRO_HAS_PNG_FUNCTIONS=1
 CAIRO_HAS_GL_SURFACE=0
 CAIRO_HAS_GLESV2_SURFACE=0
+CAIRO_HAS_COGL_SURFACE=0
 CAIRO_HAS_DIRECTFB_SURFACE=0
 CAIRO_HAS_VG_SURFACE=0
 CAIRO_HAS_EGL_FUNCTIONS=0
index 84d65f4..13904cf 100644 (file)
@@ -62,6 +62,9 @@ endif
 ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)
        @echo "#define CAIRO_HAS_GLESV2_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
 endif
+ifeq ($(CAIRO_HAS_COGL_SURFACE),1)
+       @echo "#define CAIRO_HAS_COGL_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
+endif
 ifeq ($(CAIRO_HAS_DIRECTFB_SURFACE),1)
        @echo "#define CAIRO_HAS_DIRECTFB_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h
 endif
diff --git a/build/Makefile.win32.inform b/build/Makefile.win32.inform
new file mode 100644 (file)
index 0000000..ba11165
--- /dev/null
@@ -0,0 +1,13 @@
+inform:
+       @echo
+ifneq ($(CFG),release)
+ifneq ($(CFG),debug)
+       @echo "Invalid configuration "$(CFG)" specified."
+       @echo -n "You must specify a configuration when "
+       @echo "running make, e.g. make CFG=debug"
+       @echo
+       @echo -n "Possible choices for configuration are "
+       @echo "'release' and 'debug'"
+       @exit 1
+endif
+endif
index faa762c..e4a2aaf 100644 (file)
@@ -388,6 +388,7 @@ AC_DEFUN([CAIRO_REPORT],
        echo "  DirectFB:      $use_directfb"
        echo "  OpenVG:        $use_vg"
        echo "  DRM:           $use_drm"
+       echo "  Cogl:          $use_cogl"
        echo ""
        echo "The following font backends:"
        echo "  User:          yes (always builtin)"
index 3eb0104..9b9c742 100644 (file)
@@ -21,6 +21,9 @@ MAYBE_WARN="-Wall -Wextra \
 -Wno-missing-field-initializers -Wno-unused-parameter \
 -Wno-attributes -Wno-long-long -Winline"
 
+# -Wunused-but-set-variable is too noisy at present
+NO_WARN="-Wno-unused-but-set-variable"
+
 dnl Sun Studio 12 likes to rag at us for abusing enums like
 dnl having cairo_status_t variables hold cairo_int_status_t
 dnl values.  It's bad, we know.  Now please be quiet.
@@ -29,11 +32,24 @@ MAYBE_WARN="$MAYBE_WARN -erroff=E_ENUM_TYPE_MISMATCH_ARG \
 
 dnl We also abuse the warning-flag facility to enable other compiler
 dnl options.  Namely, the following:
-MAYBE_WARN="$MAYBE_WARN -fno-strict-aliasing -fno-common -flto"
+
+dnl -flto working really needs a test link, not just a compile
+
+safe_MAYBE_WARN="$MAYBE_WARN"
+MAYBE_WARN="$MAYBE_WARN -flto"
+AC_TRY_LINK([],[
+       int main(int argc, char **argv) { return 0; }
+],[],[
+       MAYBE_WARN="$safe_MAYBE_WARN"
+])
+
+MAYBE_WARN="$MAYBE_WARN -fno-strict-aliasing -fno-common"
 
 dnl Also to turn various gcc/glibc-specific preprocessor checks
 MAYBE_WARN="$MAYBE_WARN -Wp,-D_FORTIFY_SOURCE=2"
 
+MAYBE_WARN="$MAYBE_WARN $NO_WARN"
+
 # invalidate cached value if MAYBE_WARN has changed
 if test "x$cairo_cv_warn_maybe" != "x$MAYBE_WARN"; then
        unset cairo_cv_warn_cflags
@@ -84,7 +100,7 @@ AC_DEFINE_UNQUOTED([WARN_UNUSED_RESULT], [$cairo_cv_warn_unused_result],
 
 dnl check linker flags
 AC_CACHE_CHECK([how to allow undefined symbols in shared libraries used by test suite], cairo_cv_test_undefined_ldflags,
-              [CAIRO_CC_TRY_FLAG([-Wl,--allow-shlib-undefined], [],
+              [CAIRO_CC_TRY_FLAG_SILENT([-Wl,--allow-shlib-undefined], [],
                                  [cairo_cv_test_undefined_ldflags="-Wl,--allow-shlib-undefined]")])
 CAIRO_TEST_UNDEFINED_LDFLAGS="$cairo_cv_test_undefined_ldflags"
 AC_SUBST(CAIRO_TEST_UNDEFINED_LDFLAGS)
index da6a305..a64d622 100644 (file)
@@ -2,7 +2,7 @@
 #define CAIRO_VERSION_H
 
 #define CAIRO_VERSION_MAJOR 1
-#define CAIRO_VERSION_MINOR 11
+#define CAIRO_VERSION_MINOR 12
 #define CAIRO_VERSION_MICRO 3
 
 #endif
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..fd0a609
--- /dev/null
@@ -0,0 +1,387 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* whether memory barriers are needed around atomic operations */
+#undef ATOMIC_OP_NEEDS_MEMORY_BARRIER
+
+/* Define to 1 if the PDF backend can be tested (need poppler and other
+   dependencies for pdf2png) */
+#undef CAIRO_CAN_TEST_PDF_SURFACE
+
+/* Define to 1 if the PS backend can be tested (needs ghostscript) */
+#undef CAIRO_CAN_TEST_PS_SURFACE
+
+/* Define to 1 if the SVG backend can be tested */
+#undef CAIRO_CAN_TEST_SVG_SURFACE
+
+/* Define to 1 if the Win32 Printing backend can be tested (needs ghostscript)
+   */
+#undef CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE
+
+/* Define to 1 if dlsym is available */
+#undef CAIRO_HAS_DLSYM
+
+/* Define to 1 to enable cairo's cairo-script-interpreter feature */
+#undef CAIRO_HAS_INTERPRETER
+
+/* Define to 1 to enable cairo's pthread feature */
+#undef CAIRO_HAS_PTHREAD
+
+/* Define to 1 if we have full pthread support */
+#undef CAIRO_HAS_REAL_PTHREAD
+
+/* Define to 1 if libspectre is available */
+#undef CAIRO_HAS_SPECTRE
+
+/* Define to 1 to enable cairo's symbol-lookup feature */
+#undef CAIRO_HAS_SYMBOL_LOOKUP
+
+/* Define to 1 to enable cairo's test surfaces feature */
+#undef CAIRO_HAS_TEST_SURFACES
+
+/* Define to 1 to enable cairo's cairo-trace feature */
+#undef CAIRO_HAS_TRACE
+
+/* Define to 1 to disable certain code paths that rely heavily on double
+   precision floating-point calculation */
+#undef DISABLE_SOME_FLOATING_POINT
+
+/* Define to 1 if your system stores words within floats with the most
+   significant word first */
+#undef FLOAT_WORDS_BIGENDIAN
+
+/* Define to 1 if you have the `alarm' function. */
+#undef HAVE_ALARM
+
+/* Define to 1 if you have the binutils development files installed */
+#undef HAVE_BFD
+
+/* Define to 1 if your compiler supports the __builtin_return_address()
+   intrinsic. */
+#undef HAVE_BUILTIN_RETURN_ADDRESS
+
+/* Define to 1 if you have the <byteswap.h> header file. */
+#undef HAVE_BYTESWAP_H
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the `ctime_r' function. */
+#undef HAVE_CTIME_R
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `drand48' function. */
+#undef HAVE_DRAND48
+
+/* Define to 1 if you have the `FcFini' function. */
+#undef HAVE_FCFINI
+
+/* Define to 1 if you have the `FcInit' function. */
+#undef HAVE_FCINIT
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `feclearexcept' function. */
+#undef HAVE_FECLEAREXCEPT
+
+/* Define to 1 if you have the `fedisableexcept' function. */
+#undef HAVE_FEDISABLEEXCEPT
+
+/* Define to 1 if you have the `feenableexcept' function. */
+#undef HAVE_FEENABLEEXCEPT
+
+/* Define to 1 if you have the <fenv.h> header file. */
+#undef HAVE_FENV_H
+
+/* Define to 1 if you have the `flockfile' function. */
+#undef HAVE_FLOCKFILE
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* FT_Bitmap_Size structure includes y_ppem field */
+#undef HAVE_FT_BITMAP_SIZE_Y_PPEM
+
+/* Define to 1 if you have the `FT_GlyphSlot_Embolden' function. */
+#undef HAVE_FT_GLYPHSLOT_EMBOLDEN
+
+/* Define to 1 if you have the `FT_GlyphSlot_Oblique' function. */
+#undef HAVE_FT_GLYPHSLOT_OBLIQUE
+
+/* Define to 1 if you have the `FT_Library_SetLcdFilter' function. */
+#undef HAVE_FT_LIBRARY_SETLCDFILTER
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+#undef HAVE_FT_LOAD_SFNT_TABLE
+
+/* Define to 1 if you have the `funlockfile' function. */
+#undef HAVE_FUNLOCKFILE
+
+/* Whether you have gcov */
+#undef HAVE_GCOV
+
+/* Define to 1 if you have the `getline' function. */
+#undef HAVE_GETLINE
+
+/* Enable if your compiler supports the Intel __sync_* atomic primitives */
+#undef HAVE_INTEL_ATOMIC_PRIMITIVES
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define to 1 if you have the <libgen.h> header file. */
+#undef HAVE_LIBGEN_H
+
+/* Define to 1 if you have the `rt' library (-lrt). */
+#undef HAVE_LIBRT
+
+/* Enable if you have libatomic-ops-dev installed */
+#undef HAVE_LIB_ATOMIC_OPS
+
+/* Define to 1 if you have the `link' function. */
+#undef HAVE_LINK
+
+/* Define to 1 if you have the Valgrind lockdep tool */
+#undef HAVE_LOCKDEP
+
+/* Define to 1 if you have the Valgrind memfault tool */
+#undef HAVE_MEMFAULT
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to non-zero if your system has mkdir, and to 2 if your version of
+   mkdir requires a mode parameter */
+#undef HAVE_MKDIR
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Enable if you have MacOS X atomic operations */
+#undef HAVE_OS_ATOMIC_OPS
+
+/* Define to 1 if you have the `poppler_page_render' function. */
+#undef HAVE_POPPLER_PAGE_RENDER
+
+/* Define to 1 if you have the `raise' function. */
+#undef HAVE_RAISE
+
+/* Define to 1 if you have the `rsvg_pixbuf_from_file' function. */
+#undef HAVE_RSVG_PIXBUF_FROM_FILE
+
+/* Define to 1 if you have the `sched_getaffinity' function. */
+#undef HAVE_SCHED_GETAFFINITY
+
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#undef HAVE_SETJMP_H
+
+/* Define to 1 if you have the <signal.h> header file. */
+#undef HAVE_SIGNAL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strndup' function. */
+#undef HAVE_STRNDUP
+
+/* Define to 1 if you have the <sys/int_types.h> header file. */
+#undef HAVE_SYS_INT_TYPES_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#undef HAVE_SYS_POLL_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#undef HAVE_SYS_UN_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if the system has the type `uint128_t'. */
+#undef HAVE_UINT128_T
+
+/* Define to 1 if the system has the type `uint64_t'. */
+#undef HAVE_UINT64_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have Valgrind */
+#undef HAVE_VALGRIND
+
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
+/* Define to 1 if you have the `XRenderCreateConicalGradient' function. */
+#undef HAVE_XRENDERCREATECONICALGRADIENT
+
+/* Define to 1 if you have the `XRenderCreateLinearGradient' function. */
+#undef HAVE_XRENDERCREATELINEARGRADIENT
+
+/* Define to 1 if you have the `XRenderCreateRadialGradient' function. */
+#undef HAVE_XRENDERCREATERADIALGRADIENT
+
+/* Define to 1 if you have zlib available */
+#undef HAVE_ZLIB
+
+/* Define to 1 if the system has the type `__uint128_t'. */
+#undef HAVE___UINT128_T
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Shared library file extension */
+#undef SHARED_LIB_EXT
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to the value your compiler uses to support the warn-unused-result
+   attribute */
+#undef WARN_UNUSED_RESULT
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
+
+/* Deal with multiple architecture compiles on Mac OS X */
+#ifdef __APPLE_CC__
+#ifdef __BIG_ENDIAN__
+#define WORDS_BIGENDIAN 1
+#define FLOAT_WORDS_BIGENDIAN 1
+#else
+#undef WORDS_BIGENDIAN
+#undef FLOAT_WORDS_BIGENDIAN
+#endif
+#endif
+
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..b7e9d84
--- /dev/null
+++ b/configure
@@ -0,0 +1,37843 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.67 for cairo 1.12.3.
+#
+# Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=cairo>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+        /*)
+          for as_base in sh bash ksh sh5; do
+            # Try only shells that exist, to save several forks.
+            as_shell=$as_dir/$as_base
+            if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+          done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+       # neutralization value for shells without unset; and this also
+       # works around shells that cannot unset nonexistent variables.
+       BASH_ENV=/dev/null
+       ENV=/dev/null
+       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+       export CONFIG_SHELL
+       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: http://bugs.freedesktop.org/enter_bug.cgi?product=cairo
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='        ';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "$0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='cairo'
+PACKAGE_TARNAME='cairo'
+PACKAGE_VERSION='1.12.3'
+PACKAGE_STRING='cairo 1.12.3'
+PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=cairo'
+PACKAGE_URL='http://cairographics.org/'
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_unique_file="src/cairo.h"
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+HAVE_GTK_FALSE
+HAVE_GTK_TRUE
+gtk_LIBS
+gtk_CFLAGS
+BUILD_CXX_FALSE
+BUILD_CXX_TRUE
+DISABLE_SOME_FLOATING_POINT_FALSE
+DISABLE_SOME_FLOATING_POINT_TRUE
+shm_LIBS
+BUILD_SPHINX_FALSE
+BUILD_SPHINX_TRUE
+glib_LIBS
+glib_CFLAGS
+CAIRO_HAS_SYMBOL_LOOKUP_FALSE
+CAIRO_HAS_SYMBOL_LOOKUP_TRUE
+BFD_LIBS
+CAIRO_HAS_INTERPRETER_FALSE
+CAIRO_HAS_INTERPRETER_TRUE
+CAIRO_HAS_TRACE_FALSE
+CAIRO_HAS_TRACE_TRUE
+SHLIB_EXT
+BUILD_ANY2PPM_FALSE
+BUILD_ANY2PPM_TRUE
+CAIRO_TEST_MODE
+CAIRO_HAS_GOBJECT_FUNCTIONS_FALSE
+CAIRO_HAS_GOBJECT_FUNCTIONS_TRUE
+GOBJECT_LIBS
+GOBJECT_CFLAGS
+real_pthread_LIBS
+real_pthread_CFLAGS
+pthread_LIBS
+pthread_CFLAGS
+HAVE_PTHREAD_FALSE
+HAVE_PTHREAD_TRUE
+HAVE_REAL_PTHREAD_FALSE
+HAVE_REAL_PTHREAD_TRUE
+CAIRO_HAS_PTHREAD_FALSE
+CAIRO_HAS_PTHREAD_TRUE
+CAIRO_HAS_XML_SURFACE_FALSE
+CAIRO_HAS_XML_SURFACE_TRUE
+CAIRO_HAS_TEE_SURFACE_FALSE
+CAIRO_HAS_TEE_SURFACE_TRUE
+pixman_LIBS
+pixman_CFLAGS
+CAIRO_HAS_TEST_SURFACES_FALSE
+CAIRO_HAS_TEST_SURFACES_TRUE
+CAIRO_CAN_TEST_SVG_SURFACE_FALSE
+CAIRO_CAN_TEST_SVG_SURFACE_TRUE
+LIBRSVG_LIBS
+LIBRSVG_CFLAGS
+CAIRO_HAS_SVG_SURFACE_FALSE
+CAIRO_HAS_SVG_SURFACE_TRUE
+CAIRO_HAS_MULTI_PAGE_SURFACES_FALSE
+CAIRO_HAS_MULTI_PAGE_SURFACES_TRUE
+CAIRO_CAN_TEST_PDF_SURFACE_FALSE
+CAIRO_CAN_TEST_PDF_SURFACE_TRUE
+POPPLER_LIBS
+POPPLER_CFLAGS
+CAIRO_HAS_PDF_SURFACE_FALSE
+CAIRO_HAS_PDF_SURFACE_TRUE
+CAIRO_HAS_SPECTRE_FALSE
+CAIRO_HAS_SPECTRE_TRUE
+CAIRO_CAN_TEST_PS_SURFACE_FALSE
+CAIRO_CAN_TEST_PS_SURFACE_TRUE
+LIBSPECTRE_LIBS
+LIBSPECTRE_CFLAGS
+CAIRO_HAS_PS_SURFACE_FALSE
+CAIRO_HAS_PS_SURFACE_TRUE
+CAIRO_HAS_FC_FONT_FALSE
+CAIRO_HAS_FC_FONT_TRUE
+FONTCONFIG_LIBS
+FONTCONFIG_CFLAGS
+CAIRO_HAS_FT_FONT_FALSE
+CAIRO_HAS_FT_FONT_TRUE
+FREETYPE_CONFIG
+FREETYPE_LIBS
+FREETYPE_CFLAGS
+CAIRO_HAS_SCRIPT_SURFACE_FALSE
+CAIRO_HAS_SCRIPT_SURFACE_TRUE
+CAIRO_HAS_WGL_FUNCTIONS_FALSE
+CAIRO_HAS_WGL_FUNCTIONS_TRUE
+CAIRO_HAS_GLX_FUNCTIONS_FALSE
+CAIRO_HAS_GLX_FUNCTIONS_TRUE
+CAIRO_HAS_EGL_FUNCTIONS_FALSE
+CAIRO_HAS_EGL_FUNCTIONS_TRUE
+egl_LIBS
+egl_CFLAGS
+CAIRO_HAS_VG_SURFACE_FALSE
+CAIRO_HAS_VG_SURFACE_TRUE
+CAIRO_HAS_DIRECTFB_SURFACE_FALSE
+CAIRO_HAS_DIRECTFB_SURFACE_TRUE
+directfb_LIBS
+directfb_CFLAGS
+CAIRO_HAS_COGL_SURFACE_FALSE
+CAIRO_HAS_COGL_SURFACE_TRUE
+cogl_LIBS
+cogl_CFLAGS
+CAIRO_HAS_GLESV2_SURFACE_FALSE
+CAIRO_HAS_GLESV2_SURFACE_TRUE
+glesv2_LIBS
+glesv2_CFLAGS
+CAIRO_HAS_GL_SURFACE_FALSE
+CAIRO_HAS_GL_SURFACE_TRUE
+gl_LIBS
+gl_CFLAGS
+CAIRO_HAS_PNG_FUNCTIONS_FALSE
+CAIRO_HAS_PNG_FUNCTIONS_TRUE
+png_LIBS
+png_CFLAGS
+png_REQUIRES
+CAIRO_HAS_GALLIUM_SURFACE_FALSE
+CAIRO_HAS_GALLIUM_SURFACE_TRUE
+gallium_DIR
+mesa_DIR
+CAIRO_HAS_DRM_SURFACE_FALSE
+CAIRO_HAS_DRM_SURFACE_TRUE
+drm_LIBS
+drm_CFLAGS
+CAIRO_HAS_BEOS_SURFACE_FALSE
+CAIRO_HAS_BEOS_SURFACE_TRUE
+CAIRO_HAS_OS2_SURFACE_FALSE
+CAIRO_HAS_OS2_SURFACE_TRUE
+CAIRO_HAS_SKIA_SURFACE_FALSE
+CAIRO_HAS_SKIA_SURFACE_TRUE
+skia_DIR
+CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_FALSE
+CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_TRUE
+GS
+CAIRO_HAS_WIN32_FONT_FALSE
+CAIRO_HAS_WIN32_FONT_TRUE
+CAIRO_HAS_WIN32_SURFACE_FALSE
+CAIRO_HAS_WIN32_SURFACE_TRUE
+CAIRO_HAS_QUARTZ_IMAGE_SURFACE_FALSE
+CAIRO_HAS_QUARTZ_IMAGE_SURFACE_TRUE
+CAIRO_HAS_QUARTZ_FONT_FALSE
+CAIRO_HAS_QUARTZ_FONT_TRUE
+CAIRO_HAS_QUARTZ_SURFACE_FALSE
+CAIRO_HAS_QUARTZ_SURFACE_TRUE
+CAIRO_HAS_QT_SURFACE_FALSE
+CAIRO_HAS_QT_SURFACE_TRUE
+qt_LIBS
+qt_CFLAGS
+CAIRO_HAS_XCB_SHM_FUNCTIONS_FALSE
+CAIRO_HAS_XCB_SHM_FUNCTIONS_TRUE
+xcb_shm_LIBS
+xcb_shm_CFLAGS
+CAIRO_HAS_XLIB_XCB_FUNCTIONS_FALSE
+CAIRO_HAS_XLIB_XCB_FUNCTIONS_TRUE
+xlib_xcb_LIBS
+xlib_xcb_CFLAGS
+CAIRO_HAS_XCB_SURFACE_FALSE
+CAIRO_HAS_XCB_SURFACE_TRUE
+xcb_LIBS
+xcb_CFLAGS
+CAIRO_HAS_XLIB_XRENDER_SURFACE_FALSE
+CAIRO_HAS_XLIB_XRENDER_SURFACE_TRUE
+xlib_xrender_LIBS
+xlib_xrender_CFLAGS
+CAIRO_HAS_XLIB_SURFACE_FALSE
+CAIRO_HAS_XLIB_SURFACE_TRUE
+X_EXTRA_LIBS
+X_LIBS
+X_PRE_LIBS
+X_CFLAGS
+XMKMF
+xlib_LIBS
+xlib_CFLAGS
+CAIRO_HAS_DLSYM_FALSE
+CAIRO_HAS_DLSYM_TRUE
+CAIRO_HAS_DL_FALSE
+CAIRO_HAS_DL_TRUE
+VALGRIND_LIBS
+VALGRIND_CFLAGS
+CAIRO_HAS_LCOV_FALSE
+CAIRO_HAS_LCOV_TRUE
+LTP_GENHTML
+LTP
+SHTOOL
+CAIROBOILERPLATE_LIBS
+SHM_LIBS
+HAVE_SHM_FALSE
+HAVE_SHM_TRUE
+LIBM
+OS_WIN32_FALSE
+OS_WIN32_TRUE
+CROSS_COMPILING_FALSE
+CROSS_COMPILING_TRUE
+CAIRO_TEST_UNDEFINED_LDFLAGS
+CAIRO_NONPKGCONFIG_LIBS
+CAIRO_LIBS
+CAIRO_NONPKGCONFIG_CFLAGS
+CAIRO_LDFLAGS
+CAIRO_CFLAGS
+CAIRO_REQUIRES
+PKGCONFIG_REQUIRES
+CXXCPP
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+XARGS
+FIND
+CAIRO_LIBTOOL_VERSION_INFO
+CAIRO_RELEASE_STATUS
+CAIRO_VERSION_SONUM
+CAIRO_VERSION_MICRO
+CAIRO_VERSION_MINOR
+CAIRO_VERSION_MAJOR
+GTK_DOC_USE_REBASE_FALSE
+GTK_DOC_USE_REBASE_TRUE
+GTK_DOC_USE_LIBTOOL_FALSE
+GTK_DOC_USE_LIBTOOL_TRUE
+GTK_DOC_BUILD_PDF_FALSE
+GTK_DOC_BUILD_PDF_TRUE
+GTK_DOC_BUILD_HTML_FALSE
+GTK_DOC_BUILD_HTML_TRUE
+ENABLE_GTK_DOC_FALSE
+ENABLE_GTK_DOC_TRUE
+PKG_CONFIG
+HTML_DIR
+GTKDOC_MKPDF
+GTKDOC_REBASE
+GTKDOC_CHECK
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+RANLIB
+AR
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+EGREP
+GREP
+CPP
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_silent_rules
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+with_html_dir
+enable_gtk_doc
+enable_gtk_doc_html
+enable_gtk_doc_pdf
+enable_largefile
+enable_atomic
+enable_gcov
+enable_valgrind
+enable_xlib
+with_x
+enable_xlib_xrender
+enable_xcb
+enable_xlib_xcb
+enable_xcb_shm
+enable_qt
+enable_quartz
+enable_quartz_font
+enable_quartz_image
+enable_win32
+enable_win32_font
+enable_skia
+with_skia
+with_skia_bulid
+enable_os2
+enable_beos
+enable_drm
+enable_gallium
+with_gallium
+enable_png
+enable_gl
+enable_glesv2
+enable_cogl
+enable_directfb
+enable_vg
+enable_egl
+enable_glx
+enable_wgl
+enable_script
+enable_ft
+enable_fc
+enable_ps
+enable_pdf
+enable_svg
+enable_test_surfaces
+enable_tee
+enable_xml
+enable_pthread
+enable_gobject
+enable_full_testing
+enable_trace
+enable_interpreter
+enable_symbol_lookup
+enable_some_floating_point
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+PKG_CONFIG
+CXX
+CXXFLAGS
+CCC
+CXXCPP
+VALGRIND_CFLAGS
+VALGRIND_LIBS
+xlib_CFLAGS
+xlib_LIBS
+XMKMF
+xlib_xrender_CFLAGS
+xlib_xrender_LIBS
+xcb_CFLAGS
+xcb_LIBS
+xlib_xcb_CFLAGS
+xlib_xcb_LIBS
+xcb_shm_CFLAGS
+xcb_shm_LIBS
+qt_CFLAGS
+qt_LIBS
+drm_CFLAGS
+drm_LIBS
+png_REQUIRES
+png_CFLAGS
+png_LIBS
+gl_CFLAGS
+gl_LIBS
+glesv2_CFLAGS
+glesv2_LIBS
+cogl_CFLAGS
+cogl_LIBS
+directfb_CFLAGS
+directfb_LIBS
+egl_CFLAGS
+egl_LIBS
+FREETYPE_CFLAGS
+FREETYPE_LIBS
+FONTCONFIG_CFLAGS
+FONTCONFIG_LIBS
+LIBSPECTRE_CFLAGS
+LIBSPECTRE_LIBS
+POPPLER_CFLAGS
+POPPLER_LIBS
+LIBRSVG_CFLAGS
+LIBRSVG_LIBS
+pixman_CFLAGS
+pixman_LIBS
+GOBJECT_CFLAGS
+GOBJECT_LIBS
+glib_CFLAGS
+glib_LIBS
+gtk_CFLAGS
+gtk_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_myself" : 'X\(//\)[^/]' \| \
+        X"$as_myself" : 'X\(//\)$' \| \
+        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures cairo 1.12.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/cairo]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+X features:
+  --x-includes=DIR    X include files are in DIR
+  --x-libraries=DIR   X library files are in DIR
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of cairo 1.12.3:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-silent-rules          less verbose build output (undo: `make V=1')
+  --disable-silent-rules         verbose build output (undo: `make V=0')
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-gtk-doc        use gtk-doc to build documentation [[default=no]]
+  --enable-gtk-doc-html   build documentation in html format [[default=yes]]
+  --enable-gtk-doc-pdf    build documentation in pdf format [[default=no]]
+  --disable-largefile     omit support for large files
+  --disable-atomic        disable use of native atomic operations
+  --enable-gcov           Enable gcov
+  --disable-valgrind      Disable valgrind support
+  --enable-xlib=[no/auto/yes]
+                          Enable cairo's Xlib surface backend feature
+                          [default=auto]
+  --enable-xlib-xrender=[no/auto/yes]
+                          Enable cairo's Xlib Xrender surface backend feature
+                          [default=auto]
+  --enable-xcb=[no/auto/yes]
+                          Enable cairo's XCB surface backend feature
+                          [default=auto]
+  --enable-xlib-xcb=[no/auto/yes]
+                          Enable cairo's Xlib/XCB functions feature
+                          [default=no]
+  --enable-xcb-shm=[no/auto/yes]
+                          Enable cairo's XCB/SHM functions feature
+                          [default=auto]
+  --enable-qt=[no/auto/yes]
+                          Enable cairo's Qt surface backend feature
+                          [default=no]
+  --enable-quartz=[no/auto/yes]
+                          Enable cairo's Quartz surface backend feature
+                          [default=auto]
+  --enable-quartz-font=[no/auto/yes]
+                          Enable cairo's Quartz font backend feature
+                          [default=auto]
+  --enable-quartz-image=[no/auto/yes]
+                          Enable cairo's Quartz Image surface backend feature
+                          [default=no]
+  --enable-win32=[no/auto/yes]
+                          Enable cairo's Microsoft Windows surface backend
+                          feature [default=auto]
+  --enable-win32-font=[no/auto/yes]
+                          Enable cairo's Microsoft Windows font backend
+                          feature [default=auto]
+  --enable-skia=[no/auto/yes]
+                          Enable cairo's Skia surface backend feature
+                          [default=no]
+  --enable-os2=[no/auto/yes]
+                          Enable cairo's OS/2 surface backend feature
+                          [default=no]
+  --enable-beos=[no/auto/yes]
+                          Enable cairo's BeOS/Zeta surface backend feature
+                          [default=no]
+  --enable-drm=[no/auto/yes]
+                          Enable cairo's DRM surface backend feature
+                          [default=no]
+  --enable-gallium=[no/auto/yes]
+                          Enable cairo's Gallium3D surface backend feature
+                          [default=no]
+  --enable-png=[no/auto/yes]
+                          Enable cairo's PNG functions feature [default=yes]
+  --enable-gl=[no/auto/yes]
+                          Enable cairo's OpenGL surface backend feature
+                          [default=no]
+  --enable-glesv2=[no/auto/yes]
+                          Enable cairo's OpenGLESv2 surface backend feature
+                          [default=no]
+  --enable-cogl=[no/auto/yes]
+                          Enable cairo's Cogl surface backend feature
+                          [default=no]
+  --enable-directfb=[no/auto/yes]
+                          Enable cairo's directfb surface backend feature
+                          [default=no]
+  --enable-vg=[no/auto/yes]
+                          Enable cairo's OpenVG surface backend feature
+                          [default=no]
+  --enable-egl=[no/auto/yes]
+                          Enable cairo's EGL functions feature [default=auto]
+  --enable-glx=[no/auto/yes]
+                          Enable cairo's GLX functions feature [default=auto]
+  --enable-wgl=[no/auto/yes]
+                          Enable cairo's WGL functions feature [default=auto]
+  --enable-script=[no/auto/yes]
+                          Enable cairo's script surface backend feature
+                          [default=yes]
+  --enable-ft=[no/auto/yes]
+                          Enable cairo's FreeType font backend feature
+                          [default=auto]
+  --enable-fc=[no/auto/yes]
+                          Enable cairo's Fontconfig font backend feature
+                          [default=auto]
+  --enable-ps=[no/auto/yes]
+                          Enable cairo's PostScript surface backend feature
+                          [default=yes]
+  --enable-pdf=[no/auto/yes]
+                          Enable cairo's PDF surface backend feature
+                          [default=yes]
+  --enable-svg=[no/auto/yes]
+                          Enable cairo's SVG surface backend feature
+                          [default=yes]
+  --enable-test-surfaces=[no/auto/yes]
+                          Enable cairo's test surfaces feature [default=no]
+  --enable-tee=[no/auto/yes]
+                          Enable cairo's tee surface backend feature
+                          [default=no]
+  --enable-xml=[no/auto/yes]
+                          Enable cairo's xml surface backend feature
+                          [default=no]
+  --enable-pthread=[no/auto/yes]
+                          Enable cairo's pthread feature [default=auto]
+  --enable-gobject=[no/auto/yes]
+                          Enable cairo's gobject functions feature
+                          [default=auto]
+  --enable-full-testing   Sets the test suite to perform full testing by
+                          default, which will dramatically slow down make
+                          check, but is a *requirement* before release.
+  --enable-trace=[no/auto/yes]
+                          Enable cairo's cairo-trace feature [default=auto]
+  --enable-interpreter=[no/auto/yes]
+                          Enable cairo's cairo-script-interpreter feature
+                          [default=yes]
+  --enable-symbol-lookup=[no/auto/yes]
+                          Enable cairo's symbol-lookup feature [default=auto]
+  --disable-some-floating-point
+                          Disable certain code paths that rely heavily on
+                          double precision floating-point calculation. This
+                          option can improve performance on systems without a
+                          double precision floating-point unit, but might
+                          degrade performance on those that do.
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-html-dir=PATH    path to installed docs
+  --with-x                use the X Window System
+  --with-skia=/path/to/skia
+                          directory to find compiled skia sources
+  --with-skia-build=(Release|Debug)
+                             build of skia to link with, default is Release
+
+  --with-gallium=/path/to/mesa
+                          directory to find gallium enabled mesa
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  PKG_CONFIG  path to pkg-config utility
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+  VALGRIND_CFLAGS
+              C compiler flags for VALGRIND, overriding pkg-config
+  VALGRIND_LIBS
+              linker flags for VALGRIND, overriding pkg-config
+  xlib_CFLAGS C compiler flags for xlib, overriding pkg-config
+  xlib_LIBS   linker flags for xlib, overriding pkg-config
+  XMKMF       Path to xmkmf, Makefile generator for X Window System
+  xlib_xrender_CFLAGS
+              C compiler flags for xlib_xrender, overriding pkg-config
+  xlib_xrender_LIBS
+              linker flags for xlib_xrender, overriding pkg-config
+  xcb_CFLAGS  C compiler flags for xcb, overriding pkg-config
+  xcb_LIBS    linker flags for xcb, overriding pkg-config
+  xlib_xcb_CFLAGS
+              C compiler flags for xlib_xcb, overriding pkg-config
+  xlib_xcb_LIBS
+              linker flags for xlib_xcb, overriding pkg-config
+  xcb_shm_CFLAGS
+              C compiler flags for xcb_shm, overriding pkg-config
+  xcb_shm_LIBS
+              linker flags for xcb_shm, overriding pkg-config
+  qt_CFLAGS   C compiler flags for qt, overriding pkg-config
+  qt_LIBS     linker flags for qt, overriding pkg-config
+  drm_CFLAGS  C compiler flags for drm, overriding pkg-config
+  drm_LIBS    linker flags for drm, overriding pkg-config
+  png_REQUIRES
+              module name for libpng to search for using pkg-config
+  png_CFLAGS  C compiler flags for png, overriding pkg-config
+  png_LIBS    linker flags for png, overriding pkg-config
+  gl_CFLAGS   C compiler flags for gl, overriding pkg-config
+  gl_LIBS     linker flags for gl, overriding pkg-config
+  glesv2_CFLAGS
+              C compiler flags for glesv2, overriding pkg-config
+  glesv2_LIBS linker flags for glesv2, overriding pkg-config
+  cogl_CFLAGS C compiler flags for cogl, overriding pkg-config
+  cogl_LIBS   linker flags for cogl, overriding pkg-config
+  directfb_CFLAGS
+              C compiler flags for directfb, overriding pkg-config
+  directfb_LIBS
+              linker flags for directfb, overriding pkg-config
+  egl_CFLAGS  C compiler flags for egl, overriding pkg-config
+  egl_LIBS    linker flags for egl, overriding pkg-config
+  FREETYPE_CFLAGS
+              C compiler flags for FREETYPE, overriding pkg-config
+  FREETYPE_LIBS
+              linker flags for FREETYPE, overriding pkg-config
+  FONTCONFIG_CFLAGS
+              C compiler flags for FONTCONFIG, overriding pkg-config
+  FONTCONFIG_LIBS
+              linker flags for FONTCONFIG, overriding pkg-config
+  LIBSPECTRE_CFLAGS
+              C compiler flags for LIBSPECTRE, overriding pkg-config
+  LIBSPECTRE_LIBS
+              linker flags for LIBSPECTRE, overriding pkg-config
+  POPPLER_CFLAGS
+              C compiler flags for POPPLER, overriding pkg-config
+  POPPLER_LIBS
+              linker flags for POPPLER, overriding pkg-config
+  LIBRSVG_CFLAGS
+              C compiler flags for LIBRSVG, overriding pkg-config
+  LIBRSVG_LIBS
+              linker flags for LIBRSVG, overriding pkg-config
+  pixman_CFLAGS
+              C compiler flags for pixman, overriding pkg-config
+  pixman_LIBS linker flags for pixman, overriding pkg-config
+  GOBJECT_CFLAGS
+              C compiler flags for GOBJECT, overriding pkg-config
+  GOBJECT_LIBS
+              linker flags for GOBJECT, overriding pkg-config
+  glib_CFLAGS C compiler flags for glib, overriding pkg-config
+  glib_LIBS   linker flags for glib, overriding pkg-config
+  gtk_CFLAGS  C compiler flags for gtk, overriding pkg-config
+  gtk_LIBS    linker flags for gtk, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=cairo>.
+cairo home page: <http://cairographics.org/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+cairo configure 1.12.3
+generated by GNU Autoconf 2.67
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval "test \"\${$3+set}\"" = set; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------------------------------------------------- ##
+## Report this to http://bugs.freedesktop.org/enter_bug.cgi?product=cairo ##
+## ---------------------------------------------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+        return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+           return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval "test \"\${$4+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_member
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by cairo $as_me 1.12.3, which was
+generated by GNU Autoconf 2.67.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_aux_dir=
+for ac_dir in build "$srcdir"/build; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in build \"$srcdir\"/build" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#        define __EXTENSIONS__ 1
+         $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+am__api_version='1.11'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='cairo'
+ VERSION='1.12.3'
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=0;;
+esac
+AM_BACKSLASH='\'
+
+
+# Initialize libtool
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3017'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:5774: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5777: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5780: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 6982 "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[012]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AS"; then
+  ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AS="${ac_tool_prefix}as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+  ac_ct_AS=$AS
+  # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AS"; then
+  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AS="as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AS" = x; then
+    AS="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AS=$ac_ct_AS
+  fi
+else
+  AS="$ac_cv_prog_AS"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+  ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+        enable_dlopen=no
+
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8542: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8546: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8881: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8885: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8986: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:8990: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9041: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9045: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec=
+         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+       link_all_deplibs=no
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' ${wl}-bernotok'
+         allow_undefined_flag=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         whole_archive_flag_spec='$convenience'
+         archive_cmds_need_lc=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_flag_spec_ld='+b $libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+         export_dynamic_flag_spec='${wl}-E'
+       else
+         case $host_os in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+       pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        then
+         archive_cmds_need_lc=no
+        else
+         archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11425 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11521 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# Api documentation
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+
+
+    # Extract the first word of "gtkdoc-check", so it can be a program name with args.
+set dummy gtkdoc-check; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_CHECK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_CHECK in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK
+if test -n "$GTKDOC_CHECK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5
+$as_echo "$GTKDOC_CHECK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  for ac_prog in gtkdoc-rebase
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_REBASE+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_REBASE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE
+if test -n "$GTKDOC_REBASE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5
+$as_echo "$GTKDOC_REBASE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GTKDOC_REBASE" && break
+done
+test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true"
+
+  # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args.
+set dummy gtkdoc-mkpdf; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_MKPDF+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_MKPDF in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF
+if test -n "$GTKDOC_MKPDF"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5
+$as_echo "$GTKDOC_MKPDF" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+# Check whether --with-html-dir was given.
+if test "${with_html_dir+set}" = set; then :
+  withval=$with_html_dir;
+else
+  with_html_dir='${datadir}/gtk-doc/html'
+fi
+
+  HTML_DIR="$with_html_dir"
+
+
+    # Check whether --enable-gtk-doc was given.
+if test "${enable_gtk_doc+set}" = set; then :
+  enableval=$enable_gtk_doc;
+else
+  enable_gtk_doc=no
+fi
+
+
+  if test x$enable_gtk_doc = xyes; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.15\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.15") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  :
+else
+  as_fn_error $? "You need to have gtk-doc >= 1.15 installed to build $PACKAGE_NAME" "$LINENO" 5
+fi
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5
+$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5
+$as_echo "$enable_gtk_doc" >&6; }
+
+    # Check whether --enable-gtk-doc-html was given.
+if test "${enable_gtk_doc_html+set}" = set; then :
+  enableval=$enable_gtk_doc_html;
+else
+  enable_gtk_doc_html=yes
+fi
+
+    # Check whether --enable-gtk-doc-pdf was given.
+if test "${enable_gtk_doc_pdf+set}" = set; then :
+  enableval=$enable_gtk_doc_pdf;
+else
+  enable_gtk_doc_pdf=no
+fi
+
+
+  if test -z "$GTKDOC_MKPDF"; then
+    enable_gtk_doc_pdf=no
+  fi
+
+
+   if test x$enable_gtk_doc = xyes; then
+  ENABLE_GTK_DOC_TRUE=
+  ENABLE_GTK_DOC_FALSE='#'
+else
+  ENABLE_GTK_DOC_TRUE='#'
+  ENABLE_GTK_DOC_FALSE=
+fi
+
+   if test x$enable_gtk_doc_html = xyes; then
+  GTK_DOC_BUILD_HTML_TRUE=
+  GTK_DOC_BUILD_HTML_FALSE='#'
+else
+  GTK_DOC_BUILD_HTML_TRUE='#'
+  GTK_DOC_BUILD_HTML_FALSE=
+fi
+
+   if test x$enable_gtk_doc_pdf = xyes; then
+  GTK_DOC_BUILD_PDF_TRUE=
+  GTK_DOC_BUILD_PDF_FALSE='#'
+else
+  GTK_DOC_BUILD_PDF_TRUE='#'
+  GTK_DOC_BUILD_PDF_FALSE=
+fi
+
+   if test -n "$LIBTOOL"; then
+  GTK_DOC_USE_LIBTOOL_TRUE=
+  GTK_DOC_USE_LIBTOOL_FALSE='#'
+else
+  GTK_DOC_USE_LIBTOOL_TRUE='#'
+  GTK_DOC_USE_LIBTOOL_FALSE=
+fi
+
+   if test -n "$GTKDOC_REBASE"; then
+  GTK_DOC_USE_REBASE_TRUE=
+  GTK_DOC_USE_REBASE_FALSE='#'
+else
+  GTK_DOC_USE_REBASE_TRUE='#'
+  GTK_DOC_USE_REBASE_FALSE=
+fi
+
+
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+        # IRIX 6.2 and later do not support large files by default,
+        # so use the C compiler's -n32 option if that helps.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+        if ac_fn_c_try_compile "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext
+        CC="$CC -n32"
+        if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+        break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CAIRO_VERSION_MAJOR=1
+CAIRO_VERSION_MINOR=12
+CAIRO_VERSION_MICRO=3
+CAIRO_VERSION_SONUM=2
+CAIRO_RELEASE_STATUS=git
+CAIRO_LIBTOOL_VERSION_INFO=11202:3:11200
+
+
+
+
+
+
+
+# Extract the first word of "find", so it can be a program name with args.
+set dummy find; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_FIND+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $FIND in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_FIND="$FIND" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+FIND=$ac_cv_path_FIND
+if test -n "$FIND"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5
+$as_echo "$FIND" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "xargs", so it can be a program name with args.
+set dummy xargs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XARGS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $XARGS in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+XARGS=$ac_cv_path_XARGS
+if test -n "$XARGS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5
+$as_echo "$XARGS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+_lt_caught_CXX_error=yes; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           hardcode_direct_CXX=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           hardcode_minus_L_CXX=yes
+           hardcode_libdir_flag_spec_CXX='-L$libdir'
+           hardcode_libdir_separator_CXX=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+           allow_undefined_flag_CXX="-z nodefs"
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           no_undefined_flag_CXX=' ${wl}-bernotok'
+           allow_undefined_flag_CXX=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           whole_archive_flag_spec_CXX='$convenience'
+           archive_cmds_need_lc_CXX=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         allow_undefined_flag_CXX=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         ld_shlibs_CXX=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+        # as there is no search path for DLLs.
+        hardcode_libdir_flag_spec_CXX='-L$libdir'
+        allow_undefined_flag_CXX=unsupported
+        always_export_symbols_CXX=no
+        enable_shared_with_static_runtimes_CXX=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          ld_shlibs_CXX=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  whole_archive_flag_spec_CXX=''
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      freebsd[12]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+         hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+       hardcode_direct_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+       export_dynamic_flag_spec_CXX='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           link_all_deplibs_CXX=yes
+           ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           archive_cmds_need_lc_CXX=no
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+             prelink_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             old_archive_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             archive_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             archive_expsym_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             no_undefined_flag_CXX=' -zdefs'
+             archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             hardcode_libdir_flag_spec_CXX='-R$libdir'
+             whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             compiler_needs_object_CXX=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       ld_shlibs_CXX=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         hardcode_libdir_flag_spec_CXX='-R$libdir'
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       ld_shlibs_CXX=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+         hardcode_direct_absolute_CXX=yes
+         archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           export_dynamic_flag_spec_CXX='${wl}-E'
+           whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               allow_undefined_flag_CXX=' -expect_unresolved \*'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+               ;;
+           esac
+
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+             hardcode_libdir_separator_CXX=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+           no_undefined_flag_CXX=' -zdefs'
+           archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           hardcode_libdir_flag_spec_CXX='-R$libdir'
+           hardcode_shlibpath_var_CXX=no
+           case $host_os in
+             solaris2.[0-5] | solaris2.[0-5].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           link_all_deplibs_CXX=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[0-5] | solaris2.[0-5].*) ;;
+               *)
+                 whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       no_undefined_flag_CXX='${wl}-z,text'
+       allow_undefined_flag_CXX='${wl}-z,nodefs'
+       archive_cmds_need_lc_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+       hardcode_libdir_separator_CXX=':'
+       link_all_deplibs_CXX=yes
+       export_dynamic_flag_spec_CXX='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$compiler_lib_search_path_CXX"; then
+            compiler_lib_search_path_CXX="${prev}${p}"
+          else
+            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$postdeps_CXX"; then
+          postdeps_CXX="${prev}${p}"
+        else
+          postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$predep_objects_CXX"; then
+          predep_objects_CXX="$p"
+        else
+          predep_objects_CXX="$predep_objects_CXX $p"
+        fi
+       else
+        if test -z "$postdep_objects_CXX"; then
+          postdep_objects_CXX="$p"
+        else
+          postdep_objects_CXX="$postdep_objects_CXX $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       lt_prog_compiler_pic_CXX='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         lt_prog_compiler_static_CXX='-Bstatic'
+       else
+         lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             lt_prog_compiler_pic_CXX='+Z'
+           fi
+           ;;
+         aCC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             lt_prog_compiler_pic_CXX='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64 which still supported -KPIC.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fpic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-qpic'
+           lt_prog_compiler_static_CXX='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             lt_prog_compiler_pic_CXX='-KPIC'
+             lt_prog_compiler_static_CXX='-Bstatic'
+             lt_prog_compiler_wl_CXX='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           lt_prog_compiler_pic_CXX='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           lt_prog_compiler_wl_CXX='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           lt_prog_compiler_pic_CXX='-pic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       lt_prog_compiler_can_build_shared_CXX=no
+       ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15735: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:15739: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15834: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:15838: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15886: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:15890: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs_CXX=no
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+       pic_flag=$lt_prog_compiler_pic_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        then
+         archive_cmds_need_lc_CXX=no
+        else
+         archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
+$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ if test "x$CC" != xcc; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+                     sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+   test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+        test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+      then
+       # cc works too.
+       :
+      else
+       # cc exists but doesn't like -o.
+       eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if test "${ac_cv_c_inline+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+if test "x$PKG_CONFIG" = x; then
+       as_fn_error $? "pkg-config >= $PKGCONFIG_REQUIRED required but not found (http://pkgconfig.freedesktop.org/)" "$LINENO" 5
+fi
+
+case `$PKG_CONFIG --version` in
+0.?|0.?.?|0.1[0-7]|0.1[0-7].?) PKGCONFIG_REQUIRES="Requires"; ;;
+*) PKGCONFIG_REQUIRES="Requires.private"; ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                                               CAIRO_MAKEFILE___WIN32='# Generated by configure.  Modify to customize.
+'
+
+                       ac_config_commands="$ac_config_commands $srcdir/build/Makefile.win32.features"
+
+
+
+
+                                               CAIRO_MAKEFILE_cairo_AMAKE='# Generated by configure.  Do not edit.
+'
+
+                       ac_config_commands="$ac_config_commands $srcdir/src/Makefile.am.features"
+
+
+                                               CAIRO_MAKEFILE_cairo_WIN32='# Generated by configure.  Do not edit.
+'
+
+                       ac_config_commands="$ac_config_commands $srcdir/src/Makefile.win32.features"
+
+
+
+                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE='# Generated by configure.  Do not edit.
+'
+
+                       ac_config_commands="$ac_config_commands $srcdir/boilerplate/Makefile.am.features"
+
+
+                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32='# Generated by configure.  Do not edit.
+'
+
+                       ac_config_commands="$ac_config_commands $srcdir/boilerplate/Makefile.win32.features"
+
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'include $(top_srcdir)/src/Makefile.sources
+'
+
+                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(top_srcdir),)
+include Makefile.sources
+else
+include $(top_srcdir)/src/Makefile.sources
+endif
+'
+
+                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'include $(top_srcdir)/boilerplate/Makefile.sources
+'
+
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(top_srcdir),)
+include Makefile.sources
+else
+include $(top_srcdir)/boilerplate/Makefile.sources
+endif
+'
+
+
+
+                                               cr_make_tmp='supported_cairo_headers = $(cairo_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+                                                       cr_make_tmp='supported_cairo_boilerplate_headers = $(cairo_boilerplate_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                               cr_make_tmp='unsupported_cairo_headers ='
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+                                                       cr_make_tmp='unsupported_cairo_boilerplate_headers ='
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                               cr_make_tmp='all_cairo_headers = $(cairo_headers)
+all_cairo_private = $(cairo_private)
+all_cairo_cxx_sources = $(cairo_cxx_sources)
+all_cairo_sources = $(cairo_sources)
+'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+                                                       cr_make_tmp='all_cairo_boilerplate_headers = $(cairo_boilerplate_headers)
+all_cairo_boilerplate_private = $(cairo_boilerplate_private)
+all_cairo_boilerplate_cxx_sources = $(cairo_boilerplate_cxx_sources)
+all_cairo_boilerplate_sources = $(cairo_boilerplate_sources)
+'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                               cr_make_tmp='enabled_cairo_headers = $(cairo_headers)
+enabled_cairo_private = $(cairo_private)
+enabled_cairo_cxx_sources = $(cairo_cxx_sources)
+enabled_cairo_sources = $(cairo_sources)
+'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+                                                       cr_make_tmp='enabled_cairo_boilerplate_headers = $(cairo_boilerplate_headers)
+enabled_cairo_boilerplate_private = $(cairo_boilerplate_private)
+enabled_cairo_boilerplate_cxx_sources = $(cairo_boilerplate_cxx_sources)
+enabled_cairo_boilerplate_sources = $(cairo_boilerplate_sources)
+'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+ac_config_files="$ac_config_files src/cairo.pc"
+ac_config_files="$ac_config_files cairo-uninstalled.pc:src/cairo-uninstalled.pc.in"
+
+                                                                                                                                       CAIRO_REQUIRES=""
+                                                                                                                               CAIRO_CFLAGS=""
+CAIRO_NONPKGCONFIG_CFLAGS=""
+                                                                                                                               CAIRO_LIBS="$LIBS"
+CAIRO_NONPKGCONFIG_LIBS="$LIBS"
+
+
+
+
+
+
+                                                       cr_make_tmp='all_cairo_pkgconf = cairo.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                       cr_make_tmp='enabled_cairo_pkgconf = cairo.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+
+
+                               CAIRO_FEATURES=''
+                                               CAIRO_SUPPORTED_FEATURES=''
+                                               CAIRO_NO_FEATURES=''
+
+       ac_config_commands="$ac_config_commands src/cairo-features.h"
+
+       ac_config_commands="$ac_config_commands src/cairo-supported-features.h"
+
+
+
+
+
+                                               CAIRO_MAKEFILE_win32_features_h_WIN32='# Generated by configure.  Do not edit.
+'
+
+                       ac_config_commands="$ac_config_commands $srcdir/build/Makefile.win32.features-h"
+
+
+                                                       cr_make_tmp='$(top_srcdir)/src/cairo-features.h: $(top_srcdir)/build/Makefile.win32.features
+       @echo "Generating src/cairo-features.h"
+       @echo "/* Generated by Makefile.win32.features-h.  Do not edit. */" > $(top_srcdir)/src/cairo-features.h
+       @echo "#ifndef CAIRO_FEATURES_H" >> $(top_srcdir)/src/cairo-features.h
+       @echo "#define CAIRO_FEATURES_H 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+                               CAIRO_WARNING_MESSAGE=''
+
+
+
+
+                               CAIRO_NATIVE_SURFACE_BACKENDS=''
+                                       CAIRO_NATIVE_FONT_BACKENDS=''
+
+
+
+
+
+
+# -Wcast-align generates lots of false positive reports we need to
+# cast image data from uint8_t to uin32_t.
+
+# -Wlogical-op causes too much noise from strcmp("literal", str)
+
+MAYBE_WARN="-Wall -Wextra \
+-Wold-style-definition -Wdeclaration-after-statement \
+-Wmissing-declarations -Werror-implicit-function-declaration \
+-Wnested-externs -Wpointer-arith -Wwrite-strings \
+-Wsign-compare -Wstrict-prototypes -Wmissing-prototypes \
+-Wpacked -Wswitch-enum -Wmissing-format-attribute \
+-Wbad-function-cast -Wvolatile-register-var \
+-Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations \
+-Wno-missing-field-initializers -Wno-unused-parameter \
+-Wno-attributes -Wno-long-long -Winline"
+
+# -Wunused-but-set-variable is too noisy at present
+NO_WARN="-Wno-unused-but-set-variable"
+
+MAYBE_WARN="$MAYBE_WARN -erroff=E_ENUM_TYPE_MISMATCH_ARG \
+                       -erroff=E_ENUM_TYPE_MISMATCH_OP"
+
+
+
+safe_MAYBE_WARN="$MAYBE_WARN"
+MAYBE_WARN="$MAYBE_WARN -flto"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+       int main(int argc, char **argv) { return 0; }
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+
+       MAYBE_WARN="$safe_MAYBE_WARN"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+MAYBE_WARN="$MAYBE_WARN -fno-strict-aliasing -fno-common"
+
+MAYBE_WARN="$MAYBE_WARN -Wp,-D_FORTIFY_SOURCE=2"
+
+MAYBE_WARN="$MAYBE_WARN $NO_WARN"
+
+# invalidate cached value if MAYBE_WARN has changed
+if test "x$cairo_cv_warn_maybe" != "x$MAYBE_WARN"; then
+       unset cairo_cv_warn_cflags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported warning flags" >&5
+$as_echo_n "checking for supported warning flags... " >&6; }
+if test "${cairo_cv_warn_cflags+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+       echo
+       WARN_CFLAGS=""
+
+       # Some warning options are not supported by all versions of
+       # gcc, so test all desired options against the current
+       # compiler.
+       #
+       # Note that there are some order dependencies
+       # here. Specifically, an option that disables a warning will
+       # have no net effect if a later option then enables that
+       # warnings, (perhaps implicitly). So we put some grouped
+       # options (-Wall and -Wextra) up front and the -Wno options
+       # last.
+
+       for W in $MAYBE_WARN; do
+                               _test_WERROR=${WERROR+set}
+       if test "z$_test_WERROR" != zset; then
+               WERROR=""
+               for _werror in -Werror -errwarn; do
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $_werror" >&5
+$as_echo_n "checking whether $CC supports $_werror... " >&6; }
+                                       # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program=""'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $_werror"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               WERROR="$WERROR $_werror"
+       else
+               :
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cc_flag" >&5
+$as_echo "$cairo_cc_flag" >&6; }
+               done
+       fi
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $W" >&5
+$as_echo_n "checking whether $CC supports $W... " >&6; }
+                       # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program=""'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $WERROR $W"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               WARN_CFLAGS="$WARN_CFLAGS $W"
+       else
+               :
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cc_flag" >&5
+$as_echo "$cairo_cc_flag" >&6; }
+
+       done
+
+       cairo_cv_warn_cflags=$WARN_CFLAGS
+       cairo_cv_warn_maybe=$MAYBE_WARN
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking which warning flags were supported" >&5
+$as_echo_n "checking which warning flags were supported... " >&6; }
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cv_warn_cflags" >&5
+$as_echo "$cairo_cv_warn_cflags" >&6; }
+WARN_CFLAGS="$cairo_cv_warn_cflags"
+CAIRO_CFLAGS="$CAIRO_CFLAGS $WARN_CFLAGS"
+
+# We only wish to enable attribute(warn_unused_result) if we can prevent
+# gcc from generating thousands of warnings about the misapplication of the
+# attribute to void functions and variables.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to enable unused result warnings" >&5
+$as_echo_n "checking how to enable unused result warnings... " >&6; }
+if test "${cairo_cv_warn_unused_result+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+       cairo_cv_warn_unused_result=""
+       if echo $WARN_CFLAGS | $GREP -e '-Wno-attributes' >/dev/null; then
+                       # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program="__attribute__((__warn_unused_result__)) void f (void) {}
+                        __attribute__((__warn_unused_result__)) int g;"'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS -Wno-attributes"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               cairo_cv_warn_unused_result="__attribute__((__warn_unused_result__))"
+       else
+               :
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+       fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cv_warn_unused_result" >&5
+$as_echo "$cairo_cv_warn_unused_result" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define WARN_UNUSED_RESULT $cairo_cv_warn_unused_result
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to allow undefined symbols in shared libraries used by test suite" >&5
+$as_echo_n "checking how to allow undefined symbols in shared libraries used by test suite... " >&6; }
+if test "${cairo_cv_test_undefined_ldflags+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+               # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program=""'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS -Wl,--allow-shlib-undefined"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               cairo_cv_test_undefined_ldflags="-Wl,--allow-shlib-undefined"
+       else
+               :
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cv_test_undefined_ldflags" >&5
+$as_echo "$cairo_cv_test_undefined_ldflags" >&6; }
+CAIRO_TEST_UNDEFINED_LDFLAGS="$cairo_cv_test_undefined_ldflags"
+
+
+
+ if test "x$cross_compiling" = "xyes"; then
+  CROSS_COMPILING_TRUE=
+  CROSS_COMPILING_FALSE='#'
+else
+  CROSS_COMPILING_TRUE='#'
+  CROSS_COMPILING_FALSE=
+fi
+
+       case $host_os in
+               darwin*)
+
+               ;;
+               *)
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+              not a universal capable compiler
+            #endif
+            typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+       # Check for potential -arch flags.  It is not universal unless
+       # there are at least two -arch flags with different values.
+       ac_arch=
+       ac_prev=
+       for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+        if test -n "$ac_prev"; then
+          case $ac_word in
+            i?86 | x86_64 | ppc | ppc64)
+              if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+                ac_arch=$ac_word
+              else
+                ac_cv_c_bigendian=universal
+                break
+              fi
+              ;;
+          esac
+          ac_prev=
+        elif test "x$ac_word" = "x-arch"; then
+          ac_prev=arch
+        fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+                    && LITTLE_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+               #include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+               short int ascii_ii[] =
+                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+               int use_ascii (int i) {
+                 return ascii_mm[i] + ascii_ii[i];
+               }
+               short int ebcdic_ii[] =
+                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+               short int ebcdic_mm[] =
+                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+               int use_ebcdic (int i) {
+                 return ebcdic_mm[i] + ebcdic_ii[i];
+               }
+               extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+             ac_cv_c_bigendian=yes
+           fi
+           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+             if test "$ac_cv_c_bigendian" = unknown; then
+               ac_cv_c_bigendian=no
+             else
+               # finding both strings is unlikely to happen, but who knows?
+               ac_cv_c_bigendian=unknown
+             fi
+           fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+            /* Are we little or big endian?  From Harbison&Steele.  */
+            union
+            {
+              long int l;
+              char c[sizeof (long int)];
+            } u;
+            u.l = 1;
+            return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5  ;;
+ esac
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether float word ordering is bigendian" >&5
+$as_echo_n "checking whether float word ordering is bigendian... " >&6; }
+if test "${ax_cv_c_float_words_bigendian+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+# The endianess is detected by first compiling C code that contains a special
+# double float value, then grepping the resulting object file for certain
+# strings of ascii values. The double is specially crafted to have a
+# binary representation that corresponds with a simple string. In this
+# implementation, the string "noonsees" was selected because the individual
+# word values ("noon" and "sees") are palindromes, thus making this test
+# byte-order agnostic. If grep finds the string "noonsees" in the object
+# file, the target platform stores float words in big-endian order. If grep
+# finds "seesnoon", float words are in little-endian order. If neither value
+# is found, the user is instructed to specify the ordering.
+
+ax_cv_c_float_words_bigendian=unknown
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+double d = 90904234967036810337470478905505011476211692735615632014797120844053488865816695273723469097858056257517020191247487429516932130503560650002327564517570778480236724525140520121371739201496540132640109977779420565776568942592.0;
+
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+
+if strings - conftest.$ac_objext | grep noonsees >/dev/null ; then
+  ax_cv_c_float_words_bigendian=yes
+fi
+if strings - conftest.$ac_objext | grep seesnoon >/dev/null ; then
+  if test "$ax_cv_c_float_words_bigendian" = unknown; then
+    ax_cv_c_float_words_bigendian=no
+  else
+    ax_cv_c_float_words_bigendian=unknown
+  fi
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_float_words_bigendian" >&5
+$as_echo "$ax_cv_c_float_words_bigendian" >&6; }
+
+case $ax_cv_c_float_words_bigendian in
+  yes)
+
+$as_echo "#define FLOAT_WORDS_BIGENDIAN 1" >>confdefs.h
+ ;;
+  no)
+     ;;
+  *)
+    as_fn_error $? "
+
+Unknown float word ordering. You need to manually preset
+ax_cv_c_float_words_bigendian=no (or yes) according to your system.
+
+    " "$LINENO" 5  ;;
+esac
+
+
+               ;;
+       esac
+
+# Check whether --enable-atomic was given.
+if test "${enable_atomic+set}" = set; then :
+  enableval=$enable_atomic; use_atomic=$enableval
+else
+  use_atomic=yes
+fi
+
+if test "x$use_atomic" = "xyes"; then :
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native atomic primitives" >&5
+$as_echo_n "checking for native atomic primitives... " >&6; }
+if test "${cairo_cv_atomic_primitives+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cairo_cv_atomic_primitives="none"
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); }
+int atomic_cmpxchg(int i, int j, int k) { return __sync_val_compare_and_swap (&i, j, k); }
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cv_atomic_primitives="Intel"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+               if test "x$cairo_cv_atomic_primitives" = "xnone"; then
+                       ac_fn_c_check_header_mongrel "$LINENO" "atomic_ops.h" "ac_cv_header_atomic_ops_h" "$ac_includes_default"
+if test "x$ac_cv_header_atomic_ops_h" = x""yes; then :
+  cairo_cv_atomic_primitives="libatomic-ops"
+fi
+
+
+               fi
+
+               if test "x$cairo_cv_atomic_primitives" = "xnone"; then
+                       ac_fn_c_check_header_mongrel "$LINENO" "libkern/OSAtomic.h" "ac_cv_header_libkern_OSAtomic_h" "$ac_includes_default"
+if test "x$ac_cv_header_libkern_OSAtomic_h" = x""yes; then :
+  cairo_cv_atomic_primitives="OSAtomic"
+fi
+
+
+               fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cv_atomic_primitives" >&5
+$as_echo "$cairo_cv_atomic_primitives" >&6; }
+       if test "x$cairo_cv_atomic_primitives" = xIntel; then
+
+$as_echo "#define HAVE_INTEL_ATOMIC_PRIMITIVES 1" >>confdefs.h
+
+       fi
+
+       if test "x$cairo_cv_atomic_primitives" = "xlibatomic-ops"; then
+
+$as_echo "#define HAVE_LIB_ATOMIC_OPS 1" >>confdefs.h
+
+       fi
+
+       if test "x$cairo_cv_atomic_primitives" = xOSAtomic; then
+
+$as_echo "#define HAVE_OS_ATOMIC_OPS 1" >>confdefs.h
+
+       fi
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether atomic ops require a memory barrier" >&5
+$as_echo_n "checking whether atomic ops require a memory barrier... " >&6; }
+if test "${cairo_cv_atomic_op_needs_memory_barrier+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               case $host_cpu in
+                   i?86)       cairo_cv_atomic_op_needs_memory_barrier="no"  ;;
+                   x86_64)     cairo_cv_atomic_op_needs_memory_barrier="no"  ;;
+                   arm*)       cairo_cv_atomic_op_needs_memory_barrier="no"  ;;
+                   *)          cairo_cv_atomic_op_needs_memory_barrier="yes" ;;
+               esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cv_atomic_op_needs_memory_barrier" >&5
+$as_echo "$cairo_cv_atomic_op_needs_memory_barrier" >&6; }
+       if test "x$cairo_cv_atomic_op_needs_memory_barrier" = "xyes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define ATOMIC_OP_NEEDS_MEMORY_BARRIER 1
+_ACEOF
+
+       fi
+
+
+fi
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if test "${ac_cv_sizeof_void_p+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_void_p" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if test "${ac_cv_sizeof_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if test "${ac_cv_sizeof_long_long+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
+$as_echo_n "checking size of size_t... " >&6; }
+if test "${ac_cv_sizeof_size_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_size_t" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (size_t)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_size_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+$as_echo "$ac_cv_sizeof_size_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_ACEOF
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5
+$as_echo_n "checking for native Win32... " >&6; }
+case "$host" in
+  *-*-mingw*)
+    cairo_os_win32=yes
+    ;;
+  *)
+    cairo_os_win32=no
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_os_win32" >&5
+$as_echo "$cairo_os_win32" >&6; }
+ if test "$cairo_os_win32" = "yes"; then
+  OS_WIN32_TRUE=
+  OS_WIN32_FALSE='#'
+else
+  OS_WIN32_TRUE='#'
+  OS_WIN32_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Sun Solaris (non-POSIX ctime_r)" >&5
+$as_echo_n "checking for Sun Solaris (non-POSIX ctime_r)... " >&6; }
+case "$host" in
+    *-*-solaris*)
+       CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
+       solaris_posix_pthread=yes
+       ;;
+    *)
+       solaris_posix_pthread=no
+       ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $solaris_posix_pthread" >&5
+$as_echo "$solaris_posix_pthread" >&6; }
+
+
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5
+$as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; }
+if test "${ac_cv_lib_mw__mwvalidcheckl+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmw  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char _mwvalidcheckl ();
+int
+main ()
+{
+return _mwvalidcheckl ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mw__mwvalidcheckl=yes
+else
+  ac_cv_lib_mw__mwvalidcheckl=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5
+$as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; }
+if test "x$ac_cv_lib_mw__mwvalidcheckl" = x""yes; then :
+  LIBM="-lmw"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+$as_echo_n "checking for cos in -lm... " >&6; }
+if test "${ac_cv_lib_m_cos+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cos ();
+int
+main ()
+{
+return cos ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_cos=yes
+else
+  ac_cv_lib_m_cos=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+$as_echo "$ac_cv_lib_m_cos" >&6; }
+if test "x$ac_cv_lib_m_cos" = x""yes; then :
+  LIBM="$LIBM -lm"
+fi
+
+  ;;
+*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+$as_echo_n "checking for cos in -lm... " >&6; }
+if test "${ac_cv_lib_m_cos+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cos ();
+int
+main ()
+{
+return cos ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_cos=yes
+else
+  ac_cv_lib_m_cos=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+$as_echo "$ac_cv_lib_m_cos" >&6; }
+if test "x$ac_cv_lib_m_cos" = x""yes; then :
+  LIBM="-lm"
+fi
+
+  ;;
+esac
+
+
+LIBS="$LIBS $LIBM"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5
+$as_echo_n "checking for sched_yield in -lrt... " >&6; }
+if test "${ac_cv_lib_rt_sched_yield+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sched_yield ();
+int
+main ()
+{
+return sched_yield ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_rt_sched_yield=yes
+else
+  ac_cv_lib_rt_sched_yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5
+$as_echo "$ac_cv_lib_rt_sched_yield" >&6; }
+if test "x$ac_cv_lib_rt_sched_yield" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRT 1
+_ACEOF
+
+  LIBS="-lrt $LIBS"
+
+fi
+
+
+has_shm_open=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shm_open in -lrt" >&5
+$as_echo_n "checking for shm_open in -lrt... " >&6; }
+if test "${ac_cv_lib_rt_shm_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shm_open ();
+int
+main ()
+{
+return shm_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_rt_shm_open=yes
+else
+  ac_cv_lib_rt_shm_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_shm_open" >&5
+$as_echo "$ac_cv_lib_rt_shm_open" >&6; }
+if test "x$ac_cv_lib_rt_shm_open" = x""yes; then :
+
+            SHM_LIBS=-lrt
+            has_shm_open=yes
+
+else
+  SHM_LIBS=
+fi
+
+ if test "x$has_shm_open" = "xyes"; then
+  HAVE_SHM_TRUE=
+  HAVE_SHM_FALSE='#'
+else
+  HAVE_SHM_TRUE='#'
+  HAVE_SHM_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+  SOCKET_LIBS=-lsocket
+else
+  SOCKET_LIBS=
+fi
+
+CAIROBOILERPLATE_LIBS=$SOCKET_LIBS
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_return_address(0)" >&5
+$as_echo_n "checking for __builtin_return_address(0)... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+__builtin_return_address(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  have_builtin_return_address=yes
+else
+  have_builtin_return_address=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_builtin_return_address" >&5
+$as_echo "$have_builtin_return_address" >&6; }
+if test "x$have_builtin_return_address" = "xyes"; then
+
+$as_echo "#define HAVE_BUILTIN_RETURN_ADDRESS 1" >>confdefs.h
+
+fi
+
+for ac_header in stdint.h inttypes.h sys/int_types.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default"
+if test "x$ac_cv_type_uint64_t" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT64_T 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "uint128_t" "ac_cv_type_uint128_t" "$ac_includes_default"
+if test "x$ac_cv_type_uint128_t" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT128_T 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "__uint128_t" "ac_cv_type___uint128_t" "$ac_includes_default"
+if test "x$ac_cv_type___uint128_t" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE___UINT128_T 1
+_ACEOF
+
+
+fi
+
+
+for ac_header in fcntl.h unistd.h signal.h sys/stat.h sys/socket.h sys/poll.h sys/un.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in alarm
+do :
+  ac_fn_c_check_func "$LINENO" "alarm" "ac_cv_func_alarm"
+if test "x$ac_cv_func_alarm" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ALARM 1
+_ACEOF
+
+fi
+done
+
+
+for ac_header in sched.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
+if test "x$ac_cv_header_sched_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHED_H 1
+_ACEOF
+ for ac_func in sched_getaffinity
+do :
+  ac_fn_c_check_func "$LINENO" "sched_getaffinity" "ac_cv_func_sched_getaffinity"
+if test "x$ac_cv_func_sched_getaffinity" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHED_GETAFFINITY 1
+_ACEOF
+
+fi
+done
+
+fi
+
+done
+
+
+for ac_header in sys/mman.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mman_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_MMAN_H 1
+_ACEOF
+ for ac_func in mmap
+do :
+  ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+done
+
+fi
+
+done
+
+
+for ac_header in time.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_time_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_TIME_H 1
+_ACEOF
+ for ac_func in clock_gettime
+do :
+  ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
+if test "x$ac_cv_func_clock_gettime" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOCK_GETTIME 1
+_ACEOF
+
+fi
+done
+
+fi
+
+done
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "fenv.h" "ac_cv_header_fenv_h" "$ac_includes_default"
+if test "x$ac_cv_header_fenv_h" = x""yes; then :
+  for ac_func in feenableexcept fedisableexcept feclearexcept
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+fi
+
+
+
+for ac_header in libgen.h byteswap.h signal.h setjmp.h fenv.h sys/wait.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in ctime_r drand48 flockfile funlockfile getline link strndup
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_header in windows.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
+if test "x$ac_cv_header_windows_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_WINDOWS_H 1
+_ACEOF
+ have_windows=yes
+else
+  have_windows=no
+fi
+
+done
+
+
+
+for ac_header in sys/stat.h io.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_fn_c_check_func "$LINENO" "mkdir" "ac_cv_func_mkdir"
+if test "x$ac_cv_func_mkdir" = x""yes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking mkdir variant" >&5
+$as_echo_n "checking mkdir variant... " >&6; }
+             mkdir_variant="unknown"
+             save_CFLAGS="$CFLAGS"
+             CFLAGS=$WARN_CFLAGS
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
+int
+main ()
+{
+mkdir ("hello.world", 0777)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  mkdir_variant="mkdir(path, mode)"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
+int
+main ()
+{
+mkdir ("hello.world")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  mkdir_variant="mkdir(path)"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+             { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mkdir_variant" >&5
+$as_echo "$mkdir_variant" >&6; }
+             CFLAGS="$save_CFLAGS"
+             if test "x$mkdir_variant" = "xmkdir(path, mode)"; then
+
+$as_echo "#define HAVE_MKDIR 2" >>confdefs.h
+
+             else
+
+$as_echo "#define HAVE_MKDIR 1" >>confdefs.h
+
+             fi
+fi
+
+
+
+for ac_func in fork waitpid raise
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+       cairo_has_lcov=no
+# Check whether --enable-gcov was given.
+if test "${enable_gcov+set}" = set; then :
+  enableval=$enable_gcov; use_gcov=$enableval
+else
+  use_gcov=no
+fi
+
+
+if test "x$use_gcov" = "xyes"; then
+    if test "$GCC" != "yes"; then
+    as_fn_error $? "GCC is required for --enable-gcov" "$LINENO" 5
+  fi
+
+    # Extract the first word of "shtool", so it can be a program name with args.
+set dummy shtool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_SHTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$SHTOOL"; then
+  ac_cv_prog_SHTOOL="$SHTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_SHTOOL="shtool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+SHTOOL=$ac_cv_prog_SHTOOL
+if test -n "$SHTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHTOOL" >&5
+$as_echo "$SHTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  case `$SHTOOL path $CC` in
+    *ccache*) gcc_ccache=yes;;
+    *) gcc_ccache=no;;
+  esac
+
+  if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
+    as_fn_error $? "ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1." "$LINENO" 5
+  fi
+
+  ltp_version_list="1.7 1.6 1.5 1.4"
+  # Extract the first word of "lcov", so it can be a program name with args.
+set dummy lcov; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LTP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LTP"; then
+  ac_cv_prog_LTP="$LTP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LTP="lcov"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LTP=$ac_cv_prog_LTP
+if test -n "$LTP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LTP" >&5
+$as_echo "$LTP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  # Extract the first word of "genhtml", so it can be a program name with args.
+set dummy genhtml; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LTP_GENHTML+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LTP_GENHTML"; then
+  ac_cv_prog_LTP_GENHTML="$LTP_GENHTML" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LTP_GENHTML="genhtml"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LTP_GENHTML=$ac_cv_prog_LTP_GENHTML
+if test -n "$LTP_GENHTML"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LTP_GENHTML" >&5
+$as_echo "$LTP_GENHTML" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+  if test "$LTP"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ltp version" >&5
+$as_echo_n "checking for ltp version... " >&6; }
+if test "${cairo_cv_ltp_version+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cairo_cv_ltp_version=invalid
+      ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'`
+      for ltp_check_version in $ltp_version_list; do
+        if test "$ltp_version" = "$ltp_check_version"; then
+          cairo_cv_ltp_version="$ltp_check_version (ok)"
+        fi
+      done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cv_ltp_version" >&5
+$as_echo "$cairo_cv_ltp_version" >&6; }
+  fi
+
+  case $cairo_cv_ltp_version in
+    ""|invalid)
+      ;;
+    *)
+      cairo_has_lcov=yes
+      ;;
+  esac
+
+  if test "x$cairo_has_lcov" != "xyes"; then
+    as_fn_error $? "To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list.
+Please install the Linux Test Project [http://ltp.sourceforge.net/], and try again." "$LINENO" 5
+   fi
+
+  if test -z "$LTP_GENHTML"; then
+    as_fn_error $? "Could not find genhtml from the LTP package.
+Please install the Linux Test Project [http://ltp.sourceforge.net/], and try again." "$LINENO" 5
+  fi
+
+
+$as_echo "#define HAVE_GCOV 1" >>confdefs.h
+
+
+
+  CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
+  CAIRO_CFLAGS=`echo "$CAIRO_CFLAGS" | $SED -e 's/-O[0-9]*//g'`
+
+
+                       _test_WERROR=${WERROR+set}
+       if test "z$_test_WERROR" != zset; then
+               WERROR=""
+               for _werror in -Werror -errwarn; do
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $_werror" >&5
+$as_echo_n "checking whether $CC supports $_werror... " >&6; }
+                                       # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program=""'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $_werror"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               WERROR="$WERROR $_werror"
+       else
+               :
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cc_flag" >&5
+$as_echo "$cairo_cc_flag" >&6; }
+               done
+       fi
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports --coverage" >&5
+$as_echo_n "checking whether $CC supports --coverage... " >&6; }
+                       # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program=""'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $WERROR --coverage"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+
+                   CAIRO_CFLAGS="$CAIRO_CFLAGS -O0 --coverage"
+                   CAIRO_LDFLAGS="$CAIRO_LDFLAGS -O0 --coverage"
+
+       else
+               :
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cairo_cc_flag" >&5
+$as_echo "$cairo_cc_flag" >&6; }
+
+fi
+ if test "x$cairo_has_lcov" = "xyes"; then
+  CAIRO_HAS_LCOV_TRUE=
+  CAIRO_HAS_LCOV_FALSE='#'
+else
+  CAIRO_HAS_LCOV_TRUE='#'
+  CAIRO_HAS_LCOV_FALSE=
+fi
+
+
+# Check whether --enable-valgrind was given.
+if test "${enable_valgrind+set}" = set; then :
+  enableval=$enable_valgrind; use_valgrind=$enableval
+else
+  use_valgrind=yes
+fi
+
+
+if test "x$use_valgrind" = "xyes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VALGRIND" >&5
+$as_echo_n "checking for VALGRIND... " >&6; }
+
+if test -n "$VALGRIND_CFLAGS"; then
+    pkg_cv_VALGRIND_CFLAGS="$VALGRIND_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "valgrind") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VALGRIND_CFLAGS=`$PKG_CONFIG --cflags "valgrind" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$VALGRIND_LIBS"; then
+    pkg_cv_VALGRIND_LIBS="$VALGRIND_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "valgrind") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VALGRIND_LIBS=`$PKG_CONFIG --libs "valgrind" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               VALGRIND_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "valgrind" 2>&1`
+        else
+               VALGRIND_PKG_ERRORS=`$PKG_CONFIG --print-errors "valgrind" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$VALGRIND_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+       VALGRIND_CFLAGS=$pkg_cv_VALGRIND_CFLAGS
+       VALGRIND_LIBS=$pkg_cv_VALGRIND_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+           _save_CFLAGS="$CFLAGS"
+           _save_CPPFLAGS="$CPPFLAGS"
+           CFLAGS="$CFLAGS $VALGRIND_CFLAGS"
+           CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
+           ac_fn_c_check_header_mongrel "$LINENO" "valgrind.h" "ac_cv_header_valgrind_h" "$ac_includes_default"
+if test "x$ac_cv_header_valgrind_h" = x""yes; then :
+
+$as_echo "#define HAVE_VALGRIND 1" >>confdefs.h
+
+fi
+
+
+           ac_fn_c_check_header_mongrel "$LINENO" "lockdep.h" "ac_cv_header_lockdep_h" "$ac_includes_default"
+if test "x$ac_cv_header_lockdep_h" = x""yes; then :
+
+$as_echo "#define HAVE_LOCKDEP 1" >>confdefs.h
+
+fi
+
+
+           ac_fn_c_check_header_mongrel "$LINENO" "memfault.h" "ac_cv_header_memfault_h" "$ac_includes_default"
+if test "x$ac_cv_header_memfault_h" = x""yes; then :
+
+$as_echo "#define HAVE_MEMFAULT 1" >>confdefs.h
+
+fi
+
+
+           CAIRO_CFLAGS="$VALGRIND_CFLAGS $CAIRO_CFLAGS"
+           CFLAGS="$_save_CFLAGS"
+           CPPFLAGS="$_save_CPPFLAGS"
+
+fi
+fi
+
+echo '#undef PACKAGE_VERSION' >>confdefs.h
+echo '#undef PACKAGE_STRING' >>confdefs.h
+echo '#undef PACKAGE_NAME' >>confdefs.h
+echo '#undef PACKAGE_TARNAME' >>confdefs.h
+$as_echo "#define PACKAGE_VERSION USE_cairo_version_OR_cairo_version_string_INSTEAD" >>confdefs.h
+
+$as_echo "#define PACKAGE_STRING USE_cairo_version_OR_cairo_version_string_INSTEAD" >>confdefs.h
+
+$as_echo "#define PACKAGE_NAME USE_cairo_INSTEAD" >>confdefs.h
+
+$as_echo "#define PACKAGE_TARNAME USE_cairo_INSTEAD" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+  cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5
+$as_echo_n "checking for compress in -lz... " >&6; }
+if test "${ac_cv_lib_z_compress+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char compress ();
+int
+main ()
+{
+return compress ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_z_compress=yes
+else
+  ac_cv_lib_z_compress=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5
+$as_echo "$ac_cv_lib_z_compress" >&6; }
+if test "x$ac_cv_lib_z_compress" = x""yes; then :
+  ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = x""yes; then :
+
+         have_libz=yes
+
+$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
+
+
+else
+  have_libz="no (requires zlib http://www.gzip.org/zlib/)"
+fi
+
+
+else
+  have_libz="no (requires zlib http://www.gzip.org/zlib/)"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlsym in -ldl" >&5
+$as_echo_n "checking for dlsym in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlsym+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlsym ();
+int
+main ()
+{
+return dlsym ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlsym=yes
+else
+  ac_cv_lib_dl_dlsym=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlsym" >&5
+$as_echo "$ac_cv_lib_dl_dlsym" >&6; }
+if test "x$ac_cv_lib_dl_dlsym" = x""yes; then :
+  have_dlsym=yes; have_dl=yes
+else
+  have_dlsym=no; have_dl=no
+fi
+
+if test "x$have_dlsym" = "xno"; then
+   ac_fn_c_check_func "$LINENO" "dlsym" "ac_cv_func_dlsym"
+if test "x$ac_cv_func_dlsym" = x""yes; then :
+  have_dlsym=yes
+else
+  have_dlsym=no
+fi
+
+fi
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+ have_dlsym=yes
+else
+  have_dlsym=no
+fi
+
+done
+
+ if test "x$have_dl" = "xyes"; then
+  CAIRO_HAS_DL_TRUE=
+  CAIRO_HAS_DL_FALSE='#'
+else
+  CAIRO_HAS_DL_TRUE='#'
+  CAIRO_HAS_DL_FALSE=
+fi
+
+if test "x$have_dlsym" = "xyes"; then
+
+$as_echo "#define CAIRO_HAS_DLSYM 1" >>confdefs.h
+
+fi
+ if test "x$have_dlsym" = "xyes"; then
+  CAIRO_HAS_DLSYM_TRUE=
+  CAIRO_HAS_DLSYM_FALSE='#'
+else
+  CAIRO_HAS_DLSYM_TRUE='#'
+  CAIRO_HAS_DLSYM_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then :
+  withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  case $x_includes,$x_libraries in #(
+    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #(
+    *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  cat >Imakefile <<'_ACEOF'
+incroot:
+       @echo incroot='${INCROOT}'
+usrlibdir:
+       @echo usrlibdir='${USRLIBDIR}'
+libdir:
+       @echo libdir='${LIBDIR}'
+_ACEOF
+  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+    for ac_var in incroot usrlibdir libdir; do
+      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+    done
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl dylib la dll; do
+      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+        test -f "$ac_im_libdir/libX11.$ac_extension"; then
+       ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+       /usr/include) ac_x_includes= ;;
+       *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+       /usr/lib | /usr/lib64 | /lib | /lib64) ;;
+       *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+  # Guess where to find include files, by looking for Xlib.h.
+  # First, try using that file with no special directory specified.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  for ac_dir in $ac_x_header_dirs; do
+  if test -r "$ac_dir/X11/Xlib.h"; then
+    ac_x_includes=$ac_dir
+    break
+  fi
+done
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+  # Check for the libraries.
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS=$LIBS
+  LIBS="-lX11 $LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+int
+main ()
+{
+XrmInitialize ()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  LIBS=$ac_save_LIBS
+for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+  # Don't even attempt the hair of trying to link an X program!
+  for ac_extension in a so sl dylib la dll; do
+    if test -r "$ac_dir/libX11.$ac_extension"; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+  no,* | *,no | *\'*)
+    # Didn't find X, or a directory has "'" in its name.
+    ac_cv_have_x="have_x=no";; #(
+  *)
+    # Record where we found X for the cache.
+    ac_cv_have_x="have_x=yes\
+       ac_x_includes='$ac_x_includes'\
+       ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+    *) have_x=yes;;
+  esac
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
+$as_echo "$have_x" >&6; }
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes\
+       ac_x_includes='$x_includes'\
+       ac_x_libraries='$x_libraries'"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
+$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+                                                                                                                               # Check whether --enable-xlib was given.
+if test "${enable_xlib+set}" = set; then :
+  enableval=$enable_xlib; enable_xlib=$enableval
+else
+  enable_xlib=auto
+fi
+
+                       case $enable_xlib in #(
+  no) :
+               use_xlib="no (disabled, use --enable-xlib to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Xlib surface backend feature" >&5
+$as_echo_n "checking for cairo's Xlib surface backend feature... " >&6; }
+               echo
+
+               use_xlib=yes
+                       xlib_BASE="cairo"
+xlib_REQUIRES="$ac_env_xlib_REQUIRES_value"
+xlib_CFLAGS="$ac_env_xlib_CFLAGS_value"
+xlib_NONPKGCONFIG_CFLAGS="$ac_env_xlib_NONPKGCONFIG_CFLAGS_value"
+xlib_LIBS="$ac_env_xlib_LIBS_value"
+xlib_NONPKGCONFIG_LIBS="$ac_env_xlib_NONPKGCONFIG_LIBS_value"
+xlib_NONPKGCONFIG_EXTRA_LIBS="$ac_env_xlib_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  xlib_REQUIRES="x11"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xlib" >&5
+$as_echo_n "checking for xlib... " >&6; }
+
+if test -n "$xlib_CFLAGS"; then
+    pkg_cv_xlib_CFLAGS="$xlib_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xlib_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xlib_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xlib_CFLAGS=`$PKG_CONFIG --cflags "$xlib_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$xlib_LIBS"; then
+    pkg_cv_xlib_LIBS="$xlib_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xlib_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xlib_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xlib_LIBS=`$PKG_CONFIG --libs "$xlib_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               xlib_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$xlib_REQUIRES" 2>&1`
+        else
+               xlib_PKG_ERRORS=`$PKG_CONFIG --print-errors "$xlib_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$xlib_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                    xlib_REQUIRES=""
+                    if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+$as_echo_n "checking whether -R must be followed by a space... " >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+         X_LIBS="$X_LIBS -R $x_libraries"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+$as_echo "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    ac_c_werror_flag=$ac_xsave_c_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_connect = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_remove = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+$as_echo_n "checking for remove in -lposix... " >&6; }
+if test "${ac_cv_lib_posix_remove+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_posix_remove=yes
+else
+  ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+$as_echo "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_shmat = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+$as_echo_n "checking for shmat in -lipc... " >&6; }
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ipc_shmat=yes
+else
+  ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+                    if test "x$no_x" = xyes; then
+                      use_xlib="no (requires X development libraries)"
+                    else
+                      xlib_NONPKGCONFIG_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+                      xlib_NONPKGCONFIG_CFLAGS=$X_CFLAGS
+                    fi
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                    xlib_REQUIRES=""
+                    if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+$as_echo_n "checking whether -R must be followed by a space... " >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+         X_LIBS="$X_LIBS -R $x_libraries"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+$as_echo "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    ac_c_werror_flag=$ac_xsave_c_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_connect = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_remove = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+$as_echo_n "checking for remove in -lposix... " >&6; }
+if test "${ac_cv_lib_posix_remove+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_posix_remove=yes
+else
+  ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+$as_echo "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_shmat = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+$as_echo_n "checking for shmat in -lipc... " >&6; }
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ipc_shmat=yes
+else
+  ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+                    if test "x$no_x" = xyes; then
+                      use_xlib="no (requires X development libraries)"
+                    else
+                      xlib_NONPKGCONFIG_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+                      xlib_NONPKGCONFIG_CFLAGS=$X_CFLAGS
+                    fi
+else
+       xlib_CFLAGS=$pkg_cv_xlib_CFLAGS
+       xlib_LIBS=$pkg_cv_xlib_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Xlib surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Xlib surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_xlib" >&5
+$as_echo "$use_xlib" >&6; }
+
+               if test "x$enable_xlib" = "xyes" -a "x$use_xlib" != xyes; then :
+                       as_fn_error $? " Xlib surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-xlib: \`$use_xlib', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_xlib" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$xlib_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$xlib_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$xlib_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$xlib_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$xlib_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset xlib_BASE
+unset xlib_REQUIRES
+unset xlib_CFLAGS
+unset xlib_NONPKGCONFIG_CFLAGS
+unset xlib_LIBS
+unset xlib_NONPKGCONFIG_LIBS
+unset xlib_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_xlib" = xyes; then
+  CAIRO_HAS_XLIB_SURFACE_TRUE=
+  CAIRO_HAS_XLIB_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_XLIB_SURFACE_TRUE='#'
+  CAIRO_HAS_XLIB_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_XLIB_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_xlib_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_xlib_headers)
+all_cairo_private += $(cairo_xlib_private)
+all_cairo_cxx_sources += $(cairo_xlib_cxx_sources)
+all_cairo_sources += $(cairo_xlib_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xlib_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_xlib_headers)
+enabled_cairo_private += $(cairo_xlib_private)
+enabled_cairo_cxx_sources += $(cairo_xlib_cxx_sources)
+enabled_cairo_sources += $(cairo_xlib_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XLIB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xlib_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_XLIB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xlib" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-xlib.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_xlib" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-xlib-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-xlib.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-xlib.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XLIB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xlib" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_XLIB_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_XLIB_SURFACE'
+
+
+
+                                       if test "x$use_xlib" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_XLIB_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_XLIB_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xlib" = xyes; then :
+  :
+                                       CAIRO_NATIVE_SURFACE_BACKENDS="${CAIRO_NATIVE_SURFACE_BACKENDS}"'xlib'
+
+
+
+fi
+
+
+
+                                                                                                                               # Check whether --enable-xlib-xrender was given.
+if test "${enable_xlib_xrender+set}" = set; then :
+  enableval=$enable_xlib_xrender; enable_xlib_xrender=$enableval
+else
+  enable_xlib_xrender=auto
+fi
+
+                       case $enable_xlib_xrender in #(
+  no) :
+               use_xlib_xrender="no (disabled, use --enable-xlib-xrender to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Xlib Xrender surface backend feature" >&5
+$as_echo_n "checking for cairo's Xlib Xrender surface backend feature... " >&6; }
+               echo
+
+               use_xlib_xrender=yes
+                       xlib_xrender_BASE="cairo"
+xlib_xrender_REQUIRES="$ac_env_xlib_xrender_REQUIRES_value"
+xlib_xrender_CFLAGS="$ac_env_xlib_xrender_CFLAGS_value"
+xlib_xrender_NONPKGCONFIG_CFLAGS="$ac_env_xlib_xrender_NONPKGCONFIG_CFLAGS_value"
+xlib_xrender_LIBS="$ac_env_xlib_xrender_LIBS_value"
+xlib_xrender_NONPKGCONFIG_LIBS="$ac_env_xlib_xrender_NONPKGCONFIG_LIBS_value"
+xlib_xrender_NONPKGCONFIG_EXTRA_LIBS="$ac_env_xlib_xrender_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$use_xlib" != "xyes"; then
+    use_xlib_xrender="no (requires --enable-xlib)"
+  else
+        xlib_xrender_BASE=cairo-xlib
+    xlib_xrender_REQUIRES="xrender >= 0.6"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xlib_xrender" >&5
+$as_echo_n "checking for xlib_xrender... " >&6; }
+
+if test -n "$xlib_xrender_CFLAGS"; then
+    pkg_cv_xlib_xrender_CFLAGS="$xlib_xrender_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xlib_xrender_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xlib_xrender_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xlib_xrender_CFLAGS=`$PKG_CONFIG --cflags "$xlib_xrender_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$xlib_xrender_LIBS"; then
+    pkg_cv_xlib_xrender_LIBS="$xlib_xrender_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xlib_xrender_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xlib_xrender_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xlib_xrender_LIBS=`$PKG_CONFIG --libs "$xlib_xrender_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               xlib_xrender_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$xlib_xrender_REQUIRES" 2>&1`
+        else
+               xlib_xrender_PKG_ERRORS=`$PKG_CONFIG --print-errors "$xlib_xrender_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$xlib_xrender_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                      xlib_xrender_REQUIRES=""
+                      old_CPPFLAGS=$CPPFLAGS
+                      CPPFLAGS="$CPPFLAGS $xlib_CFLAGS $xlib_NONPKGCONFIG_CFLAGS"
+                      ac_fn_c_check_header_mongrel "$LINENO" "X11/extensions/Xrender.h" "ac_cv_header_X11_extensions_Xrender_h" "$ac_includes_default"
+if test "x$ac_cv_header_X11_extensions_Xrender_h" = x""yes; then :
+  xlib_xrender_NONPKGCONFIG_LIBS="-lXrender"
+else
+  use_xlib_xrender="no (requires $xlib_xrender_REQUIRES http://freedesktop.org/Software/xlibs)"
+fi
+
+
+                      CPPFLAGS=$old_CPPFLAGS
+
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                      xlib_xrender_REQUIRES=""
+                      old_CPPFLAGS=$CPPFLAGS
+                      CPPFLAGS="$CPPFLAGS $xlib_CFLAGS $xlib_NONPKGCONFIG_CFLAGS"
+                      ac_fn_c_check_header_mongrel "$LINENO" "X11/extensions/Xrender.h" "ac_cv_header_X11_extensions_Xrender_h" "$ac_includes_default"
+if test "x$ac_cv_header_X11_extensions_Xrender_h" = x""yes; then :
+  xlib_xrender_NONPKGCONFIG_LIBS="-lXrender"
+else
+  use_xlib_xrender="no (requires $xlib_xrender_REQUIRES http://freedesktop.org/Software/xlibs)"
+fi
+
+
+                      CPPFLAGS=$old_CPPFLAGS
+
+else
+       xlib_xrender_CFLAGS=$pkg_cv_xlib_xrender_CFLAGS
+       xlib_xrender_LIBS=$pkg_cv_xlib_xrender_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+    old_CFLAGS=$CFLAGS
+    old_LIBS=$LIBS
+    CFLAGS="$CFLAGS $xlib_CFLAGS $xlib_NONPKGCONFIG_CFLAGS $xlib_xrender_CFLAGS $xlib_xrender_NONPKGCONFIG_CFLAGS"
+    LIBS="$LIBS $xlib_LIBS $xlib_NONPKGCONFIG_LIBS $xlib_xrender_LIBS $xlib_xrender_NONPKGCONFIG_LIBS"
+    for ac_func in XRenderCreateLinearGradient XRenderCreateRadialGradient XRenderCreateConicalGradient
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+    CFLAGS=$old_CFLAGS
+    LIBS=$old_LIBS
+
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Xlib Xrender surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Xlib Xrender surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_xlib_xrender" >&5
+$as_echo "$use_xlib_xrender" >&6; }
+
+               if test "x$enable_xlib_xrender" = "xyes" -a "x$use_xlib_xrender" != xyes; then :
+                       as_fn_error $? " Xlib Xrender surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-xlib-xrender: \`$use_xlib_xrender', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_xlib_xrender" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$xlib_xrender_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$xlib_xrender_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$xlib_xrender_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$xlib_xrender_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$xlib_xrender_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset xlib_xrender_BASE
+unset xlib_xrender_REQUIRES
+unset xlib_xrender_CFLAGS
+unset xlib_xrender_NONPKGCONFIG_CFLAGS
+unset xlib_xrender_LIBS
+unset xlib_xrender_NONPKGCONFIG_LIBS
+unset xlib_xrender_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_xlib_xrender" = xyes; then
+  CAIRO_HAS_XLIB_XRENDER_SURFACE_TRUE=
+  CAIRO_HAS_XLIB_XRENDER_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_XLIB_XRENDER_SURFACE_TRUE='#'
+  CAIRO_HAS_XLIB_XRENDER_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_XLIB_XRENDER_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_xlib_xrender_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xrender_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_xlib_xrender_headers)
+all_cairo_private += $(cairo_xlib_xrender_private)
+all_cairo_cxx_sources += $(cairo_xlib_xrender_cxx_sources)
+all_cairo_sources += $(cairo_xlib_xrender_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xrender_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xrender_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xrender_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xrender_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_xlib_xrender_headers)
+enabled_cairo_private += $(cairo_xlib_xrender_private)
+enabled_cairo_cxx_sources += $(cairo_xlib_xrender_cxx_sources)
+enabled_cairo_sources += $(cairo_xlib_xrender_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XLIB_XRENDER_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XRENDER_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xrender_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xrender_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xrender_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xrender_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_XLIB_XRENDER_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XRENDER_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xlib_xrender" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-xlib-xrender.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_xlib_xrender" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-xlib-xrender-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-xlib-xrender.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-xlib-xrender.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XLIB_XRENDER_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XRENDER_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xlib_xrender" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_XLIB_XRENDER_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_XLIB_XRENDER_SURFACE'
+
+
+
+                                       if test "x$use_xlib_xrender" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_XLIB_XRENDER_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_XLIB_XRENDER_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XRENDER_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xlib_xrender" = xyes; then :
+  :
+                                       CAIRO_NATIVE_SURFACE_BACKENDS="${CAIRO_NATIVE_SURFACE_BACKENDS}"'xlib_xrender'
+
+
+
+fi
+
+
+
+
+                                                                                                                               # Check whether --enable-xcb was given.
+if test "${enable_xcb+set}" = set; then :
+  enableval=$enable_xcb; enable_xcb=$enableval
+else
+  enable_xcb=auto
+fi
+
+                       case $enable_xcb in #(
+  no) :
+               use_xcb="no (disabled, use --enable-xcb to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's XCB surface backend feature" >&5
+$as_echo_n "checking for cairo's XCB surface backend feature... " >&6; }
+               echo
+
+               use_xcb=yes
+                       xcb_BASE="cairo"
+xcb_REQUIRES="$ac_env_xcb_REQUIRES_value"
+xcb_CFLAGS="$ac_env_xcb_CFLAGS_value"
+xcb_NONPKGCONFIG_CFLAGS="$ac_env_xcb_NONPKGCONFIG_CFLAGS_value"
+xcb_LIBS="$ac_env_xcb_LIBS_value"
+xcb_NONPKGCONFIG_LIBS="$ac_env_xcb_NONPKGCONFIG_LIBS_value"
+xcb_NONPKGCONFIG_EXTRA_LIBS="$ac_env_xcb_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  xcb_REQUIRES="xcb >= 1.6 xcb-render >= 1.6"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xcb" >&5
+$as_echo_n "checking for xcb... " >&6; }
+
+if test -n "$xcb_CFLAGS"; then
+    pkg_cv_xcb_CFLAGS="$xcb_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xcb_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xcb_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xcb_CFLAGS=`$PKG_CONFIG --cflags "$xcb_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$xcb_LIBS"; then
+    pkg_cv_xcb_LIBS="$xcb_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xcb_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xcb_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xcb_LIBS=`$PKG_CONFIG --libs "$xcb_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               xcb_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$xcb_REQUIRES" 2>&1`
+        else
+               xcb_PKG_ERRORS=`$PKG_CONFIG --print-errors "$xcb_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$xcb_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                   use_xcb="no (requires $xcb_REQUIRES http://xcb.freedesktop.org)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                   use_xcb="no (requires $xcb_REQUIRES http://xcb.freedesktop.org)"
+else
+       xcb_CFLAGS=$pkg_cv_xcb_CFLAGS
+       xcb_LIBS=$pkg_cv_xcb_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's XCB surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's XCB surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_xcb" >&5
+$as_echo "$use_xcb" >&6; }
+
+               if test "x$enable_xcb" = "xyes" -a "x$use_xcb" != xyes; then :
+                       as_fn_error $? " XCB surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-xcb: \`$use_xcb', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_xcb" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$xcb_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$xcb_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$xcb_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$xcb_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$xcb_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset xcb_BASE
+unset xcb_REQUIRES
+unset xcb_CFLAGS
+unset xcb_NONPKGCONFIG_CFLAGS
+unset xcb_LIBS
+unset xcb_NONPKGCONFIG_LIBS
+unset xcb_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_xcb" = xyes; then
+  CAIRO_HAS_XCB_SURFACE_TRUE=
+  CAIRO_HAS_XCB_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_XCB_SURFACE_TRUE='#'
+  CAIRO_HAS_XCB_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_XCB_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_xcb_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_xcb_headers)
+all_cairo_private += $(cairo_xcb_private)
+all_cairo_cxx_sources += $(cairo_xcb_cxx_sources)
+all_cairo_sources += $(cairo_xcb_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xcb_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_xcb_headers)
+enabled_cairo_private += $(cairo_xcb_private)
+enabled_cairo_cxx_sources += $(cairo_xcb_cxx_sources)
+enabled_cairo_sources += $(cairo_xcb_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XCB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xcb_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_XCB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xcb" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-xcb.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_xcb" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-xcb-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-xcb.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-xcb.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XCB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xcb" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_XCB_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_XCB_SURFACE'
+
+
+
+                                       if test "x$use_xcb" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_XCB_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_XCB_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xcb" = xyes; then :
+  :
+                                       CAIRO_NATIVE_SURFACE_BACKENDS="${CAIRO_NATIVE_SURFACE_BACKENDS}"'xcb'
+
+
+
+fi
+
+
+
+                                                                                                                               # Check whether --enable-xlib-xcb was given.
+if test "${enable_xlib_xcb+set}" = set; then :
+  enableval=$enable_xlib_xcb; enable_xlib_xcb=$enableval
+else
+  enable_xlib_xcb=no
+fi
+
+                       case $enable_xlib_xcb in #(
+  no) :
+               use_xlib_xcb="no (disabled, use --enable-xlib-xcb to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Xlib/XCB functions feature" >&5
+$as_echo_n "checking for cairo's Xlib/XCB functions feature... " >&6; }
+               echo
+
+               use_xlib_xcb=yes
+                       xlib_xcb_BASE="cairo"
+xlib_xcb_REQUIRES="$ac_env_xlib_xcb_REQUIRES_value"
+xlib_xcb_CFLAGS="$ac_env_xlib_xcb_CFLAGS_value"
+xlib_xcb_NONPKGCONFIG_CFLAGS="$ac_env_xlib_xcb_NONPKGCONFIG_CFLAGS_value"
+xlib_xcb_LIBS="$ac_env_xlib_xcb_LIBS_value"
+xlib_xcb_NONPKGCONFIG_LIBS="$ac_env_xlib_xcb_NONPKGCONFIG_LIBS_value"
+xlib_xcb_NONPKGCONFIG_EXTRA_LIBS="$ac_env_xlib_xcb_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$use_xcb" = "xyes" -a "x$use_xlib" = "xyes"; then
+    xlib_xcb_REQUIRES="x11-xcb"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xlib_xcb" >&5
+$as_echo_n "checking for xlib_xcb... " >&6; }
+
+if test -n "$xlib_xcb_CFLAGS"; then
+    pkg_cv_xlib_xcb_CFLAGS="$xlib_xcb_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xlib_xcb_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xlib_xcb_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xlib_xcb_CFLAGS=`$PKG_CONFIG --cflags "$xlib_xcb_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$xlib_xcb_LIBS"; then
+    pkg_cv_xlib_xcb_LIBS="$xlib_xcb_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xlib_xcb_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xlib_xcb_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xlib_xcb_LIBS=`$PKG_CONFIG --libs "$xlib_xcb_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               xlib_xcb_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$xlib_xcb_REQUIRES" 2>&1`
+        else
+               xlib_xcb_PKG_ERRORS=`$PKG_CONFIG --print-errors "$xlib_xcb_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$xlib_xcb_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                     use_xlib_xcb="no (requires $xlib_xcb_REQUIRES http://xcb.freedesktop.org)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                     use_xlib_xcb="no (requires $xlib_xcb_REQUIRES http://xcb.freedesktop.org)"
+else
+       xlib_xcb_CFLAGS=$pkg_cv_xlib_xcb_CFLAGS
+       xlib_xcb_LIBS=$pkg_cv_xlib_xcb_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  else
+    use_xlib_xcb="no (requires both --enable-xlib and --enable-xcb)"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Xlib/XCB functions feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Xlib/XCB functions feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_xlib_xcb" >&5
+$as_echo "$use_xlib_xcb" >&6; }
+
+               if test "x$enable_xlib_xcb" = "xyes" -a "x$use_xlib_xcb" != xyes; then :
+                       as_fn_error $? " Xlib/XCB functions feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-xlib-xcb: \`$use_xlib_xcb', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_xlib_xcb" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$xlib_xcb_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$xlib_xcb_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$xlib_xcb_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$xlib_xcb_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$xlib_xcb_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset xlib_xcb_BASE
+unset xlib_xcb_REQUIRES
+unset xlib_xcb_CFLAGS
+unset xlib_xcb_NONPKGCONFIG_CFLAGS
+unset xlib_xcb_LIBS
+unset xlib_xcb_NONPKGCONFIG_LIBS
+unset xlib_xcb_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_xlib_xcb" = xyes; then
+  CAIRO_HAS_XLIB_XCB_FUNCTIONS_TRUE=
+  CAIRO_HAS_XLIB_XCB_FUNCTIONS_FALSE='#'
+else
+  CAIRO_HAS_XLIB_XCB_FUNCTIONS_TRUE='#'
+  CAIRO_HAS_XLIB_XCB_FUNCTIONS_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_XLIB_XCB_FUNCTIONS=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_xlib_xcb_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xcb_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_xlib_xcb_headers)
+all_cairo_private += $(cairo_xlib_xcb_private)
+all_cairo_cxx_sources += $(cairo_xlib_xcb_cxx_sources)
+all_cairo_sources += $(cairo_xlib_xcb_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xcb_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xcb_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xcb_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xcb_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_xlib_xcb_headers)
+enabled_cairo_private += $(cairo_xlib_xcb_private)
+enabled_cairo_cxx_sources += $(cairo_xlib_xcb_cxx_sources)
+enabled_cairo_sources += $(cairo_xlib_xcb_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XLIB_XCB_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XCB_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xcb_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xcb_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xcb_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xcb_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_XLIB_XCB_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XCB_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xlib_xcb" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-xlib-xcb.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_xlib_xcb" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-xlib-xcb-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-xlib-xcb.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-xlib-xcb.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XLIB_XCB_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XCB_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xlib_xcb" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_XLIB_XCB_FUNCTIONS'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_XLIB_XCB_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_XLIB_XCB_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xlib_xcb" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The Xlib/XCB functions feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to Xlib/XCB functions specific
+--- API.'
+
+
+
+fi
+
+
+
+
+
+                                                                                                                               # Check whether --enable-xcb-shm was given.
+if test "${enable_xcb_shm+set}" = set; then :
+  enableval=$enable_xcb_shm; enable_xcb_shm=$enableval
+else
+  enable_xcb_shm=auto
+fi
+
+                       case $enable_xcb_shm in #(
+  no) :
+               use_xcb_shm="no (disabled, use --enable-xcb-shm to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's XCB/SHM functions feature" >&5
+$as_echo_n "checking for cairo's XCB/SHM functions feature... " >&6; }
+               echo
+
+               use_xcb_shm=yes
+                       xcb_shm_BASE="cairo"
+xcb_shm_REQUIRES="$ac_env_xcb_shm_REQUIRES_value"
+xcb_shm_CFLAGS="$ac_env_xcb_shm_CFLAGS_value"
+xcb_shm_NONPKGCONFIG_CFLAGS="$ac_env_xcb_shm_NONPKGCONFIG_CFLAGS_value"
+xcb_shm_LIBS="$ac_env_xcb_shm_LIBS_value"
+xcb_shm_NONPKGCONFIG_LIBS="$ac_env_xcb_shm_NONPKGCONFIG_LIBS_value"
+xcb_shm_NONPKGCONFIG_EXTRA_LIBS="$ac_env_xcb_shm_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$use_xcb" = "xyes"; then
+      xcb_shm_REQUIRES="xcb-shm"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xcb_shm" >&5
+$as_echo_n "checking for xcb_shm... " >&6; }
+
+if test -n "$xcb_shm_CFLAGS"; then
+    pkg_cv_xcb_shm_CFLAGS="$xcb_shm_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xcb_shm_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xcb_shm_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xcb_shm_CFLAGS=`$PKG_CONFIG --cflags "$xcb_shm_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$xcb_shm_LIBS"; then
+    pkg_cv_xcb_shm_LIBS="$xcb_shm_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$xcb_shm_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$xcb_shm_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_xcb_shm_LIBS=`$PKG_CONFIG --libs "$xcb_shm_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               xcb_shm_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$xcb_shm_REQUIRES" 2>&1`
+        else
+               xcb_shm_PKG_ERRORS=`$PKG_CONFIG --print-errors "$xcb_shm_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$xcb_shm_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                       use_xcb_shm="no (requires $xcb_shm http://xcb.freedesktop.org)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                       use_xcb_shm="no (requires $xcb_shm http://xcb.freedesktop.org)"
+else
+       xcb_shm_CFLAGS=$pkg_cv_xcb_shm_CFLAGS
+       xcb_shm_LIBS=$pkg_cv_xcb_shm_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  else
+    use_xcb_shm="no (requires --enable-xcb)"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's XCB/SHM functions feature could be enabled" >&5
+$as_echo_n "checking whether cairo's XCB/SHM functions feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_xcb_shm" >&5
+$as_echo "$use_xcb_shm" >&6; }
+
+               if test "x$enable_xcb_shm" = "xyes" -a "x$use_xcb_shm" != xyes; then :
+                       as_fn_error $? " XCB/SHM functions feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-xcb-shm: \`$use_xcb_shm', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_xcb_shm" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$xcb_shm_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$xcb_shm_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$xcb_shm_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$xcb_shm_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$xcb_shm_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset xcb_shm_BASE
+unset xcb_shm_REQUIRES
+unset xcb_shm_CFLAGS
+unset xcb_shm_NONPKGCONFIG_CFLAGS
+unset xcb_shm_LIBS
+unset xcb_shm_NONPKGCONFIG_LIBS
+unset xcb_shm_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_xcb_shm" = xyes; then
+  CAIRO_HAS_XCB_SHM_FUNCTIONS_TRUE=
+  CAIRO_HAS_XCB_SHM_FUNCTIONS_FALSE='#'
+else
+  CAIRO_HAS_XCB_SHM_FUNCTIONS_TRUE='#'
+  CAIRO_HAS_XCB_SHM_FUNCTIONS_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_XCB_SHM_FUNCTIONS=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_xcb_shm_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_shm_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_xcb_shm_headers)
+all_cairo_private += $(cairo_xcb_shm_private)
+all_cairo_cxx_sources += $(cairo_xcb_shm_cxx_sources)
+all_cairo_sources += $(cairo_xcb_shm_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_shm_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xcb_shm_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_shm_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_shm_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_xcb_shm_headers)
+enabled_cairo_private += $(cairo_xcb_shm_private)
+enabled_cairo_cxx_sources += $(cairo_xcb_shm_cxx_sources)
+enabled_cairo_sources += $(cairo_xcb_shm_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XCB_SHM_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SHM_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_shm_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xcb_shm_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_shm_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_shm_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_XCB_SHM_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SHM_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xcb_shm" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-xcb-shm.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_xcb_shm" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-xcb-shm-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-xcb-shm.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-xcb-shm.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XCB_SHM_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SHM_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xcb_shm" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_XCB_SHM_FUNCTIONS'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_XCB_SHM_FUNCTIONS'
+
+
+
+                                       if test "x$use_xcb_shm" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_XCB_SHM_FUNCTIONS'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_XCB_SHM_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_XCB_SHM_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-qt was given.
+if test "${enable_qt+set}" = set; then :
+  enableval=$enable_qt; enable_qt=$enableval
+else
+  enable_qt=no
+fi
+
+                       case $enable_qt in #(
+  no) :
+               use_qt="no (disabled, use --enable-qt to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Qt surface backend feature" >&5
+$as_echo_n "checking for cairo's Qt surface backend feature... " >&6; }
+               echo
+
+               use_qt=yes
+                       qt_BASE="cairo"
+qt_REQUIRES="$ac_env_qt_REQUIRES_value"
+qt_CFLAGS="$ac_env_qt_CFLAGS_value"
+qt_NONPKGCONFIG_CFLAGS="$ac_env_qt_NONPKGCONFIG_CFLAGS_value"
+qt_LIBS="$ac_env_qt_LIBS_value"
+qt_NONPKGCONFIG_LIBS="$ac_env_qt_NONPKGCONFIG_LIBS_value"
+qt_NONPKGCONFIG_EXTRA_LIBS="$ac_env_qt_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  qt_REQUIRES="QtGui >= 4.4.0"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for qt" >&5
+$as_echo_n "checking for qt... " >&6; }
+
+if test -n "$qt_CFLAGS"; then
+    pkg_cv_qt_CFLAGS="$qt_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$qt_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$qt_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_qt_CFLAGS=`$PKG_CONFIG --cflags "$qt_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$qt_LIBS"; then
+    pkg_cv_qt_LIBS="$qt_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$qt_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$qt_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_qt_LIBS=`$PKG_CONFIG --libs "$qt_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               qt_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$qt_REQUIRES" 2>&1`
+        else
+               qt_PKG_ERRORS=`$PKG_CONFIG --print-errors "$qt_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$qt_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                    qt_REQUIRES=""
+                    use_qt="no (requires Qt4 development libraries)"
+
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                    qt_REQUIRES=""
+                    use_qt="no (requires Qt4 development libraries)"
+
+else
+       qt_CFLAGS=$pkg_cv_qt_CFLAGS
+       qt_LIBS=$pkg_cv_qt_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Qt surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Qt surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_qt" >&5
+$as_echo "$use_qt" >&6; }
+
+               if test "x$enable_qt" = "xyes" -a "x$use_qt" != xyes; then :
+                       as_fn_error $? " Qt surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-qt: \`$use_qt', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_qt" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$qt_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$qt_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$qt_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$qt_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$qt_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset qt_BASE
+unset qt_REQUIRES
+unset qt_CFLAGS
+unset qt_NONPKGCONFIG_CFLAGS
+unset qt_LIBS
+unset qt_NONPKGCONFIG_LIBS
+unset qt_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_qt" = xyes; then
+  CAIRO_HAS_QT_SURFACE_TRUE=
+  CAIRO_HAS_QT_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_QT_SURFACE_TRUE='#'
+  CAIRO_HAS_QT_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_QT_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_qt_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_qt_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_qt_headers)
+all_cairo_private += $(cairo_qt_private)
+all_cairo_cxx_sources += $(cairo_qt_cxx_sources)
+all_cairo_sources += $(cairo_qt_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_qt_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_qt_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_qt_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_qt_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_qt_headers)
+enabled_cairo_private += $(cairo_qt_private)
+enabled_cairo_cxx_sources += $(cairo_qt_cxx_sources)
+enabled_cairo_sources += $(cairo_qt_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QT_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_qt_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_qt_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_qt_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_qt_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_QT_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_QT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_qt" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-qt.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_qt" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-qt-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-qt.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-qt.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QT_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_qt" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_QT_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_QT_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_QT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_qt" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The Qt surface backend feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to Qt surface backend specific
+--- API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-quartz was given.
+if test "${enable_quartz+set}" = set; then :
+  enableval=$enable_quartz; enable_quartz=$enableval
+else
+  enable_quartz=auto
+fi
+
+                       case $enable_quartz in #(
+  no) :
+               use_quartz="no (disabled, use --enable-quartz to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Quartz surface backend feature" >&5
+$as_echo_n "checking for cairo's Quartz surface backend feature... " >&6; }
+               echo
+
+               use_quartz=yes
+                       quartz_BASE="cairo"
+quartz_REQUIRES="$ac_env_quartz_REQUIRES_value"
+quartz_CFLAGS="$ac_env_quartz_CFLAGS_value"
+quartz_NONPKGCONFIG_CFLAGS="$ac_env_quartz_NONPKGCONFIG_CFLAGS_value"
+quartz_LIBS="$ac_env_quartz_LIBS_value"
+quartz_NONPKGCONFIG_LIBS="$ac_env_quartz_NONPKGCONFIG_LIBS_value"
+quartz_NONPKGCONFIG_EXTRA_LIBS="$ac_env_quartz_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+    ac_fn_c_check_header_mongrel "$LINENO" "ApplicationServices/ApplicationServices.h" "ac_cv_header_ApplicationServices_ApplicationServices_h" "$ac_includes_default"
+if test "x$ac_cv_header_ApplicationServices_ApplicationServices_h" = x""yes; then :
+
+else
+  use_quartz="no (requires ApplicationServices framework)"
+fi
+
+
+  if test "x$use_quartz" != "xyes" ; then
+        ac_fn_c_check_header_mongrel "$LINENO" "CoreGraphics/CoreGraphics.h" "ac_cv_header_CoreGraphics_CoreGraphics_h" "$ac_includes_default"
+if test "x$ac_cv_header_CoreGraphics_CoreGraphics_h" = x""yes; then :
+
+else
+  use_quartz="no (requires CoreGraphics framework)"
+fi
+
+
+    quartz_LIBS="-Xlinker -framework -Xlinker CoreGraphics"
+  else
+    quartz_LIBS="-Xlinker -framework -Xlinker ApplicationServices"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Quartz surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Quartz surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_quartz" >&5
+$as_echo "$use_quartz" >&6; }
+
+               if test "x$enable_quartz" = "xyes" -a "x$use_quartz" != xyes; then :
+                       as_fn_error $? " Quartz surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-quartz: \`$use_quartz', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_quartz" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$quartz_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$quartz_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$quartz_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$quartz_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$quartz_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset quartz_BASE
+unset quartz_REQUIRES
+unset quartz_CFLAGS
+unset quartz_NONPKGCONFIG_CFLAGS
+unset quartz_LIBS
+unset quartz_NONPKGCONFIG_LIBS
+unset quartz_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_quartz" = xyes; then
+  CAIRO_HAS_QUARTZ_SURFACE_TRUE=
+  CAIRO_HAS_QUARTZ_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_QUARTZ_SURFACE_TRUE='#'
+  CAIRO_HAS_QUARTZ_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_QUARTZ_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_quartz_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_quartz_headers)
+all_cairo_private += $(cairo_quartz_private)
+all_cairo_cxx_sources += $(cairo_quartz_cxx_sources)
+all_cairo_sources += $(cairo_quartz_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_quartz_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_quartz_headers)
+enabled_cairo_private += $(cairo_quartz_private)
+enabled_cairo_cxx_sources += $(cairo_quartz_cxx_sources)
+enabled_cairo_sources += $(cairo_quartz_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QUARTZ_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_quartz_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_QUARTZ_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_quartz" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-quartz.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_quartz" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-quartz-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-quartz.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-quartz.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QUARTZ_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_quartz" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_QUARTZ_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_QUARTZ_SURFACE'
+
+
+
+                                       if test "x$use_quartz" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_QUARTZ_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_QUARTZ_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_quartz" = xyes; then :
+  :
+                                       CAIRO_NATIVE_SURFACE_BACKENDS="${CAIRO_NATIVE_SURFACE_BACKENDS}"'quartz'
+
+
+
+fi
+
+
+
+                                                                                                                               # Check whether --enable-quartz-font was given.
+if test "${enable_quartz_font+set}" = set; then :
+  enableval=$enable_quartz_font; enable_quartz_font=$enableval
+else
+  enable_quartz_font=auto
+fi
+
+                       case $enable_quartz_font in #(
+  no) :
+               use_quartz_font="no (disabled, use --enable-quartz-font to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Quartz font backend feature" >&5
+$as_echo_n "checking for cairo's Quartz font backend feature... " >&6; }
+               echo
+
+               use_quartz_font=yes
+                       quartz_font_BASE="cairo"
+quartz_font_REQUIRES="$ac_env_quartz_font_REQUIRES_value"
+quartz_font_CFLAGS="$ac_env_quartz_font_CFLAGS_value"
+quartz_font_NONPKGCONFIG_CFLAGS="$ac_env_quartz_font_NONPKGCONFIG_CFLAGS_value"
+quartz_font_LIBS="$ac_env_quartz_font_LIBS_value"
+quartz_font_NONPKGCONFIG_LIBS="$ac_env_quartz_font_NONPKGCONFIG_LIBS_value"
+quartz_font_NONPKGCONFIG_EXTRA_LIBS="$ac_env_quartz_font_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  use_quartz_font=$use_quartz
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Quartz font backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Quartz font backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_quartz_font" >&5
+$as_echo "$use_quartz_font" >&6; }
+
+               if test "x$enable_quartz_font" = "xyes" -a "x$use_quartz_font" != xyes; then :
+                       as_fn_error $? " Quartz font backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-quartz-font: \`$use_quartz_font', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_quartz_font" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$quartz_font_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$quartz_font_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$quartz_font_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$quartz_font_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$quartz_font_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset quartz_font_BASE
+unset quartz_font_REQUIRES
+unset quartz_font_CFLAGS
+unset quartz_font_NONPKGCONFIG_CFLAGS
+unset quartz_font_LIBS
+unset quartz_font_NONPKGCONFIG_LIBS
+unset quartz_font_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_quartz_font" = xyes; then
+  CAIRO_HAS_QUARTZ_FONT_TRUE=
+  CAIRO_HAS_QUARTZ_FONT_FALSE='#'
+else
+  CAIRO_HAS_QUARTZ_FONT_TRUE='#'
+  CAIRO_HAS_QUARTZ_FONT_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_QUARTZ_FONT=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_quartz_font_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_font_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_quartz_font_headers)
+all_cairo_private += $(cairo_quartz_font_private)
+all_cairo_cxx_sources += $(cairo_quartz_font_cxx_sources)
+all_cairo_sources += $(cairo_quartz_font_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_font_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_quartz_font_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_font_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_font_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_quartz_font_headers)
+enabled_cairo_private += $(cairo_quartz_font_private)
+enabled_cairo_cxx_sources += $(cairo_quartz_font_cxx_sources)
+enabled_cairo_sources += $(cairo_quartz_font_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QUARTZ_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_font_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_quartz_font_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_font_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_font_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_QUARTZ_FONT'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_quartz_font" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-quartz-font.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_quartz_font" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-quartz-font-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-quartz-font.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-quartz-font.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QUARTZ_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_quartz_font" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_QUARTZ_FONT'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_QUARTZ_FONT'
+
+
+
+                                       if test "x$use_quartz_font" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_QUARTZ_FONT'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_QUARTZ_FONT 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_FONT),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+                                       if test "x$use_quartz_font" = xyes; then :
+  :
+                                       CAIRO_NATIVE_FONT_BACKENDS="${CAIRO_NATIVE_FONT_BACKENDS}"'quartz_font'
+
+
+
+fi
+
+
+                                                                                                                               # Check whether --enable-quartz-image was given.
+if test "${enable_quartz_image+set}" = set; then :
+  enableval=$enable_quartz_image; enable_quartz_image=$enableval
+else
+  enable_quartz_image=no
+fi
+
+                       case $enable_quartz_image in #(
+  no) :
+               use_quartz_image="no (disabled, use --enable-quartz-image to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Quartz Image surface backend feature" >&5
+$as_echo_n "checking for cairo's Quartz Image surface backend feature... " >&6; }
+               echo
+
+               use_quartz_image=yes
+                       quartz_image_BASE="cairo"
+quartz_image_REQUIRES="$ac_env_quartz_image_REQUIRES_value"
+quartz_image_CFLAGS="$ac_env_quartz_image_CFLAGS_value"
+quartz_image_NONPKGCONFIG_CFLAGS="$ac_env_quartz_image_NONPKGCONFIG_CFLAGS_value"
+quartz_image_LIBS="$ac_env_quartz_image_LIBS_value"
+quartz_image_NONPKGCONFIG_LIBS="$ac_env_quartz_image_NONPKGCONFIG_LIBS_value"
+quartz_image_NONPKGCONFIG_EXTRA_LIBS="$ac_env_quartz_image_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  use_quartz_image=$use_quartz
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Quartz Image surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Quartz Image surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_quartz_image" >&5
+$as_echo "$use_quartz_image" >&6; }
+
+               if test "x$enable_quartz_image" = "xyes" -a "x$use_quartz_image" != xyes; then :
+                       as_fn_error $? " Quartz Image surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-quartz-image: \`$use_quartz_image', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_quartz_image" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$quartz_image_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$quartz_image_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$quartz_image_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$quartz_image_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$quartz_image_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset quartz_image_BASE
+unset quartz_image_REQUIRES
+unset quartz_image_CFLAGS
+unset quartz_image_NONPKGCONFIG_CFLAGS
+unset quartz_image_LIBS
+unset quartz_image_NONPKGCONFIG_LIBS
+unset quartz_image_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_quartz_image" = xyes; then
+  CAIRO_HAS_QUARTZ_IMAGE_SURFACE_TRUE=
+  CAIRO_HAS_QUARTZ_IMAGE_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_QUARTZ_IMAGE_SURFACE_TRUE='#'
+  CAIRO_HAS_QUARTZ_IMAGE_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_QUARTZ_IMAGE_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_quartz_image_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_image_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_quartz_image_headers)
+all_cairo_private += $(cairo_quartz_image_private)
+all_cairo_cxx_sources += $(cairo_quartz_image_cxx_sources)
+all_cairo_sources += $(cairo_quartz_image_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_image_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_quartz_image_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_image_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_image_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_quartz_image_headers)
+enabled_cairo_private += $(cairo_quartz_image_private)
+enabled_cairo_cxx_sources += $(cairo_quartz_image_cxx_sources)
+enabled_cairo_sources += $(cairo_quartz_image_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QUARTZ_IMAGE_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_IMAGE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_image_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_quartz_image_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_image_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_image_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_QUARTZ_IMAGE_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_IMAGE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_quartz_image" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-quartz-image.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_quartz_image" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-quartz-image-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-quartz-image.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-quartz-image.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_QUARTZ_IMAGE_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_IMAGE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_quartz_image" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_QUARTZ_IMAGE_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_QUARTZ_IMAGE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_quartz_image" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The Quartz Image surface backend feature is still under active
+--- development and is included in this release only as a preview. It does
+--- NOT fully work yet and incompatible changes may yet be made to Quartz
+--- Image surface backend specific API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-win32 was given.
+if test "${enable_win32+set}" = set; then :
+  enableval=$enable_win32; enable_win32=$enableval
+else
+  enable_win32=auto
+fi
+
+                       case $enable_win32 in #(
+  no) :
+               use_win32="no (disabled, use --enable-win32 to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Microsoft Windows surface backend feature" >&5
+$as_echo_n "checking for cairo's Microsoft Windows surface backend feature... " >&6; }
+               echo
+
+               use_win32=yes
+                       win32_BASE="cairo"
+win32_REQUIRES="$ac_env_win32_REQUIRES_value"
+win32_CFLAGS="$ac_env_win32_CFLAGS_value"
+win32_NONPKGCONFIG_CFLAGS="$ac_env_win32_NONPKGCONFIG_CFLAGS_value"
+win32_LIBS="$ac_env_win32_LIBS_value"
+win32_NONPKGCONFIG_LIBS="$ac_env_win32_NONPKGCONFIG_LIBS_value"
+win32_NONPKGCONFIG_EXTRA_LIBS="$ac_env_win32_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$have_windows" != xyes; then
+    use_win32="no (requires a Win32 platform)"
+  fi
+  win32_LIBS="-lgdi32 -lmsimg32"
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Microsoft Windows surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Microsoft Windows surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_win32" >&5
+$as_echo "$use_win32" >&6; }
+
+               if test "x$enable_win32" = "xyes" -a "x$use_win32" != xyes; then :
+                       as_fn_error $? " Microsoft Windows surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-win32: \`$use_win32', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_win32" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$win32_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$win32_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$win32_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$win32_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$win32_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset win32_BASE
+unset win32_REQUIRES
+unset win32_CFLAGS
+unset win32_NONPKGCONFIG_CFLAGS
+unset win32_LIBS
+unset win32_NONPKGCONFIG_LIBS
+unset win32_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_win32" = xyes; then
+  CAIRO_HAS_WIN32_SURFACE_TRUE=
+  CAIRO_HAS_WIN32_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_WIN32_SURFACE_TRUE='#'
+  CAIRO_HAS_WIN32_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_WIN32_SURFACE=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_win32_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_win32_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_win32_headers)
+all_cairo_private += $(cairo_win32_private)
+all_cairo_cxx_sources += $(cairo_win32_cxx_sources)
+all_cairo_sources += $(cairo_win32_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_win32_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_win32_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_win32_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_win32_headers)
+enabled_cairo_private += $(cairo_win32_private)
+enabled_cairo_cxx_sources += $(cairo_win32_cxx_sources)
+enabled_cairo_sources += $(cairo_win32_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_WIN32_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_win32_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_win32_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_win32_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_WIN32_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_win32" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-win32.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_win32" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-win32-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-win32.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-win32.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_WIN32_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_win32" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_WIN32_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_WIN32_SURFACE'
+
+
+
+                                       if test "x$use_win32" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_WIN32_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_WIN32_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_win32" = xyes; then :
+  :
+                                       CAIRO_NATIVE_SURFACE_BACKENDS="${CAIRO_NATIVE_SURFACE_BACKENDS}"'win32'
+
+
+
+fi
+
+
+
+                                                                                                                               # Check whether --enable-win32-font was given.
+if test "${enable_win32_font+set}" = set; then :
+  enableval=$enable_win32_font; enable_win32_font=$enableval
+else
+  enable_win32_font=auto
+fi
+
+                       case $enable_win32_font in #(
+  no) :
+               use_win32_font="no (disabled, use --enable-win32-font to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Microsoft Windows font backend feature" >&5
+$as_echo_n "checking for cairo's Microsoft Windows font backend feature... " >&6; }
+               echo
+
+               use_win32_font=yes
+                       win32_font_BASE="cairo"
+win32_font_REQUIRES="$ac_env_win32_font_REQUIRES_value"
+win32_font_CFLAGS="$ac_env_win32_font_CFLAGS_value"
+win32_font_NONPKGCONFIG_CFLAGS="$ac_env_win32_font_NONPKGCONFIG_CFLAGS_value"
+win32_font_LIBS="$ac_env_win32_font_LIBS_value"
+win32_font_NONPKGCONFIG_LIBS="$ac_env_win32_font_NONPKGCONFIG_LIBS_value"
+win32_font_NONPKGCONFIG_EXTRA_LIBS="$ac_env_win32_font_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  use_win32_font=$use_win32
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Microsoft Windows font backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Microsoft Windows font backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_win32_font" >&5
+$as_echo "$use_win32_font" >&6; }
+
+               if test "x$enable_win32_font" = "xyes" -a "x$use_win32_font" != xyes; then :
+                       as_fn_error $? " Microsoft Windows font backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-win32-font: \`$use_win32_font', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_win32_font" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$win32_font_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$win32_font_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$win32_font_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$win32_font_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$win32_font_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset win32_font_BASE
+unset win32_font_REQUIRES
+unset win32_font_CFLAGS
+unset win32_font_NONPKGCONFIG_CFLAGS
+unset win32_font_LIBS
+unset win32_font_NONPKGCONFIG_LIBS
+unset win32_font_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_win32_font" = xyes; then
+  CAIRO_HAS_WIN32_FONT_TRUE=
+  CAIRO_HAS_WIN32_FONT_FALSE='#'
+else
+  CAIRO_HAS_WIN32_FONT_TRUE='#'
+  CAIRO_HAS_WIN32_FONT_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_WIN32_FONT=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_win32_font_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_win32_font_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_win32_font_headers)
+all_cairo_private += $(cairo_win32_font_private)
+all_cairo_cxx_sources += $(cairo_win32_font_cxx_sources)
+all_cairo_sources += $(cairo_win32_font_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_win32_font_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_win32_font_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_font_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_win32_font_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_win32_font_headers)
+enabled_cairo_private += $(cairo_win32_font_private)
+enabled_cairo_cxx_sources += $(cairo_win32_font_cxx_sources)
+enabled_cairo_sources += $(cairo_win32_font_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_WIN32_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_win32_font_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_win32_font_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_font_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_win32_font_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_WIN32_FONT'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_win32_font" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-win32-font.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_win32_font" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-win32-font-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-win32-font.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-win32-font.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_WIN32_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_win32_font" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_WIN32_FONT'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_WIN32_FONT'
+
+
+
+                                       if test "x$use_win32_font" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_WIN32_FONT'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_WIN32_FONT 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_WIN32_FONT),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+                                       if test "x$use_win32_font" = xyes; then :
+  :
+                                       CAIRO_NATIVE_FONT_BACKENDS="${CAIRO_NATIVE_FONT_BACKENDS}"'win32_font'
+
+
+
+fi
+
+
+test_win32_printing=no
+if test "x$use_win32" = "xyes"; then
+  # Extract the first word of "gs", so it can be a program name with args.
+set dummy gs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_GS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GS"; then
+  ac_cv_prog_GS="$GS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_GS="gs"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GS=$ac_cv_prog_GS
+if test -n "$GS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GS" >&5
+$as_echo "$GS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  if test "$GS"; then
+
+$as_echo "#define CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE 1" >>confdefs.h
+
+    test_win32_printing="yes"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Win32 Printing backend will not be tested since ghostscript is not available" >&5
+$as_echo "$as_me: WARNING: Win32 Printing backend will not be tested since ghostscript is not available" >&2;}
+    test_win32_printing="no (requires ghostscript)"
+  fi
+fi
+
+ if test "x$test_win32_printing" = "xyes"; then
+  CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_TRUE=
+  CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_FALSE='#'
+else
+  CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_TRUE='#'
+  CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_FALSE=
+fi
+
+
+
+                                                                                                                               # Check whether --enable-skia was given.
+if test "${enable_skia+set}" = set; then :
+  enableval=$enable_skia; enable_skia=$enableval
+else
+  enable_skia=no
+fi
+
+                       case $enable_skia in #(
+  no) :
+               use_skia="no (disabled, use --enable-skia to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Skia surface backend feature" >&5
+$as_echo_n "checking for cairo's Skia surface backend feature... " >&6; }
+               echo
+
+               use_skia=yes
+                       skia_BASE="cairo"
+skia_REQUIRES="$ac_env_skia_REQUIRES_value"
+skia_CFLAGS="$ac_env_skia_CFLAGS_value"
+skia_NONPKGCONFIG_CFLAGS="$ac_env_skia_NONPKGCONFIG_CFLAGS_value"
+skia_LIBS="$ac_env_skia_LIBS_value"
+skia_NONPKGCONFIG_LIBS="$ac_env_skia_NONPKGCONFIG_LIBS_value"
+skia_NONPKGCONFIG_EXTRA_LIBS="$ac_env_skia_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+# Check whether --with-skia was given.
+if test "${with_skia+set}" = set; then :
+  withval=$with_skia; skia_DIR="$withval"
+else
+  skia_DIR="`pwd`/../skia"
+fi
+
+
+# Check whether --with-skia-bulid was given.
+if test "${with_skia_bulid+set}" = set; then :
+  withval=$with_skia_bulid; skia_BUILD="$withval"
+else
+  skia_BUILD="Release"
+fi
+
+  skia_NONPKGCONFIG_CFLAGS="-I$skia_DIR/include/config -I$skia_DIR/include/core -I$skia_DIR/include/effects"
+  if test "x$skia_BUILD" = x"Release"; then
+       skia_NONPKGCONFIG_CFLAGS="-DSK_RELEASE -DSK_CAN_USE_FLOAT $skia_NONPKGCONFIG_CFLAGS"
+  fi
+  skia_NONPKGCONFIG_LIBS="--start-group $skia_DIR/out/$skia_BUILD/obj.target/gyp/libeffects.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libimages.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libutils.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libopts.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libcore.a -end-group"
+
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Skia surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Skia surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_skia" >&5
+$as_echo "$use_skia" >&6; }
+
+               if test "x$enable_skia" = "xyes" -a "x$use_skia" != xyes; then :
+                       as_fn_error $? " Skia surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-skia: \`$use_skia', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_skia" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$skia_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$skia_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$skia_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$skia_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$skia_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset skia_BASE
+unset skia_REQUIRES
+unset skia_CFLAGS
+unset skia_NONPKGCONFIG_CFLAGS
+unset skia_LIBS
+unset skia_NONPKGCONFIG_LIBS
+unset skia_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_skia" = xyes; then
+  CAIRO_HAS_SKIA_SURFACE_TRUE=
+  CAIRO_HAS_SKIA_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_SKIA_SURFACE_TRUE='#'
+  CAIRO_HAS_SKIA_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_SKIA_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_skia_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_skia_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_skia_headers)
+all_cairo_private += $(cairo_skia_private)
+all_cairo_cxx_sources += $(cairo_skia_cxx_sources)
+all_cairo_sources += $(cairo_skia_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_skia_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_skia_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_skia_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_skia_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_skia_headers)
+enabled_cairo_private += $(cairo_skia_private)
+enabled_cairo_cxx_sources += $(cairo_skia_cxx_sources)
+enabled_cairo_sources += $(cairo_skia_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_SKIA_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_SKIA_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_skia_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_skia_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_skia_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_skia_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_SKIA_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_SKIA_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_skia" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-skia.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_skia" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-skia-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-skia.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-skia.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_SKIA_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_SKIA_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_skia" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_SKIA_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_SKIA_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_SKIA_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_skia" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The Skia surface backend feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to Skia surface backend specific
+--- API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-os2 was given.
+if test "${enable_os2+set}" = set; then :
+  enableval=$enable_os2; enable_os2=$enableval
+else
+  enable_os2=no
+fi
+
+                       case $enable_os2 in #(
+  no) :
+               use_os2="no (disabled, use --enable-os2 to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's OS/2 surface backend feature" >&5
+$as_echo_n "checking for cairo's OS/2 surface backend feature... " >&6; }
+               echo
+
+               use_os2=yes
+                       os2_BASE="cairo"
+os2_REQUIRES="$ac_env_os2_REQUIRES_value"
+os2_CFLAGS="$ac_env_os2_CFLAGS_value"
+os2_NONPKGCONFIG_CFLAGS="$ac_env_os2_NONPKGCONFIG_CFLAGS_value"
+os2_LIBS="$ac_env_os2_LIBS_value"
+os2_NONPKGCONFIG_LIBS="$ac_env_os2_NONPKGCONFIG_LIBS_value"
+os2_NONPKGCONFIG_EXTRA_LIBS="$ac_env_os2_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  case "$host" in
+    *-*-os2*)
+      :
+      ;;
+    *)
+      use_os2="no (requires an OS/2 platform)"
+      ;;
+  esac
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's OS/2 surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's OS/2 surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_os2" >&5
+$as_echo "$use_os2" >&6; }
+
+               if test "x$enable_os2" = "xyes" -a "x$use_os2" != xyes; then :
+                       as_fn_error $? " OS/2 surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-os2: \`$use_os2', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_os2" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$os2_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$os2_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$os2_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$os2_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$os2_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset os2_BASE
+unset os2_REQUIRES
+unset os2_CFLAGS
+unset os2_NONPKGCONFIG_CFLAGS
+unset os2_LIBS
+unset os2_NONPKGCONFIG_LIBS
+unset os2_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_os2" = xyes; then
+  CAIRO_HAS_OS2_SURFACE_TRUE=
+  CAIRO_HAS_OS2_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_OS2_SURFACE_TRUE='#'
+  CAIRO_HAS_OS2_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_OS2_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_os2_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_os2_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_os2_headers)
+all_cairo_private += $(cairo_os2_private)
+all_cairo_cxx_sources += $(cairo_os2_cxx_sources)
+all_cairo_sources += $(cairo_os2_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_os2_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_os2_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_os2_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_os2_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_os2_headers)
+enabled_cairo_private += $(cairo_os2_private)
+enabled_cairo_cxx_sources += $(cairo_os2_cxx_sources)
+enabled_cairo_sources += $(cairo_os2_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_OS2_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_OS2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_os2_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_os2_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_os2_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_os2_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_OS2_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_OS2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_os2" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-os2.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_os2" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-os2-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-os2.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-os2.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_OS2_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_OS2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_os2" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_OS2_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_OS2_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_OS2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_os2" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The OS/2 surface backend feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to OS/2 surface backend specific
+--- API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-beos was given.
+if test "${enable_beos+set}" = set; then :
+  enableval=$enable_beos; enable_beos=$enableval
+else
+  enable_beos=no
+fi
+
+                       case $enable_beos in #(
+  no) :
+               use_beos="no (disabled, use --enable-beos to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's BeOS/Zeta surface backend feature" >&5
+$as_echo_n "checking for cairo's BeOS/Zeta surface backend feature... " >&6; }
+               echo
+
+               use_beos=yes
+                       beos_BASE="cairo"
+beos_REQUIRES="$ac_env_beos_REQUIRES_value"
+beos_CFLAGS="$ac_env_beos_CFLAGS_value"
+beos_NONPKGCONFIG_CFLAGS="$ac_env_beos_NONPKGCONFIG_CFLAGS_value"
+beos_LIBS="$ac_env_beos_LIBS_value"
+beos_NONPKGCONFIG_LIBS="$ac_env_beos_NONPKGCONFIG_LIBS_value"
+beos_NONPKGCONFIG_EXTRA_LIBS="$ac_env_beos_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  case "$host" in
+    *-*-beos)
+      beos_LIBS=""
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lbe" >&5
+$as_echo_n "checking for main in -lbe... " >&6; }
+if test "${ac_cv_lib_be_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbe  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_be_main=yes
+else
+  ac_cv_lib_be_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_be_main" >&5
+$as_echo "$ac_cv_lib_be_main" >&6; }
+if test "x$ac_cv_lib_be_main" = x""yes; then :
+  beos_LIBS="$beos_LIBS -lbe"
+fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lzeta" >&5
+$as_echo_n "checking for main in -lzeta... " >&6; }
+if test "${ac_cv_lib_zeta_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lzeta  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_zeta_main=yes
+else
+  ac_cv_lib_zeta_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zeta_main" >&5
+$as_echo "$ac_cv_lib_zeta_main" >&6; }
+if test "x$ac_cv_lib_zeta_main" = x""yes; then :
+  beos_LIBS="$beos_LIBS -lzeta"
+fi
+
+      ;;
+    *)
+      use_beos="no (requires a BeOS platform)"
+      ;;
+  esac
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's BeOS/Zeta surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's BeOS/Zeta surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_beos" >&5
+$as_echo "$use_beos" >&6; }
+
+               if test "x$enable_beos" = "xyes" -a "x$use_beos" != xyes; then :
+                       as_fn_error $? " BeOS/Zeta surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-beos: \`$use_beos', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_beos" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$beos_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$beos_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$beos_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$beos_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$beos_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset beos_BASE
+unset beos_REQUIRES
+unset beos_CFLAGS
+unset beos_NONPKGCONFIG_CFLAGS
+unset beos_LIBS
+unset beos_NONPKGCONFIG_LIBS
+unset beos_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_beos" = xyes; then
+  CAIRO_HAS_BEOS_SURFACE_TRUE=
+  CAIRO_HAS_BEOS_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_BEOS_SURFACE_TRUE='#'
+  CAIRO_HAS_BEOS_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_BEOS_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_beos_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_beos_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_beos_headers)
+all_cairo_private += $(cairo_beos_private)
+all_cairo_cxx_sources += $(cairo_beos_cxx_sources)
+all_cairo_sources += $(cairo_beos_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_beos_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_beos_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_beos_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_beos_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_beos_headers)
+enabled_cairo_private += $(cairo_beos_private)
+enabled_cairo_cxx_sources += $(cairo_beos_cxx_sources)
+enabled_cairo_sources += $(cairo_beos_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_BEOS_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_BEOS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_beos_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_beos_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_beos_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_beos_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_BEOS_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_BEOS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_beos" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-beos.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_beos" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-beos-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-beos.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-beos.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_BEOS_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_BEOS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_beos" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_BEOS_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_BEOS_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_BEOS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_beos" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The BeOS/Zeta surface backend feature is still under active development
+--- and is included in this release only as a preview. It does NOT fully work
+--- yet and incompatible changes may yet be made to BeOS/Zeta surface backend
+--- specific API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-drm was given.
+if test "${enable_drm+set}" = set; then :
+  enableval=$enable_drm; enable_drm=$enableval
+else
+  enable_drm=no
+fi
+
+                       case $enable_drm in #(
+  no) :
+               use_drm="no (disabled, use --enable-drm to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's DRM surface backend feature" >&5
+$as_echo_n "checking for cairo's DRM surface backend feature... " >&6; }
+               echo
+
+               use_drm=yes
+                       drm_BASE="cairo"
+drm_REQUIRES="$ac_env_drm_REQUIRES_value"
+drm_CFLAGS="$ac_env_drm_CFLAGS_value"
+drm_NONPKGCONFIG_CFLAGS="$ac_env_drm_NONPKGCONFIG_CFLAGS_value"
+drm_LIBS="$ac_env_drm_LIBS_value"
+drm_NONPKGCONFIG_LIBS="$ac_env_drm_NONPKGCONFIG_LIBS_value"
+drm_NONPKGCONFIG_EXTRA_LIBS="$ac_env_drm_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  drm_REQUIRES="libudev >= 136"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for drm" >&5
+$as_echo_n "checking for drm... " >&6; }
+
+if test -n "$drm_CFLAGS"; then
+    pkg_cv_drm_CFLAGS="$drm_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$drm_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$drm_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_drm_CFLAGS=`$PKG_CONFIG --cflags "$drm_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$drm_LIBS"; then
+    pkg_cv_drm_LIBS="$drm_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$drm_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$drm_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_drm_LIBS=`$PKG_CONFIG --libs "$drm_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               drm_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$drm_REQUIRES" 2>&1`
+        else
+               drm_PKG_ERRORS=`$PKG_CONFIG --print-errors "$drm_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$drm_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  use_drm="no (requires $drm_REQUIRES, udev is available from git://git.kernel.org/pub/scm/linux/hotplug/udev.git)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  use_drm="no (requires $drm_REQUIRES, udev is available from git://git.kernel.org/pub/scm/linux/hotplug/udev.git)"
+else
+       drm_CFLAGS=$pkg_cv_drm_CFLAGS
+       drm_LIBS=$pkg_cv_drm_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's DRM surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's DRM surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_drm" >&5
+$as_echo "$use_drm" >&6; }
+
+               if test "x$enable_drm" = "xyes" -a "x$use_drm" != xyes; then :
+                       as_fn_error $? " DRM surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-drm: \`$use_drm', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_drm" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$drm_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$drm_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$drm_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$drm_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$drm_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset drm_BASE
+unset drm_REQUIRES
+unset drm_CFLAGS
+unset drm_NONPKGCONFIG_CFLAGS
+unset drm_LIBS
+unset drm_NONPKGCONFIG_LIBS
+unset drm_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_drm" = xyes; then
+  CAIRO_HAS_DRM_SURFACE_TRUE=
+  CAIRO_HAS_DRM_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_DRM_SURFACE_TRUE='#'
+  CAIRO_HAS_DRM_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_DRM_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_drm_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_drm_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_drm_headers)
+all_cairo_private += $(cairo_drm_private)
+all_cairo_cxx_sources += $(cairo_drm_cxx_sources)
+all_cairo_sources += $(cairo_drm_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_drm_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_drm_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_drm_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_drm_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_drm_headers)
+enabled_cairo_private += $(cairo_drm_private)
+enabled_cairo_cxx_sources += $(cairo_drm_cxx_sources)
+enabled_cairo_sources += $(cairo_drm_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_DRM_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_DRM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_drm_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_drm_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_drm_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_drm_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_DRM_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_DRM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_drm" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-drm.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_drm" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-drm-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-drm.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-drm.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_DRM_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_DRM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_drm" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_DRM_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_DRM_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_DRM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_drm" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The DRM surface backend feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to DRM surface backend specific
+--- API.'
+
+
+
+fi
+
+
+
+
+
+                                                                                                                               # Check whether --enable-gallium was given.
+if test "${enable_gallium+set}" = set; then :
+  enableval=$enable_gallium; enable_gallium=$enableval
+else
+  enable_gallium=no
+fi
+
+                       case $enable_gallium in #(
+  no) :
+               use_gallium="no (disabled, use --enable-gallium to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Gallium3D surface backend feature" >&5
+$as_echo_n "checking for cairo's Gallium3D surface backend feature... " >&6; }
+               echo
+
+               use_gallium=yes
+                       gallium_BASE="cairo"
+gallium_REQUIRES="$ac_env_gallium_REQUIRES_value"
+gallium_CFLAGS="$ac_env_gallium_CFLAGS_value"
+gallium_NONPKGCONFIG_CFLAGS="$ac_env_gallium_NONPKGCONFIG_CFLAGS_value"
+gallium_LIBS="$ac_env_gallium_LIBS_value"
+gallium_NONPKGCONFIG_LIBS="$ac_env_gallium_NONPKGCONFIG_LIBS_value"
+gallium_NONPKGCONFIG_EXTRA_LIBS="$ac_env_gallium_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$use_drm" = "xyes"; then
+
+# Check whether --with-gallium was given.
+if test "${with_gallium+set}" = set; then :
+  withval=$with_gallium; mesa_DIR="$withval"
+else
+  mesa_DIR="`pwd`/../mesa"
+fi
+
+      gallium_DIR="$mesa_DIR/src/gallium"
+      gallium_NONPKGCONFIG_CFLAGS="-I$mesa_DIR/include -I$mesa_DIR/src/mesa -I$gallium_DIR/include -I$gallium_DIR/auxiliary"
+      gallium_NONPKGCONFIG_LIBS="-lGL"
+
+
+  else
+    use_gallium="no (requires --enable-drm)"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Gallium3D surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Gallium3D surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_gallium" >&5
+$as_echo "$use_gallium" >&6; }
+
+               if test "x$enable_gallium" = "xyes" -a "x$use_gallium" != xyes; then :
+                       as_fn_error $? " Gallium3D surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-gallium: \`$use_gallium', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_gallium" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$gallium_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$gallium_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$gallium_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$gallium_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$gallium_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset gallium_BASE
+unset gallium_REQUIRES
+unset gallium_CFLAGS
+unset gallium_NONPKGCONFIG_CFLAGS
+unset gallium_LIBS
+unset gallium_NONPKGCONFIG_LIBS
+unset gallium_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_gallium" = xyes; then
+  CAIRO_HAS_GALLIUM_SURFACE_TRUE=
+  CAIRO_HAS_GALLIUM_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_GALLIUM_SURFACE_TRUE='#'
+  CAIRO_HAS_GALLIUM_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_GALLIUM_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_gallium_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_gallium_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_gallium_headers)
+all_cairo_private += $(cairo_gallium_private)
+all_cairo_cxx_sources += $(cairo_gallium_cxx_sources)
+all_cairo_sources += $(cairo_gallium_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_gallium_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_gallium_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gallium_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_gallium_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_gallium_headers)
+enabled_cairo_private += $(cairo_gallium_private)
+enabled_cairo_cxx_sources += $(cairo_gallium_cxx_sources)
+enabled_cairo_sources += $(cairo_gallium_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GALLIUM_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GALLIUM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_gallium_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_gallium_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gallium_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_gallium_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_GALLIUM_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_GALLIUM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_gallium" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-gallium.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_gallium" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-gallium-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-gallium.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-gallium.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GALLIUM_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GALLIUM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_gallium" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_GALLIUM_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_GALLIUM_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_GALLIUM_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_gallium" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The Gallium3D surface backend feature is still under active development
+--- and is included in this release only as a preview. It does NOT fully work
+--- yet and incompatible changes may yet be made to Gallium3D surface backend
+--- specific API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-png was given.
+if test "${enable_png+set}" = set; then :
+  enableval=$enable_png; enable_png=$enableval
+else
+  enable_png=yes
+fi
+
+                       case $enable_png in #(
+  no) :
+               use_png="no (disabled, use --enable-png to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's PNG functions feature" >&5
+$as_echo_n "checking for cairo's PNG functions feature... " >&6; }
+               echo
+
+               use_png=yes
+                       png_BASE="cairo"
+png_REQUIRES="$ac_env_png_REQUIRES_value"
+png_CFLAGS="$ac_env_png_CFLAGS_value"
+png_NONPKGCONFIG_CFLAGS="$ac_env_png_NONPKGCONFIG_CFLAGS_value"
+png_LIBS="$ac_env_png_LIBS_value"
+png_NONPKGCONFIG_LIBS="$ac_env_png_NONPKGCONFIG_LIBS_value"
+png_NONPKGCONFIG_EXTRA_LIBS="$ac_env_png_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  use_png=no
+
+  if test "x$png_REQUIRES" = x; then
+    # libpng13 is GnuWin32's libpng-1.2.8 :-(
+    for l in libpng libpng14 libpng12 libpng13 libpng10; do
+      if $PKG_CONFIG --exists $l ; then
+        png_REQUIRES=$l
+        use_png=yes
+        break
+      fi
+    done
+  else
+    use_png=yes
+  fi
+
+  if test "x$use_png" = "xyes" ; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for png" >&5
+$as_echo_n "checking for png... " >&6; }
+
+if test -n "$png_CFLAGS"; then
+    pkg_cv_png_CFLAGS="$png_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$png_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$png_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_png_CFLAGS=`$PKG_CONFIG --cflags "$png_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$png_LIBS"; then
+    pkg_cv_png_LIBS="$png_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$png_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$png_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_png_LIBS=`$PKG_CONFIG --libs "$png_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               png_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$png_REQUIRES" 2>&1`
+        else
+               png_PKG_ERRORS=`$PKG_CONFIG --print-errors "$png_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$png_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+       png_CFLAGS=$pkg_cv_png_CFLAGS
+       png_LIBS=$pkg_cv_png_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find libpng in the pkg-config search path" >&5
+$as_echo "$as_me: WARNING: Could not find libpng in the pkg-config search path" >&2;}
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's PNG functions feature could be enabled" >&5
+$as_echo_n "checking whether cairo's PNG functions feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_png" >&5
+$as_echo "$use_png" >&6; }
+
+               if test "x$enable_png" = "xyes" -a "x$use_png" != xyes; then :
+                       as_fn_error $? "recommended PNG functions feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-png: \`$use_png', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_png" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$png_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$png_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$png_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$png_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$png_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset png_BASE
+unset png_REQUIRES
+unset png_CFLAGS
+unset png_NONPKGCONFIG_CFLAGS
+unset png_LIBS
+unset png_NONPKGCONFIG_LIBS
+unset png_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_png" = xyes; then
+  CAIRO_HAS_PNG_FUNCTIONS_TRUE=
+  CAIRO_HAS_PNG_FUNCTIONS_FALSE='#'
+else
+  CAIRO_HAS_PNG_FUNCTIONS_TRUE='#'
+  CAIRO_HAS_PNG_FUNCTIONS_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_PNG_FUNCTIONS=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_png_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_png_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_png_headers)
+all_cairo_private += $(cairo_png_private)
+all_cairo_cxx_sources += $(cairo_png_cxx_sources)
+all_cairo_sources += $(cairo_png_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_png_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_png_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_png_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_png_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_png_headers)
+enabled_cairo_private += $(cairo_png_private)
+enabled_cairo_cxx_sources += $(cairo_png_cxx_sources)
+enabled_cairo_sources += $(cairo_png_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_PNG_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_PNG_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_png_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_png_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_png_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_png_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_PNG_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_PNG_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_png" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-png.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_png" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-png-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-png.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-png.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_PNG_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_PNG_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_png" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_PNG_FUNCTIONS'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_PNG_FUNCTIONS'
+
+
+
+                                       if test "x$use_png" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_PNG_FUNCTIONS'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_PNG_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_PNG_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+                                       if test "x$use_png" != xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'+++ It is strongly recommended that you do NOT disable the PNG functions
++++ feature.'
+
+
+
+fi
+
+
+
+
+                                                                                                                               # Check whether --enable-gl was given.
+if test "${enable_gl+set}" = set; then :
+  enableval=$enable_gl; enable_gl=$enableval
+else
+  enable_gl=no
+fi
+
+                       case $enable_gl in #(
+  no) :
+               use_gl="no (disabled, use --enable-gl to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's OpenGL surface backend feature" >&5
+$as_echo_n "checking for cairo's OpenGL surface backend feature... " >&6; }
+               echo
+
+               use_gl=yes
+                       gl_BASE="cairo"
+gl_REQUIRES="$ac_env_gl_REQUIRES_value"
+gl_CFLAGS="$ac_env_gl_CFLAGS_value"
+gl_NONPKGCONFIG_CFLAGS="$ac_env_gl_NONPKGCONFIG_CFLAGS_value"
+gl_LIBS="$ac_env_gl_LIBS_value"
+gl_NONPKGCONFIG_LIBS="$ac_env_gl_NONPKGCONFIG_LIBS_value"
+gl_NONPKGCONFIG_EXTRA_LIBS="$ac_env_gl_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  gl_REQUIRES="gl"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gl" >&5
+$as_echo_n "checking for gl... " >&6; }
+
+if test -n "$gl_CFLAGS"; then
+    pkg_cv_gl_CFLAGS="$gl_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gl_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$gl_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_gl_CFLAGS=`$PKG_CONFIG --cflags "$gl_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$gl_LIBS"; then
+    pkg_cv_gl_LIBS="$gl_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gl_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$gl_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_gl_LIBS=`$PKG_CONFIG --libs "$gl_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               gl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$gl_REQUIRES" 2>&1`
+        else
+               gl_PKG_ERRORS=`$PKG_CONFIG --print-errors "$gl_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$gl_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+                 ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
+if test "x$ac_cv_header_GL_gl_h" = x""yes; then :
+
+else
+  use_gl="no (gl.pc nor OpenGL headers not found)"
+fi
+
+
+         if test "x$use_gl" = "xyes"; then
+             gl_NONPKGCONFIG_CFLAGS=
+             gl_NONPKGCONFIG_LIBS="-lGL"
+         fi
+elif test $pkg_failed = untried; then
+
+                 ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
+if test "x$ac_cv_header_GL_gl_h" = x""yes; then :
+
+else
+  use_gl="no (gl.pc nor OpenGL headers not found)"
+fi
+
+
+         if test "x$use_gl" = "xyes"; then
+             gl_NONPKGCONFIG_CFLAGS=
+             gl_NONPKGCONFIG_LIBS="-lGL"
+         fi
+else
+       gl_CFLAGS=$pkg_cv_gl_CFLAGS
+       gl_LIBS=$pkg_cv_gl_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+  if test "x$have_dl" = "xyes" -a "x$have_dlsym" = "xyes"; then
+    gl_LIBS="$gl_LIBS -ldl"
+  fi
+
+  need_glx_functions=yes
+  need_wgl_functions=yes
+  need_egl_functions=yes
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's OpenGL surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's OpenGL surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_gl" >&5
+$as_echo "$use_gl" >&6; }
+
+               if test "x$enable_gl" = "xyes" -a "x$use_gl" != xyes; then :
+                       as_fn_error $? " OpenGL surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-gl: \`$use_gl', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_gl" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$gl_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$gl_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$gl_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$gl_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$gl_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset gl_BASE
+unset gl_REQUIRES
+unset gl_CFLAGS
+unset gl_NONPKGCONFIG_CFLAGS
+unset gl_LIBS
+unset gl_NONPKGCONFIG_LIBS
+unset gl_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_gl" = xyes; then
+  CAIRO_HAS_GL_SURFACE_TRUE=
+  CAIRO_HAS_GL_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_GL_SURFACE_TRUE='#'
+  CAIRO_HAS_GL_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_GL_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_gl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_gl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_gl_headers)
+all_cairo_private += $(cairo_gl_private)
+all_cairo_cxx_sources += $(cairo_gl_cxx_sources)
+all_cairo_sources += $(cairo_gl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_gl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_gl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_gl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_gl_headers)
+enabled_cairo_private += $(cairo_gl_private)
+enabled_cairo_cxx_sources += $(cairo_gl_cxx_sources)
+enabled_cairo_sources += $(cairo_gl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GL_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_gl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_gl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_gl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_GL_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_GL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_gl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-gl.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_gl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-gl-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-gl.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-gl.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GL_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_gl" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_GL_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_GL_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_GL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_gl" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The OpenGL surface backend feature is still under active development and
+--- is included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to OpenGL surface backend
+--- specific API.'
+
+
+
+fi
+
+
+
+
+
+                                                                                                                               # Check whether --enable-glesv2 was given.
+if test "${enable_glesv2+set}" = set; then :
+  enableval=$enable_glesv2; enable_glesv2=$enableval
+else
+  enable_glesv2=no
+fi
+
+                       case $enable_glesv2 in #(
+  no) :
+               use_glesv2="no (disabled, use --enable-glesv2 to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's OpenGLESv2 surface backend feature" >&5
+$as_echo_n "checking for cairo's OpenGLESv2 surface backend feature... " >&6; }
+               echo
+
+               use_glesv2=yes
+                       glesv2_BASE="cairo"
+glesv2_REQUIRES="$ac_env_glesv2_REQUIRES_value"
+glesv2_CFLAGS="$ac_env_glesv2_CFLAGS_value"
+glesv2_NONPKGCONFIG_CFLAGS="$ac_env_glesv2_NONPKGCONFIG_CFLAGS_value"
+glesv2_LIBS="$ac_env_glesv2_LIBS_value"
+glesv2_NONPKGCONFIG_LIBS="$ac_env_glesv2_NONPKGCONFIG_LIBS_value"
+glesv2_NONPKGCONFIG_EXTRA_LIBS="$ac_env_glesv2_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  glesv2_REQUIRES="gles20"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glesv2" >&5
+$as_echo_n "checking for glesv2... " >&6; }
+
+if test -n "$glesv2_CFLAGS"; then
+    pkg_cv_glesv2_CFLAGS="$glesv2_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$glesv2_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$glesv2_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_glesv2_CFLAGS=`$PKG_CONFIG --cflags "$glesv2_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$glesv2_LIBS"; then
+    pkg_cv_glesv2_LIBS="$glesv2_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$glesv2_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$glesv2_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_glesv2_LIBS=`$PKG_CONFIG --libs "$glesv2_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               glesv2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$glesv2_REQUIRES" 2>&1`
+        else
+               glesv2_PKG_ERRORS=`$PKG_CONFIG --print-errors "$glesv2_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$glesv2_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+                 ac_fn_c_check_header_mongrel "$LINENO" "GLES2/gl2.h" "ac_cv_header_GLES2_gl2_h" "$ac_includes_default"
+if test "x$ac_cv_header_GLES2_gl2_h" = x""yes; then :
+
+else
+  use_glesv2="no (glesv2.pc nor OpenGL ES 2.0 headers not found)"
+fi
+
+
+         if test "x$use_glesv2" = "xyes"; then
+             glesv2_NONPKGCONFIG_CFLAGS=
+             glesv2_NONPKGCONFIG_LIBS="-lGLESv2"
+         fi
+elif test $pkg_failed = untried; then
+
+                 ac_fn_c_check_header_mongrel "$LINENO" "GLES2/gl2.h" "ac_cv_header_GLES2_gl2_h" "$ac_includes_default"
+if test "x$ac_cv_header_GLES2_gl2_h" = x""yes; then :
+
+else
+  use_glesv2="no (glesv2.pc nor OpenGL ES 2.0 headers not found)"
+fi
+
+
+         if test "x$use_glesv2" = "xyes"; then
+             glesv2_NONPKGCONFIG_CFLAGS=
+             glesv2_NONPKGCONFIG_LIBS="-lGLESv2"
+         fi
+else
+       glesv2_CFLAGS=$pkg_cv_glesv2_CFLAGS
+       glesv2_LIBS=$pkg_cv_glesv2_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+  if test "x$have_dl" = "xyes" -a "x$have_dlsym" = "xyes"; then
+    glesv2_LIBS="$glesv2_LIBS -ldl"
+  fi
+
+  need_egl_functions=yes
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's OpenGLESv2 surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's OpenGLESv2 surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_glesv2" >&5
+$as_echo "$use_glesv2" >&6; }
+
+               if test "x$enable_glesv2" = "xyes" -a "x$use_glesv2" != xyes; then :
+                       as_fn_error $? " OpenGLESv2 surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-glesv2: \`$use_glesv2', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_glesv2" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$glesv2_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$glesv2_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$glesv2_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$glesv2_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$glesv2_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset glesv2_BASE
+unset glesv2_REQUIRES
+unset glesv2_CFLAGS
+unset glesv2_NONPKGCONFIG_CFLAGS
+unset glesv2_LIBS
+unset glesv2_NONPKGCONFIG_LIBS
+unset glesv2_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_glesv2" = xyes; then
+  CAIRO_HAS_GLESV2_SURFACE_TRUE=
+  CAIRO_HAS_GLESV2_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_GLESV2_SURFACE_TRUE='#'
+  CAIRO_HAS_GLESV2_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_GLESV2_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_glesv2_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_glesv2_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_glesv2_headers)
+all_cairo_private += $(cairo_glesv2_private)
+all_cairo_cxx_sources += $(cairo_glesv2_cxx_sources)
+all_cairo_sources += $(cairo_glesv2_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_glesv2_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_glesv2_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glesv2_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_glesv2_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_glesv2_headers)
+enabled_cairo_private += $(cairo_glesv2_private)
+enabled_cairo_cxx_sources += $(cairo_glesv2_cxx_sources)
+enabled_cairo_sources += $(cairo_glesv2_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GLESV2_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_glesv2_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_glesv2_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glesv2_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_glesv2_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_GLESV2_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_glesv2" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-glesv2.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_glesv2" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-glesv2-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-glesv2.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-glesv2.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GLESV2_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_glesv2" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_GLESV2_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_GLESV2_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_glesv2" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The OpenGLESv2 surface backend feature is still under active development
+--- and is included in this release only as a preview. It does NOT fully work
+--- yet and incompatible changes may yet be made to OpenGLESv2 surface
+--- backend specific API.'
+
+
+
+fi
+
+
+
+
+
+                                                                                                                               # Check whether --enable-cogl was given.
+if test "${enable_cogl+set}" = set; then :
+  enableval=$enable_cogl; enable_cogl=$enableval
+else
+  enable_cogl=no
+fi
+
+                       case $enable_cogl in #(
+  no) :
+               use_cogl="no (disabled, use --enable-cogl to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Cogl surface backend feature" >&5
+$as_echo_n "checking for cairo's Cogl surface backend feature... " >&6; }
+               echo
+
+               use_cogl=yes
+                       cogl_BASE="cairo"
+cogl_REQUIRES="$ac_env_cogl_REQUIRES_value"
+cogl_CFLAGS="$ac_env_cogl_CFLAGS_value"
+cogl_NONPKGCONFIG_CFLAGS="$ac_env_cogl_NONPKGCONFIG_CFLAGS_value"
+cogl_LIBS="$ac_env_cogl_LIBS_value"
+cogl_NONPKGCONFIG_LIBS="$ac_env_cogl_NONPKGCONFIG_LIBS_value"
+cogl_NONPKGCONFIG_EXTRA_LIBS="$ac_env_cogl_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  cogl_REQUIRES="cogl-2.0-experimental"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cogl" >&5
+$as_echo_n "checking for cogl... " >&6; }
+
+if test -n "$cogl_CFLAGS"; then
+    pkg_cv_cogl_CFLAGS="$cogl_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$cogl_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$cogl_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_cogl_CFLAGS=`$PKG_CONFIG --cflags "$cogl_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$cogl_LIBS"; then
+    pkg_cv_cogl_LIBS="$cogl_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$cogl_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$cogl_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_cogl_LIBS=`$PKG_CONFIG --libs "$cogl_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               cogl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$cogl_REQUIRES" 2>&1`
+        else
+               cogl_PKG_ERRORS=`$PKG_CONFIG --print-errors "$cogl_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$cogl_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                use_cogl="no"
+elif test $pkg_failed = untried; then
+       use_cogl="no"
+else
+       cogl_CFLAGS=$pkg_cv_cogl_CFLAGS
+       cogl_LIBS=$pkg_cv_cogl_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Cogl surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Cogl surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_cogl" >&5
+$as_echo "$use_cogl" >&6; }
+
+               if test "x$enable_cogl" = "xyes" -a "x$use_cogl" != xyes; then :
+                       as_fn_error $? " Cogl surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-cogl: \`$use_cogl', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_cogl" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$cogl_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$cogl_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$cogl_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$cogl_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$cogl_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset cogl_BASE
+unset cogl_REQUIRES
+unset cogl_CFLAGS
+unset cogl_NONPKGCONFIG_CFLAGS
+unset cogl_LIBS
+unset cogl_NONPKGCONFIG_LIBS
+unset cogl_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_cogl" = xyes; then
+  CAIRO_HAS_COGL_SURFACE_TRUE=
+  CAIRO_HAS_COGL_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_COGL_SURFACE_TRUE='#'
+  CAIRO_HAS_COGL_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_COGL_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_cogl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_cogl_headers)
+all_cairo_private += $(cairo_cogl_private)
+all_cairo_cxx_sources += $(cairo_cogl_cxx_sources)
+all_cairo_sources += $(cairo_cogl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_cogl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_cogl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_cogl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_cogl_headers)
+enabled_cairo_private += $(cairo_cogl_private)
+enabled_cairo_cxx_sources += $(cairo_cogl_cxx_sources)
+enabled_cairo_sources += $(cairo_cogl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_COGL_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_COGL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_cogl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_cogl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_cogl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_COGL_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_COGL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_cogl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-cogl.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_cogl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-cogl-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-cogl.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-cogl.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_COGL_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_COGL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_cogl" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_COGL_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_COGL_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_COGL_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_cogl" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The Cogl surface backend feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to Cogl surface backend specific
+--- API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-directfb was given.
+if test "${enable_directfb+set}" = set; then :
+  enableval=$enable_directfb; enable_directfb=$enableval
+else
+  enable_directfb=no
+fi
+
+                       case $enable_directfb in #(
+  no) :
+               use_directfb="no (disabled, use --enable-directfb to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's directfb surface backend feature" >&5
+$as_echo_n "checking for cairo's directfb surface backend feature... " >&6; }
+               echo
+
+               use_directfb=yes
+                       directfb_BASE="cairo"
+directfb_REQUIRES="$ac_env_directfb_REQUIRES_value"
+directfb_CFLAGS="$ac_env_directfb_CFLAGS_value"
+directfb_NONPKGCONFIG_CFLAGS="$ac_env_directfb_NONPKGCONFIG_CFLAGS_value"
+directfb_LIBS="$ac_env_directfb_LIBS_value"
+directfb_NONPKGCONFIG_LIBS="$ac_env_directfb_NONPKGCONFIG_LIBS_value"
+directfb_NONPKGCONFIG_EXTRA_LIBS="$ac_env_directfb_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  directfb_REQUIRES=directfb
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for directfb" >&5
+$as_echo_n "checking for directfb... " >&6; }
+
+if test -n "$directfb_CFLAGS"; then
+    pkg_cv_directfb_CFLAGS="$directfb_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$directfb_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$directfb_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_directfb_CFLAGS=`$PKG_CONFIG --cflags "$directfb_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$directfb_LIBS"; then
+    pkg_cv_directfb_LIBS="$directfb_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$directfb_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$directfb_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_directfb_LIBS=`$PKG_CONFIG --libs "$directfb_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               directfb_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$directfb_REQUIRES" 2>&1`
+        else
+               directfb_PKG_ERRORS=`$PKG_CONFIG --print-errors "$directfb_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$directfb_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                   use_directfb="no (requires $directfb_REQUIRES http://www.directfb.org)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                   use_directfb="no (requires $directfb_REQUIRES http://www.directfb.org)"
+else
+       directfb_CFLAGS=$pkg_cv_directfb_CFLAGS
+       directfb_LIBS=$pkg_cv_directfb_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's directfb surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's directfb surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_directfb" >&5
+$as_echo "$use_directfb" >&6; }
+
+               if test "x$enable_directfb" = "xyes" -a "x$use_directfb" != xyes; then :
+                       as_fn_error $? " directfb surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-directfb: \`$use_directfb', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_directfb" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$directfb_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$directfb_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$directfb_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$directfb_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$directfb_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset directfb_BASE
+unset directfb_REQUIRES
+unset directfb_CFLAGS
+unset directfb_NONPKGCONFIG_CFLAGS
+unset directfb_LIBS
+unset directfb_NONPKGCONFIG_LIBS
+unset directfb_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_directfb" = xyes; then
+  CAIRO_HAS_DIRECTFB_SURFACE_TRUE=
+  CAIRO_HAS_DIRECTFB_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_DIRECTFB_SURFACE_TRUE='#'
+  CAIRO_HAS_DIRECTFB_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_DIRECTFB_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_directfb_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_directfb_headers)
+all_cairo_private += $(cairo_directfb_private)
+all_cairo_cxx_sources += $(cairo_directfb_cxx_sources)
+all_cairo_sources += $(cairo_directfb_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_directfb_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_directfb_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_directfb_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_directfb_headers)
+enabled_cairo_private += $(cairo_directfb_private)
+enabled_cairo_cxx_sources += $(cairo_directfb_cxx_sources)
+enabled_cairo_sources += $(cairo_directfb_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_DIRECTFB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_DIRECTFB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_directfb_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_directfb_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_directfb_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_DIRECTFB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_DIRECTFB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_directfb" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-directfb.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_directfb" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-directfb-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-directfb.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-directfb.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_DIRECTFB_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_DIRECTFB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_directfb" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_DIRECTFB_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_DIRECTFB_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_DIRECTFB_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_directfb" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The directfb surface backend feature is still under active development
+--- and is included in this release only as a preview. It does NOT fully work
+--- yet and incompatible changes may yet be made to directfb surface backend
+--- specific API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-vg was given.
+if test "${enable_vg+set}" = set; then :
+  enableval=$enable_vg; enable_vg=$enableval
+else
+  enable_vg=no
+fi
+
+                       case $enable_vg in #(
+  no) :
+               use_vg="no (disabled, use --enable-vg to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's OpenVG surface backend feature" >&5
+$as_echo_n "checking for cairo's OpenVG surface backend feature... " >&6; }
+               echo
+
+               use_vg=yes
+                       vg_BASE="cairo"
+vg_REQUIRES="$ac_env_vg_REQUIRES_value"
+vg_CFLAGS="$ac_env_vg_CFLAGS_value"
+vg_NONPKGCONFIG_CFLAGS="$ac_env_vg_NONPKGCONFIG_CFLAGS_value"
+vg_LIBS="$ac_env_vg_LIBS_value"
+vg_NONPKGCONFIG_LIBS="$ac_env_vg_NONPKGCONFIG_LIBS_value"
+vg_NONPKGCONFIG_EXTRA_LIBS="$ac_env_vg_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+    ac_fn_c_check_header_mongrel "$LINENO" "VG/openvg.h" "ac_cv_header_VG_openvg_h" "$ac_includes_default"
+if test "x$ac_cv_header_VG_openvg_h" = x""yes; then :
+
+else
+  use_vg="no (OpenVG headers not found)"
+fi
+
+
+  if test "x$use_vg" = "xyes"; then
+      vg_NONPKGCONFIG_CFLAGS=
+      vg_NONPKGCONFIG_LIBS="-lOpenVG"
+      need_egl_functions=yes
+      need_glx_functions=yes
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's OpenVG surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's OpenVG surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_vg" >&5
+$as_echo "$use_vg" >&6; }
+
+               if test "x$enable_vg" = "xyes" -a "x$use_vg" != xyes; then :
+                       as_fn_error $? " OpenVG surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-vg: \`$use_vg', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_vg" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$vg_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$vg_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$vg_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$vg_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$vg_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset vg_BASE
+unset vg_REQUIRES
+unset vg_CFLAGS
+unset vg_NONPKGCONFIG_CFLAGS
+unset vg_LIBS
+unset vg_NONPKGCONFIG_LIBS
+unset vg_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_vg" = xyes; then
+  CAIRO_HAS_VG_SURFACE_TRUE=
+  CAIRO_HAS_VG_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_VG_SURFACE_TRUE='#'
+  CAIRO_HAS_VG_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_VG_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_vg_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_vg_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_vg_headers)
+all_cairo_private += $(cairo_vg_private)
+all_cairo_cxx_sources += $(cairo_vg_cxx_sources)
+all_cairo_sources += $(cairo_vg_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_vg_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_vg_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_vg_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_vg_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_vg_headers)
+enabled_cairo_private += $(cairo_vg_private)
+enabled_cairo_cxx_sources += $(cairo_vg_cxx_sources)
+enabled_cairo_sources += $(cairo_vg_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_VG_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_VG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_vg_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_vg_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_vg_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_vg_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_VG_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_VG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_vg" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-vg.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_vg" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-vg-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-vg.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-vg.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_VG_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_VG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_vg" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_VG_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_VG_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_VG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_vg" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The OpenVG surface backend feature is still under active development and
+--- is included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to OpenVG surface backend
+--- specific API.'
+
+
+
+fi
+
+
+
+
+
+                                                                                                                               # Check whether --enable-egl was given.
+if test "${enable_egl+set}" = set; then :
+  enableval=$enable_egl; enable_egl=$enableval
+else
+  enable_egl=auto
+fi
+
+                       case $enable_egl in #(
+  no) :
+               use_egl="no (disabled, use --enable-egl to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's EGL functions feature" >&5
+$as_echo_n "checking for cairo's EGL functions feature... " >&6; }
+               echo
+
+               use_egl=yes
+                       egl_BASE="cairo"
+egl_REQUIRES="$ac_env_egl_REQUIRES_value"
+egl_CFLAGS="$ac_env_egl_CFLAGS_value"
+egl_NONPKGCONFIG_CFLAGS="$ac_env_egl_NONPKGCONFIG_CFLAGS_value"
+egl_LIBS="$ac_env_egl_LIBS_value"
+egl_NONPKGCONFIG_LIBS="$ac_env_egl_NONPKGCONFIG_LIBS_value"
+egl_NONPKGCONFIG_EXTRA_LIBS="$ac_env_egl_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$need_egl_functions" = "xyes"; then
+      egl_REQUIRES="egl"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egl" >&5
+$as_echo_n "checking for egl... " >&6; }
+
+if test -n "$egl_CFLAGS"; then
+    pkg_cv_egl_CFLAGS="$egl_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$egl_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$egl_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_egl_CFLAGS=`$PKG_CONFIG --cflags "$egl_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$egl_LIBS"; then
+    pkg_cv_egl_LIBS="$egl_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$egl_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$egl_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_egl_LIBS=`$PKG_CONFIG --libs "$egl_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               egl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$egl_REQUIRES" 2>&1`
+        else
+               egl_PKG_ERRORS=`$PKG_CONFIG --print-errors "$egl_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$egl_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                egl_REQUIRES=""
+                    ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default"
+if test "x$ac_cv_header_EGL_egl_h" = x""yes; then :
+
+else
+  use_egl="no (EGL headers not found)"
+fi
+
+
+                    if test "x$use_egl" = "xyes"; then
+                        egl_NONPKGCONFIG_CFLAGS=
+                        egl_NONPKGCONFIG_LIBS=
+                        save_LIBS="$LIBS"
+                        other_egl_LIBS=""
+                        # Temporary workaround for missing link from egl13
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for csi_stream_attachresource in -lcsi" >&5
+$as_echo_n "checking for csi_stream_attachresource in -lcsi... " >&6; }
+if test "${ac_cv_lib_csi_csi_stream_attachresource+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcsi  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char csi_stream_attachresource ();
+int
+main ()
+{
+return csi_stream_attachresource ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_csi_csi_stream_attachresource=yes
+else
+  ac_cv_lib_csi_csi_stream_attachresource=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_csi_csi_stream_attachresource" >&5
+$as_echo "$ac_cv_lib_csi_csi_stream_attachresource" >&6; }
+if test "x$ac_cv_lib_csi_csi_stream_attachresource" = x""yes; then :
+  other_egl_LIBS="-lcsi"
+fi
+
+                        LIBS="$other_egl_LIBS $LIBS"
+                        for egl_lib in EGL egl13 egl12 egl11; do
+                            if test -z "$egl_NONPKGCONFIG_LIBS"; then
+                                as_ac_Lib=`$as_echo "ac_cv_lib_$egl_lib''_eglGetError" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetError in -l$egl_lib" >&5
+$as_echo_n "checking for eglGetError in -l$egl_lib... " >&6; }
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$egl_lib  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char eglGetError ();
+int
+main ()
+{
+return eglGetError ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$as_ac_Lib=yes"
+else
+  eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  egl_NONPKGCONFIG_LIBS="-l$egl_lib"
+fi
+
+                            fi
+                        done
+                        if test -z "$egl_NONPKGCONFIG_LIBS"; then
+                            use_egl="no (EGL library not found)"
+                        else
+                            egl_NONPKGCONFIG_LIBS="$egl_NONPKGCONFIG_LIBS $other_egl_LIBS"
+                        fi
+                        LIBS="$save_LIBS"
+                    fi
+
+elif test $pkg_failed = untried; then
+       egl_REQUIRES=""
+                    ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default"
+if test "x$ac_cv_header_EGL_egl_h" = x""yes; then :
+
+else
+  use_egl="no (EGL headers not found)"
+fi
+
+
+                    if test "x$use_egl" = "xyes"; then
+                        egl_NONPKGCONFIG_CFLAGS=
+                        egl_NONPKGCONFIG_LIBS=
+                        save_LIBS="$LIBS"
+                        other_egl_LIBS=""
+                        # Temporary workaround for missing link from egl13
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for csi_stream_attachresource in -lcsi" >&5
+$as_echo_n "checking for csi_stream_attachresource in -lcsi... " >&6; }
+if test "${ac_cv_lib_csi_csi_stream_attachresource+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcsi  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char csi_stream_attachresource ();
+int
+main ()
+{
+return csi_stream_attachresource ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_csi_csi_stream_attachresource=yes
+else
+  ac_cv_lib_csi_csi_stream_attachresource=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_csi_csi_stream_attachresource" >&5
+$as_echo "$ac_cv_lib_csi_csi_stream_attachresource" >&6; }
+if test "x$ac_cv_lib_csi_csi_stream_attachresource" = x""yes; then :
+  other_egl_LIBS="-lcsi"
+fi
+
+                        LIBS="$other_egl_LIBS $LIBS"
+                        for egl_lib in EGL egl13 egl12 egl11; do
+                            if test -z "$egl_NONPKGCONFIG_LIBS"; then
+                                as_ac_Lib=`$as_echo "ac_cv_lib_$egl_lib''_eglGetError" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetError in -l$egl_lib" >&5
+$as_echo_n "checking for eglGetError in -l$egl_lib... " >&6; }
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$egl_lib  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char eglGetError ();
+int
+main ()
+{
+return eglGetError ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$as_ac_Lib=yes"
+else
+  eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  egl_NONPKGCONFIG_LIBS="-l$egl_lib"
+fi
+
+                            fi
+                        done
+                        if test -z "$egl_NONPKGCONFIG_LIBS"; then
+                            use_egl="no (EGL library not found)"
+                        else
+                            egl_NONPKGCONFIG_LIBS="$egl_NONPKGCONFIG_LIBS $other_egl_LIBS"
+                        fi
+                        LIBS="$save_LIBS"
+                    fi
+
+else
+       egl_CFLAGS=$pkg_cv_egl_CFLAGS
+       egl_LIBS=$pkg_cv_egl_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  else
+      use_egl="no (not required by any backend)"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's EGL functions feature could be enabled" >&5
+$as_echo_n "checking whether cairo's EGL functions feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_egl" >&5
+$as_echo "$use_egl" >&6; }
+
+               if test "x$enable_egl" = "xyes" -a "x$use_egl" != xyes; then :
+                       as_fn_error $? " EGL functions feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-egl: \`$use_egl', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_egl" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$egl_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$egl_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$egl_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$egl_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$egl_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset egl_BASE
+unset egl_REQUIRES
+unset egl_CFLAGS
+unset egl_NONPKGCONFIG_CFLAGS
+unset egl_LIBS
+unset egl_NONPKGCONFIG_LIBS
+unset egl_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_egl" = xyes; then
+  CAIRO_HAS_EGL_FUNCTIONS_TRUE=
+  CAIRO_HAS_EGL_FUNCTIONS_FALSE='#'
+else
+  CAIRO_HAS_EGL_FUNCTIONS_TRUE='#'
+  CAIRO_HAS_EGL_FUNCTIONS_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_EGL_FUNCTIONS=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_egl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_egl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_egl_headers)
+all_cairo_private += $(cairo_egl_private)
+all_cairo_cxx_sources += $(cairo_egl_cxx_sources)
+all_cairo_sources += $(cairo_egl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_egl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_egl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_egl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_egl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_egl_headers)
+enabled_cairo_private += $(cairo_egl_private)
+enabled_cairo_cxx_sources += $(cairo_egl_cxx_sources)
+enabled_cairo_sources += $(cairo_egl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_EGL_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_EGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_egl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_egl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_egl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_egl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_EGL_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_EGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_egl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-egl.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_egl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-egl-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-egl.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-egl.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_EGL_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_EGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_egl" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_EGL_FUNCTIONS'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_EGL_FUNCTIONS'
+
+
+
+                                       if test "x$use_egl" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_EGL_FUNCTIONS'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_EGL_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_EGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-glx was given.
+if test "${enable_glx+set}" = set; then :
+  enableval=$enable_glx; enable_glx=$enableval
+else
+  enable_glx=auto
+fi
+
+                       case $enable_glx in #(
+  no) :
+               use_glx="no (disabled, use --enable-glx to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's GLX functions feature" >&5
+$as_echo_n "checking for cairo's GLX functions feature... " >&6; }
+               echo
+
+               use_glx=yes
+                       glx_BASE="cairo"
+glx_REQUIRES="$ac_env_glx_REQUIRES_value"
+glx_CFLAGS="$ac_env_glx_CFLAGS_value"
+glx_NONPKGCONFIG_CFLAGS="$ac_env_glx_NONPKGCONFIG_CFLAGS_value"
+glx_LIBS="$ac_env_glx_LIBS_value"
+glx_NONPKGCONFIG_LIBS="$ac_env_glx_NONPKGCONFIG_LIBS_value"
+glx_NONPKGCONFIG_EXTRA_LIBS="$ac_env_glx_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$need_glx_functions" = "xyes"; then
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $gl_CFLAGS $gl_NONPKGCONFIG_CFLAGS"
+    ac_fn_c_check_header_mongrel "$LINENO" "GL/glx.h" "ac_cv_header_GL_glx_h" "$ac_includes_default"
+if test "x$ac_cv_header_GL_glx_h" = x""yes; then :
+
+else
+  use_glx="no (GLX headers not found)"
+fi
+
+
+    glx_NONPKGCONFIG_CFLAGS=
+    glx_NONPKGCONFIG_LIBS="-lGL"
+    CFLAGS="$save_CFLAGS"
+  else
+      use_glx="no (not required by any backend)"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's GLX functions feature could be enabled" >&5
+$as_echo_n "checking whether cairo's GLX functions feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_glx" >&5
+$as_echo "$use_glx" >&6; }
+
+               if test "x$enable_glx" = "xyes" -a "x$use_glx" != xyes; then :
+                       as_fn_error $? " GLX functions feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-glx: \`$use_glx', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_glx" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$glx_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$glx_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$glx_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$glx_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$glx_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset glx_BASE
+unset glx_REQUIRES
+unset glx_CFLAGS
+unset glx_NONPKGCONFIG_CFLAGS
+unset glx_LIBS
+unset glx_NONPKGCONFIG_LIBS
+unset glx_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_glx" = xyes; then
+  CAIRO_HAS_GLX_FUNCTIONS_TRUE=
+  CAIRO_HAS_GLX_FUNCTIONS_FALSE='#'
+else
+  CAIRO_HAS_GLX_FUNCTIONS_TRUE='#'
+  CAIRO_HAS_GLX_FUNCTIONS_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_GLX_FUNCTIONS=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_glx_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_glx_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_glx_headers)
+all_cairo_private += $(cairo_glx_private)
+all_cairo_cxx_sources += $(cairo_glx_cxx_sources)
+all_cairo_sources += $(cairo_glx_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_glx_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_glx_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glx_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_glx_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_glx_headers)
+enabled_cairo_private += $(cairo_glx_private)
+enabled_cairo_cxx_sources += $(cairo_glx_cxx_sources)
+enabled_cairo_sources += $(cairo_glx_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GLX_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GLX_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_glx_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_glx_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glx_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_glx_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_GLX_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_GLX_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_glx" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-glx.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_glx" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-glx-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-glx.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-glx.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GLX_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GLX_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_glx" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_GLX_FUNCTIONS'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_GLX_FUNCTIONS'
+
+
+
+                                       if test "x$use_glx" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_GLX_FUNCTIONS'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_GLX_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_GLX_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-wgl was given.
+if test "${enable_wgl+set}" = set; then :
+  enableval=$enable_wgl; enable_wgl=$enableval
+else
+  enable_wgl=auto
+fi
+
+                       case $enable_wgl in #(
+  no) :
+               use_wgl="no (disabled, use --enable-wgl to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's WGL functions feature" >&5
+$as_echo_n "checking for cairo's WGL functions feature... " >&6; }
+               echo
+
+               use_wgl=yes
+                       wgl_BASE="cairo"
+wgl_REQUIRES="$ac_env_wgl_REQUIRES_value"
+wgl_CFLAGS="$ac_env_wgl_CFLAGS_value"
+wgl_NONPKGCONFIG_CFLAGS="$ac_env_wgl_NONPKGCONFIG_CFLAGS_value"
+wgl_LIBS="$ac_env_wgl_LIBS_value"
+wgl_NONPKGCONFIG_LIBS="$ac_env_wgl_NONPKGCONFIG_LIBS_value"
+wgl_NONPKGCONFIG_EXTRA_LIBS="$ac_env_wgl_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$need_wgl_functions" = "xyes"; then
+    ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
+if test "x$ac_cv_header_windows_h" = x""yes; then :
+
+else
+  use_wgl="no (WGL headers not found)"
+fi
+
+
+  else
+      use_wgl="no (not required by any backend)"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's WGL functions feature could be enabled" >&5
+$as_echo_n "checking whether cairo's WGL functions feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_wgl" >&5
+$as_echo "$use_wgl" >&6; }
+
+               if test "x$enable_wgl" = "xyes" -a "x$use_wgl" != xyes; then :
+                       as_fn_error $? " WGL functions feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-wgl: \`$use_wgl', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_wgl" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$wgl_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$wgl_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$wgl_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$wgl_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$wgl_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset wgl_BASE
+unset wgl_REQUIRES
+unset wgl_CFLAGS
+unset wgl_NONPKGCONFIG_CFLAGS
+unset wgl_LIBS
+unset wgl_NONPKGCONFIG_LIBS
+unset wgl_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_wgl" = xyes; then
+  CAIRO_HAS_WGL_FUNCTIONS_TRUE=
+  CAIRO_HAS_WGL_FUNCTIONS_FALSE='#'
+else
+  CAIRO_HAS_WGL_FUNCTIONS_TRUE='#'
+  CAIRO_HAS_WGL_FUNCTIONS_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_WGL_FUNCTIONS=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_wgl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_wgl_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_wgl_headers)
+all_cairo_private += $(cairo_wgl_private)
+all_cairo_cxx_sources += $(cairo_wgl_cxx_sources)
+all_cairo_sources += $(cairo_wgl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_wgl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_wgl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_wgl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_wgl_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_wgl_headers)
+enabled_cairo_private += $(cairo_wgl_private)
+enabled_cairo_cxx_sources += $(cairo_wgl_cxx_sources)
+enabled_cairo_sources += $(cairo_wgl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_WGL_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_WGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_wgl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_wgl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_wgl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_wgl_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_WGL_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_WGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_wgl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-wgl.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_wgl" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-wgl-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-wgl.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-wgl.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_WGL_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_WGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_wgl" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_WGL_FUNCTIONS'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_WGL_FUNCTIONS'
+
+
+
+                                       if test "x$use_wgl" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_WGL_FUNCTIONS'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_WGL_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_WGL_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+any2ppm_cs=no
+                                                                                                                               # Check whether --enable-script was given.
+if test "${enable_script+set}" = set; then :
+  enableval=$enable_script; enable_script=$enableval
+else
+  enable_script=yes
+fi
+
+                       case $enable_script in #(
+  no) :
+               use_script="no (disabled, use --enable-script to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's script surface backend feature" >&5
+$as_echo_n "checking for cairo's script surface backend feature... " >&6; }
+               echo
+
+               use_script=yes
+                       script_BASE="cairo"
+script_REQUIRES="$ac_env_script_REQUIRES_value"
+script_CFLAGS="$ac_env_script_CFLAGS_value"
+script_NONPKGCONFIG_CFLAGS="$ac_env_script_NONPKGCONFIG_CFLAGS_value"
+script_LIBS="$ac_env_script_LIBS_value"
+script_NONPKGCONFIG_LIBS="$ac_env_script_NONPKGCONFIG_LIBS_value"
+script_NONPKGCONFIG_EXTRA_LIBS="$ac_env_script_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  any2ppm_cs=yes
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's script surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's script surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_script" >&5
+$as_echo "$use_script" >&6; }
+
+               if test "x$enable_script" = "xyes" -a "x$use_script" != xyes; then :
+                       as_fn_error $? "recommended script surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-script: \`$use_script', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_script" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$script_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$script_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$script_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$script_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$script_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset script_BASE
+unset script_REQUIRES
+unset script_CFLAGS
+unset script_NONPKGCONFIG_CFLAGS
+unset script_LIBS
+unset script_NONPKGCONFIG_LIBS
+unset script_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_script" = xyes; then
+  CAIRO_HAS_SCRIPT_SURFACE_TRUE=
+  CAIRO_HAS_SCRIPT_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_SCRIPT_SURFACE_TRUE='#'
+  CAIRO_HAS_SCRIPT_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_SCRIPT_SURFACE=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_script_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_script_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_script_headers)
+all_cairo_private += $(cairo_script_private)
+all_cairo_cxx_sources += $(cairo_script_cxx_sources)
+all_cairo_sources += $(cairo_script_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_script_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_script_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_script_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_script_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_script_headers)
+enabled_cairo_private += $(cairo_script_private)
+enabled_cairo_cxx_sources += $(cairo_script_cxx_sources)
+enabled_cairo_sources += $(cairo_script_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_SCRIPT_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_SCRIPT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_script_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_script_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_script_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_script_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_SCRIPT_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_SCRIPT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_script" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-script.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_script" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-script-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-script.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-script.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_SCRIPT_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_SCRIPT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_script" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_SCRIPT_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_SCRIPT_SURFACE'
+
+
+
+                                       if test "x$use_script" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_SCRIPT_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_SCRIPT_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_SCRIPT_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+                                       if test "x$use_script" != xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'+++ It is strongly recommended that you do NOT disable the script surface
++++ backend feature.'
+
+
+
+fi
+
+
+
+
+
+# We use pkg-config to look for freetype2, but fall back to
+# freetype-config if it fails.  We prefer pkg-config, since we can
+# then just put freetype2 >= $FREETYPE_MIN_VERSION in
+# Requires.private, but at least up to 2003-06-07, there was no
+# freetype2.pc in the release.
+#
+# FreeType versions come in three forms:
+#   release (such as 2.1.9)
+#   libtool (such as 9.7.3) (returned by freetype-config and pkg-config)
+#   platform-specific/soname (such as 6.3.4)
+# and they recommend you never use the platform-specific version
+# (see docs/VERSION.DLL in freetype2 sources)
+#
+# Set these as appropriate:
+
+# release number - for information only
+FREETYPE_MIN_RELEASE=2.1.9
+# libtool-specific version - this is what is checked
+FREETYPE_MIN_VERSION=9.7.3
+
+                                                                                                                               # Check whether --enable-ft was given.
+if test "${enable_ft+set}" = set; then :
+  enableval=$enable_ft; enable_ft=$enableval
+else
+  enable_ft=auto
+fi
+
+                       case $enable_ft in #(
+  no) :
+               use_ft="no (disabled, use --enable-ft to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's FreeType font backend feature" >&5
+$as_echo_n "checking for cairo's FreeType font backend feature... " >&6; }
+               echo
+
+               use_ft=yes
+                       ft_BASE="cairo"
+ft_REQUIRES="$ac_env_ft_REQUIRES_value"
+ft_CFLAGS="$ac_env_ft_CFLAGS_value"
+ft_NONPKGCONFIG_CFLAGS="$ac_env_ft_NONPKGCONFIG_CFLAGS_value"
+ft_LIBS="$ac_env_ft_LIBS_value"
+ft_NONPKGCONFIG_LIBS="$ac_env_ft_NONPKGCONFIG_LIBS_value"
+ft_NONPKGCONFIG_EXTRA_LIBS="$ac_env_ft_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5
+$as_echo_n "checking for FREETYPE... " >&6; }
+
+if test -n "$FREETYPE_CFLAGS"; then
+    pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= \$FREETYPE_MIN_VERSION\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2 >= $FREETYPE_MIN_VERSION") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2 >= $FREETYPE_MIN_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$FREETYPE_LIBS"; then
+    pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= \$FREETYPE_MIN_VERSION\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2 >= $FREETYPE_MIN_VERSION") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2 >= $FREETYPE_MIN_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2 >= $FREETYPE_MIN_VERSION" 2>&1`
+        else
+               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2 >= $FREETYPE_MIN_VERSION" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$FREETYPE_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                      freetype_pkgconfig=no
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                      freetype_pkgconfig=no
+else
+       FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS
+       FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       freetype_pkgconfig=yes
+fi
+
+    if test "x$freetype_pkgconfig" = "xyes"; then
+      ft_REQUIRES="freetype2 >= $FREETYPE_MIN_VERSION $ft_REQUIRES"
+    else
+
+      if test -z "$FREETYPE_CONFIG"; then
+        # Extract the first word of "freetype-config", so it can be a program name with args.
+set dummy freetype-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_FREETYPE_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $FREETYPE_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_FREETYPE_CONFIG="$FREETYPE_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_FREETYPE_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_FREETYPE_CONFIG" && ac_cv_path_FREETYPE_CONFIG="no"
+  ;;
+esac
+fi
+FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG
+if test -n "$FREETYPE_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_CONFIG" >&5
+$as_echo "$FREETYPE_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+      fi
+      if test "x$FREETYPE_CONFIG" = "xno" ; then
+        use_ft='no (freetype-config not found in path or $FREETYPE_CONFIG)'
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking freetype2 libtool version" >&5
+$as_echo_n "checking freetype2 libtool version... " >&6; }
+
+        FREETYPE_VERSION=`$FREETYPE_CONFIG --version`
+
+  # Used to indicate true or false condition
+  ax_compare_version=false
+
+  # Convert the two version strings to be compared into a format that
+  # allows a simple string comparison.  The end result is that a version
+  # string of the form 1.12.5-r617 will be converted to the form
+  # 0001001200050617.  In other words, each number is zero padded to four
+  # digits, and non digits are removed.
+
+  ax_compare_version_A=`echo "$FREETYPE_VERSION" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
+                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/[^0-9]//g'`
+
+
+  ax_compare_version_B=`echo "$FREETYPE_MIN_VERSION" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
+                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/[^0-9]//g'`
+
+
+    ax_compare_version=`echo "x$ax_compare_version_A
+x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/false/;s/x${ax_compare_version_B}/true/;1q"`
+
+
+
+    if test "$ax_compare_version" = "true" ; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_VERSION - OK" >&5
+$as_echo "$FREETYPE_VERSION - OK" >&6; }
+                          ft_NONPKGCONFIG_CFLAGS=`$FREETYPE_CONFIG --cflags`
+                          ft_NONPKGCONFIG_LIBS=`$FREETYPE_CONFIG --libs`
+    else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_VERSION - Too old" >&5
+$as_echo "$FREETYPE_VERSION - Too old" >&6; }
+                          use_ft="no ($FREETYPE_VERSION found; version $FREETYPE_MIN_VERSION from release $FREETYPE_MIN_RELEASE required)"
+  fi
+
+      fi
+    fi
+
+  ft_CFLAGS="$FREETYPE_CFLAGS"
+  ft_LIBS="$FREETYPE_LIBS"
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's FreeType font backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's FreeType font backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_ft" >&5
+$as_echo "$use_ft" >&6; }
+
+               if test "x$enable_ft" = "xyes" -a "x$use_ft" != xyes; then :
+                       as_fn_error $? " FreeType font backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-ft: \`$use_ft', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_ft" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$ft_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$ft_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$ft_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$ft_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$ft_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset ft_BASE
+unset ft_REQUIRES
+unset ft_CFLAGS
+unset ft_NONPKGCONFIG_CFLAGS
+unset ft_LIBS
+unset ft_NONPKGCONFIG_LIBS
+unset ft_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_ft" = xyes; then
+  CAIRO_HAS_FT_FONT_TRUE=
+  CAIRO_HAS_FT_FONT_FALSE='#'
+else
+  CAIRO_HAS_FT_FONT_TRUE='#'
+  CAIRO_HAS_FT_FONT_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_FT_FONT=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_ft_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_ft_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_ft_headers)
+all_cairo_private += $(cairo_ft_private)
+all_cairo_cxx_sources += $(cairo_ft_cxx_sources)
+all_cairo_sources += $(cairo_ft_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_ft_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_ft_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ft_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_ft_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_ft_headers)
+enabled_cairo_private += $(cairo_ft_private)
+enabled_cairo_cxx_sources += $(cairo_ft_cxx_sources)
+enabled_cairo_sources += $(cairo_ft_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_FT_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_FT_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_ft_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_ft_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ft_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_ft_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_FT_FONT'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_FT_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_ft" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-ft.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_ft" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-ft-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-ft.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-ft.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_FT_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_FT_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_ft" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_FT_FONT'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_FT_FONT'
+
+
+
+                                       if test "x$use_ft" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_FT_FONT'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_FT_FONT 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_FT_FONT),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+                                       if test "x$use_ft" = xyes; then :
+  :
+                                       CAIRO_NATIVE_FONT_BACKENDS="${CAIRO_NATIVE_FONT_BACKENDS}"'ft'
+
+
+
+fi
+
+
+FONTCONFIG_MIN_VERSION=2.2.95
+                                                                                                                               # Check whether --enable-fc was given.
+if test "${enable_fc+set}" = set; then :
+  enableval=$enable_fc; enable_fc=$enableval
+else
+  enable_fc=auto
+fi
+
+                       case $enable_fc in #(
+  no) :
+               use_fc="no (disabled, use --enable-fc to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's Fontconfig font backend feature" >&5
+$as_echo_n "checking for cairo's Fontconfig font backend feature... " >&6; }
+               echo
+
+               use_fc=yes
+                       fc_BASE="cairo"
+fc_REQUIRES="$ac_env_fc_REQUIRES_value"
+fc_CFLAGS="$ac_env_fc_CFLAGS_value"
+fc_NONPKGCONFIG_CFLAGS="$ac_env_fc_NONPKGCONFIG_CFLAGS_value"
+fc_LIBS="$ac_env_fc_LIBS_value"
+fc_NONPKGCONFIG_LIBS="$ac_env_fc_NONPKGCONFIG_LIBS_value"
+fc_NONPKGCONFIG_EXTRA_LIBS="$ac_env_fc_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  use_fc=$use_ft
+  if test "x$use_fc" = "xyes"; then
+    fc_REQUIRES="fontconfig >= $FONTCONFIG_MIN_VERSION"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FONTCONFIG" >&5
+$as_echo_n "checking for FONTCONFIG... " >&6; }
+
+if test -n "$FONTCONFIG_CFLAGS"; then
+    pkg_cv_FONTCONFIG_CFLAGS="$FONTCONFIG_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$fc_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$fc_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "$fc_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$FONTCONFIG_LIBS"; then
+    pkg_cv_FONTCONFIG_LIBS="$FONTCONFIG_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$fc_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$fc_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FONTCONFIG_LIBS=`$PKG_CONFIG --libs "$fc_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$fc_REQUIRES" 2>&1`
+        else
+               FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --print-errors "$fc_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$FONTCONFIG_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }; use_fc="no (requires $fc_REQUIRES)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }; use_fc="no (requires $fc_REQUIRES)"
+else
+       FONTCONFIG_CFLAGS=$pkg_cv_FONTCONFIG_CFLAGS
+       FONTCONFIG_LIBS=$pkg_cv_FONTCONFIG_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  fi
+  fc_CFLAGS="$FONTCONFIG_CFLAGS"
+  fc_LIBS="$FONTCONFIG_LIBS"
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Fontconfig font backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's Fontconfig font backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_fc" >&5
+$as_echo "$use_fc" >&6; }
+
+               if test "x$enable_fc" = "xyes" -a "x$use_fc" != xyes; then :
+                       as_fn_error $? " Fontconfig font backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-fc: \`$use_fc', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_fc" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$fc_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$fc_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$fc_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$fc_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$fc_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset fc_BASE
+unset fc_REQUIRES
+unset fc_CFLAGS
+unset fc_NONPKGCONFIG_CFLAGS
+unset fc_LIBS
+unset fc_NONPKGCONFIG_LIBS
+unset fc_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_fc" = xyes; then
+  CAIRO_HAS_FC_FONT_TRUE=
+  CAIRO_HAS_FC_FONT_FALSE='#'
+else
+  CAIRO_HAS_FC_FONT_TRUE='#'
+  CAIRO_HAS_FC_FONT_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_FC_FONT=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_fc_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_fc_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_fc_headers)
+all_cairo_private += $(cairo_fc_private)
+all_cairo_cxx_sources += $(cairo_fc_cxx_sources)
+all_cairo_sources += $(cairo_fc_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_fc_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_fc_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_fc_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_fc_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_fc_headers)
+enabled_cairo_private += $(cairo_fc_private)
+enabled_cairo_cxx_sources += $(cairo_fc_cxx_sources)
+enabled_cairo_sources += $(cairo_fc_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_FC_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_FC_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_fc_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_fc_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_fc_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_fc_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_FC_FONT'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_FC_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_fc" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-fc.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_fc" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-fc-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-fc.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-fc.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_FC_FONT'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_FC_FONT),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_fc" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_FC_FONT'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_FC_FONT'
+
+
+
+                                       if test "x$use_fc" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_FC_FONT'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_FC_FONT 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_FC_FONT),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+                                       if test "x$use_fc" = xyes; then :
+  :
+                                       CAIRO_NATIVE_FONT_BACKENDS="${CAIRO_NATIVE_FONT_BACKENDS}"'fc'
+
+
+
+fi
+
+
+if test "x$use_ft" = "xyes"; then
+  _save_libs="$LIBS"
+  _save_cflags="$CFLAGS"
+  LIBS="$LIBS $ft_LIBS"
+  CFLAGS="$CFLAGS $ft_CFLAGS"
+  ac_fn_c_check_member "$LINENO" "FT_Bitmap_Size" "y_ppem" "ac_cv_member_FT_Bitmap_Size_y_ppem" "#include <ft2build.h>
+                   #include FT_FREETYPE_H
+"
+if test "x$ac_cv_member_FT_Bitmap_Size_y_ppem" = x""yes; then :
+  HAVE_FT_BITMAP_SIZE_Y_PPEM=1
+else
+  HAVE_FT_BITMAP_SIZE_Y_PPEM=0
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FT_BITMAP_SIZE_Y_PPEM $HAVE_FT_BITMAP_SIZE_Y_PPEM
+_ACEOF
+
+
+  for ac_func in FT_GlyphSlot_Embolden FT_GlyphSlot_Oblique FT_Load_Sfnt_Table FT_Library_SetLcdFilter
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+  LIBS="$_save_libs"
+  CFLAGS="$_save_cflags"
+fi
+
+if test "x$use_fc" = "xyes"; then
+       _save_cflags="$CFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
+       LIBS="$LIBS $FONTCONFIG_LIBS"
+       for ac_func in FcInit FcFini
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+       CFLAGS="$_save_cflags"
+       LIBS="$_save_libs"
+
+fi
+
+
+                                                                                                                               # Check whether --enable-ps was given.
+if test "${enable_ps+set}" = set; then :
+  enableval=$enable_ps; enable_ps=$enableval
+else
+  enable_ps=yes
+fi
+
+                       case $enable_ps in #(
+  no) :
+               use_ps="no (disabled, use --enable-ps to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's PostScript surface backend feature" >&5
+$as_echo_n "checking for cairo's PostScript surface backend feature... " >&6; }
+               echo
+
+               use_ps=yes
+                       ps_BASE="cairo"
+ps_REQUIRES="$ac_env_ps_REQUIRES_value"
+ps_CFLAGS="$ac_env_ps_CFLAGS_value"
+ps_NONPKGCONFIG_CFLAGS="$ac_env_ps_NONPKGCONFIG_CFLAGS_value"
+ps_LIBS="$ac_env_ps_LIBS_value"
+ps_NONPKGCONFIG_LIBS="$ac_env_ps_NONPKGCONFIG_LIBS_value"
+ps_NONPKGCONFIG_EXTRA_LIBS="$ac_env_ps_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+    # The ps backend requires zlib.
+    use_ps=$have_libz
+    ps_NONPKGCONFIG_LIBS=-lz
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's PostScript surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's PostScript surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_ps" >&5
+$as_echo "$use_ps" >&6; }
+
+               if test "x$enable_ps" = "xyes" -a "x$use_ps" != xyes; then :
+                       as_fn_error $? "recommended PostScript surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-ps: \`$use_ps', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_ps" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$ps_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$ps_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$ps_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$ps_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$ps_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset ps_BASE
+unset ps_REQUIRES
+unset ps_CFLAGS
+unset ps_NONPKGCONFIG_CFLAGS
+unset ps_LIBS
+unset ps_NONPKGCONFIG_LIBS
+unset ps_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_ps" = xyes; then
+  CAIRO_HAS_PS_SURFACE_TRUE=
+  CAIRO_HAS_PS_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_PS_SURFACE_TRUE='#'
+  CAIRO_HAS_PS_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_PS_SURFACE=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_ps_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_ps_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_ps_headers)
+all_cairo_private += $(cairo_ps_private)
+all_cairo_cxx_sources += $(cairo_ps_cxx_sources)
+all_cairo_sources += $(cairo_ps_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_ps_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_ps_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ps_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_ps_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_ps_headers)
+enabled_cairo_private += $(cairo_ps_private)
+enabled_cairo_cxx_sources += $(cairo_ps_cxx_sources)
+enabled_cairo_sources += $(cairo_ps_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_PS_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_PS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_ps_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_ps_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ps_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_ps_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_PS_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_PS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_ps" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-ps.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_ps" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-ps-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-ps.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-ps.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_PS_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_PS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_ps" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_PS_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_PS_SURFACE'
+
+
+
+                                       if test "x$use_ps" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_PS_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_PS_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_PS_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+                                       if test "x$use_ps" != xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'+++ It is strongly recommended that you do NOT disable the PostScript surface
++++ backend feature.'
+
+
+
+fi
+
+
+
+
+
+SPECTRE_VERSION_REQUIRED=0.2.0
+test_ps=no
+any2ppm_ps=no
+if test "x$use_ps" = "xyes"; then
+  # Extract the first word of "gs", so it can be a program name with args.
+set dummy gs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_GS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GS"; then
+  ac_cv_prog_GS="$GS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_GS="gs"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GS=$ac_cv_prog_GS
+if test -n "$GS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GS" >&5
+$as_echo "$GS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  if test "$GS"; then
+
+$as_echo "#define CAIRO_CAN_TEST_PS_SURFACE 1" >>confdefs.h
+
+    test_ps="yes"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PS backend will not be tested since ghostscript is not available" >&5
+$as_echo "$as_me: WARNING: PS backend will not be tested since ghostscript is not available" >&2;}
+    test_ps="no (requires ghostscript)"
+  fi
+
+  libspectre_DEPENDENCY="libspectre >= $SPECTRE_VERSION_REQUIRED"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBSPECTRE" >&5
+$as_echo_n "checking for LIBSPECTRE... " >&6; }
+
+if test -n "$LIBSPECTRE_CFLAGS"; then
+    pkg_cv_LIBSPECTRE_CFLAGS="$LIBSPECTRE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libspectre_DEPENDENCY\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$libspectre_DEPENDENCY") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBSPECTRE_CFLAGS=`$PKG_CONFIG --cflags "$libspectre_DEPENDENCY" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBSPECTRE_LIBS"; then
+    pkg_cv_LIBSPECTRE_LIBS="$LIBSPECTRE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libspectre_DEPENDENCY\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$libspectre_DEPENDENCY") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBSPECTRE_LIBS=`$PKG_CONFIG --libs "$libspectre_DEPENDENCY" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LIBSPECTRE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$libspectre_DEPENDENCY" 2>&1`
+        else
+               LIBSPECTRE_PKG_ERRORS=`$PKG_CONFIG --print-errors "$libspectre_DEPENDENCY" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBSPECTRE_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                test_ps="no (requires libspectre)"
+elif test $pkg_failed = untried; then
+       test_ps="no (requires libspectre)"
+else
+       LIBSPECTRE_CFLAGS=$pkg_cv_LIBSPECTRE_CFLAGS
+       LIBSPECTRE_LIBS=$pkg_cv_LIBSPECTRE_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       any2ppm_ps=yes
+fi
+fi
+
+ if test "x$test_ps" = "xyes"; then
+  CAIRO_CAN_TEST_PS_SURFACE_TRUE=
+  CAIRO_CAN_TEST_PS_SURFACE_FALSE='#'
+else
+  CAIRO_CAN_TEST_PS_SURFACE_TRUE='#'
+  CAIRO_CAN_TEST_PS_SURFACE_FALSE=
+fi
+
+ if test "x$any2ppm_ps" = "xyes"; then
+  CAIRO_HAS_SPECTRE_TRUE=
+  CAIRO_HAS_SPECTRE_FALSE='#'
+else
+  CAIRO_HAS_SPECTRE_TRUE='#'
+  CAIRO_HAS_SPECTRE_FALSE=
+fi
+
+if test "x$any2ppm_ps" = "xyes"; then
+
+$as_echo "#define CAIRO_HAS_SPECTRE 1" >>confdefs.h
+
+fi
+
+
+
+
+                                                                                                                               # Check whether --enable-pdf was given.
+if test "${enable_pdf+set}" = set; then :
+  enableval=$enable_pdf; enable_pdf=$enableval
+else
+  enable_pdf=yes
+fi
+
+                       case $enable_pdf in #(
+  no) :
+               use_pdf="no (disabled, use --enable-pdf to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's PDF surface backend feature" >&5
+$as_echo_n "checking for cairo's PDF surface backend feature... " >&6; }
+               echo
+
+               use_pdf=yes
+                       pdf_BASE="cairo"
+pdf_REQUIRES="$ac_env_pdf_REQUIRES_value"
+pdf_CFLAGS="$ac_env_pdf_CFLAGS_value"
+pdf_NONPKGCONFIG_CFLAGS="$ac_env_pdf_NONPKGCONFIG_CFLAGS_value"
+pdf_LIBS="$ac_env_pdf_LIBS_value"
+pdf_NONPKGCONFIG_LIBS="$ac_env_pdf_NONPKGCONFIG_LIBS_value"
+pdf_NONPKGCONFIG_EXTRA_LIBS="$ac_env_pdf_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+    # The pdf backend requires zlib.
+    use_pdf=$have_libz
+    pdf_NONPKGCONFIG_LIBS=-lz
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's PDF surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's PDF surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_pdf" >&5
+$as_echo "$use_pdf" >&6; }
+
+               if test "x$enable_pdf" = "xyes" -a "x$use_pdf" != xyes; then :
+                       as_fn_error $? "recommended PDF surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-pdf: \`$use_pdf', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_pdf" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$pdf_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$pdf_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$pdf_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$pdf_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$pdf_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset pdf_BASE
+unset pdf_REQUIRES
+unset pdf_CFLAGS
+unset pdf_NONPKGCONFIG_CFLAGS
+unset pdf_LIBS
+unset pdf_NONPKGCONFIG_LIBS
+unset pdf_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_pdf" = xyes; then
+  CAIRO_HAS_PDF_SURFACE_TRUE=
+  CAIRO_HAS_PDF_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_PDF_SURFACE_TRUE='#'
+  CAIRO_HAS_PDF_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_PDF_SURFACE=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_pdf_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_pdf_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_pdf_headers)
+all_cairo_private += $(cairo_pdf_private)
+all_cairo_cxx_sources += $(cairo_pdf_cxx_sources)
+all_cairo_sources += $(cairo_pdf_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_pdf_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_pdf_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pdf_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_pdf_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_pdf_headers)
+enabled_cairo_private += $(cairo_pdf_private)
+enabled_cairo_cxx_sources += $(cairo_pdf_cxx_sources)
+enabled_cairo_sources += $(cairo_pdf_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_PDF_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_PDF_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_pdf_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_pdf_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pdf_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_pdf_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_PDF_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_PDF_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_pdf" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-pdf.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_pdf" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-pdf-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-pdf.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-pdf.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_PDF_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_PDF_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_pdf" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_PDF_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_PDF_SURFACE'
+
+
+
+                                       if test "x$use_pdf" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_PDF_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_PDF_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_PDF_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+                                       if test "x$use_pdf" != xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'+++ It is strongly recommended that you do NOT disable the PDF surface
++++ backend feature.'
+
+
+
+fi
+
+
+
+
+
+# poppler-0.17.4 fixes text-pattern and text-transform
+POPPLER_VERSION_REQUIRED=0.17.4
+test_pdf=no
+any2ppm_pdf=no
+if test "x$use_pdf" = "xyes"; then
+  poppler_DEPENDENCY="poppler-glib >= $POPPLER_VERSION_REQUIRED"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER" >&5
+$as_echo_n "checking for POPPLER... " >&6; }
+
+if test -n "$POPPLER_CFLAGS"; then
+    pkg_cv_POPPLER_CFLAGS="$POPPLER_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$poppler_DEPENDENCY\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$poppler_DEPENDENCY") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_POPPLER_CFLAGS=`$PKG_CONFIG --cflags "$poppler_DEPENDENCY" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$POPPLER_LIBS"; then
+    pkg_cv_POPPLER_LIBS="$POPPLER_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$poppler_DEPENDENCY\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$poppler_DEPENDENCY") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_POPPLER_LIBS=`$PKG_CONFIG --libs "$poppler_DEPENDENCY" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               POPPLER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$poppler_DEPENDENCY" 2>&1`
+        else
+               POPPLER_PKG_ERRORS=`$PKG_CONFIG --print-errors "$poppler_DEPENDENCY" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$POPPLER_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                test_pdf="no (requires $poppler_DEPENDENCY)"
+elif test $pkg_failed = untried; then
+       test_pdf="no (requires $poppler_DEPENDENCY)"
+else
+       POPPLER_CFLAGS=$pkg_cv_POPPLER_CFLAGS
+       POPPLER_LIBS=$pkg_cv_POPPLER_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+               _save_cflags="$CFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $POPPLER_CFLAGS"
+       LIBS="$LIBS $POPPLER_LIBS"
+       for ac_func in poppler_page_render
+do :
+  ac_fn_c_check_func "$LINENO" "poppler_page_render" "ac_cv_func_poppler_page_render"
+if test "x$ac_cv_func_poppler_page_render" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_POPPLER_PAGE_RENDER 1
+_ACEOF
+ test_pdf=yes; any2ppm_pdf=yes
+else
+  test_pdf="no (requires $poppler_DEPENDENCY)"
+fi
+done
+
+       CFLAGS="$_save_cflags"
+       LIBS="$_save_libs"
+
+fi
+  if test "x$test_pdf" = "xyes"; then
+
+$as_echo "#define CAIRO_CAN_TEST_PDF_SURFACE 1" >>confdefs.h
+
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PDF backend will not be tested since poppler >= $POPPLER_VERSION_REQUIRED is not available" >&5
+$as_echo "$as_me: WARNING: PDF backend will not be tested since poppler >= $POPPLER_VERSION_REQUIRED is not available" >&2;}
+  fi
+fi
+
+ if test "x$test_pdf" = "xyes"; then
+  CAIRO_CAN_TEST_PDF_SURFACE_TRUE=
+  CAIRO_CAN_TEST_PDF_SURFACE_FALSE='#'
+else
+  CAIRO_CAN_TEST_PDF_SURFACE_TRUE='#'
+  CAIRO_CAN_TEST_PDF_SURFACE_FALSE=
+fi
+
+
+
+
+ if test "x$use_ps" = "xyes" -o "x$use_pdf" = "xyes"; then
+  CAIRO_HAS_MULTI_PAGE_SURFACES_TRUE=
+  CAIRO_HAS_MULTI_PAGE_SURFACES_FALSE='#'
+else
+  CAIRO_HAS_MULTI_PAGE_SURFACES_TRUE='#'
+  CAIRO_HAS_MULTI_PAGE_SURFACES_FALSE=
+fi
+
+
+
+                                                                                                                               # Check whether --enable-svg was given.
+if test "${enable_svg+set}" = set; then :
+  enableval=$enable_svg; enable_svg=$enableval
+else
+  enable_svg=yes
+fi
+
+                       case $enable_svg in #(
+  no) :
+               use_svg="no (disabled, use --enable-svg to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's SVG surface backend feature" >&5
+$as_echo_n "checking for cairo's SVG surface backend feature... " >&6; }
+               echo
+
+               use_svg=yes
+                       svg_BASE="cairo"
+svg_REQUIRES="$ac_env_svg_REQUIRES_value"
+svg_CFLAGS="$ac_env_svg_CFLAGS_value"
+svg_NONPKGCONFIG_CFLAGS="$ac_env_svg_NONPKGCONFIG_CFLAGS_value"
+svg_LIBS="$ac_env_svg_LIBS_value"
+svg_NONPKGCONFIG_LIBS="$ac_env_svg_NONPKGCONFIG_LIBS_value"
+svg_NONPKGCONFIG_EXTRA_LIBS="$ac_env_svg_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  if test "x$use_png" != "xyes"; then
+    use_svg="no (requires --enable-png)"
+  fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's SVG surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's SVG surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_svg" >&5
+$as_echo "$use_svg" >&6; }
+
+               if test "x$enable_svg" = "xyes" -a "x$use_svg" != xyes; then :
+                       as_fn_error $? "recommended SVG surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-svg: \`$use_svg', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_svg" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$svg_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$svg_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$svg_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$svg_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$svg_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset svg_BASE
+unset svg_REQUIRES
+unset svg_CFLAGS
+unset svg_NONPKGCONFIG_CFLAGS
+unset svg_LIBS
+unset svg_NONPKGCONFIG_LIBS
+unset svg_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_svg" = xyes; then
+  CAIRO_HAS_SVG_SURFACE_TRUE=
+  CAIRO_HAS_SVG_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_SVG_SURFACE_TRUE='#'
+  CAIRO_HAS_SVG_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_SVG_SURFACE=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_svg_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_svg_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_svg_headers)
+all_cairo_private += $(cairo_svg_private)
+all_cairo_cxx_sources += $(cairo_svg_cxx_sources)
+all_cairo_sources += $(cairo_svg_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_svg_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_svg_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_svg_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_svg_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_svg_headers)
+enabled_cairo_private += $(cairo_svg_private)
+enabled_cairo_cxx_sources += $(cairo_svg_cxx_sources)
+enabled_cairo_sources += $(cairo_svg_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_SVG_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_SVG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_svg_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_svg_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_svg_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_svg_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_SVG_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_SVG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_svg" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-svg.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_svg" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-svg-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-svg.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-svg.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_SVG_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_SVG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_svg" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_SVG_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_SVG_SURFACE'
+
+
+
+                                       if test "x$use_svg" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_SVG_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_SVG_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_SVG_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+                                       if test "x$use_svg" != xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'+++ It is strongly recommended that you do NOT disable the SVG surface
++++ backend feature.'
+
+
+
+fi
+
+
+
+
+LIBRSVG_VERSION_REQUIRED=2.15.0
+test_svg=no
+any2ppm_svg=no
+if test "x$use_svg" = "xyes"; then
+  librsvg_DEPENDENCY="librsvg-2.0 >= $LIBRSVG_VERSION_REQUIRED"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBRSVG" >&5
+$as_echo_n "checking for LIBRSVG... " >&6; }
+
+if test -n "$LIBRSVG_CFLAGS"; then
+    pkg_cv_LIBRSVG_CFLAGS="$LIBRSVG_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$librsvg_DEPENDENCY gdk-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$librsvg_DEPENDENCY gdk-2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBRSVG_CFLAGS=`$PKG_CONFIG --cflags "$librsvg_DEPENDENCY gdk-2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBRSVG_LIBS"; then
+    pkg_cv_LIBRSVG_LIBS="$LIBRSVG_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$librsvg_DEPENDENCY gdk-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$librsvg_DEPENDENCY gdk-2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBRSVG_LIBS=`$PKG_CONFIG --libs "$librsvg_DEPENDENCY gdk-2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LIBRSVG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$librsvg_DEPENDENCY gdk-2.0" 2>&1`
+        else
+               LIBRSVG_PKG_ERRORS=`$PKG_CONFIG --print-errors "$librsvg_DEPENDENCY gdk-2.0" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBRSVG_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                test_svg="no (requires $librsvg_DEPENDENCY)"
+elif test $pkg_failed = untried; then
+       test_svg="no (requires $librsvg_DEPENDENCY)"
+else
+       LIBRSVG_CFLAGS=$pkg_cv_LIBRSVG_CFLAGS
+       LIBRSVG_LIBS=$pkg_cv_LIBRSVG_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+               _save_cflags="$CFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $LIBRSVG_CFLAGS"
+       LIBS="$LIBS $LIBRSVG_LIBS"
+       for ac_func in rsvg_pixbuf_from_file
+do :
+  ac_fn_c_check_func "$LINENO" "rsvg_pixbuf_from_file" "ac_cv_func_rsvg_pixbuf_from_file"
+if test "x$ac_cv_func_rsvg_pixbuf_from_file" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_RSVG_PIXBUF_FROM_FILE 1
+_ACEOF
+ test_svg=yes; any2ppm_svg=yes
+else
+  test_svg="no (requires $librsvg_DEPENDENCY)"
+fi
+done
+
+       CFLAGS="$_save_cflags"
+       LIBS="$_save_libs"
+
+fi
+  if test "x$test_svg" = "xyes"; then
+
+$as_echo "#define CAIRO_CAN_TEST_SVG_SURFACE 1" >>confdefs.h
+
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SVG backend will not be tested since librsvg >= $LIBRSVG_VERSION_REQUIRED is not available" >&5
+$as_echo "$as_me: WARNING: SVG backend will not be tested since librsvg >= $LIBRSVG_VERSION_REQUIRED is not available" >&2;}
+  fi
+fi
+
+ if test "x$test_svg" = "xyes"; then
+  CAIRO_CAN_TEST_SVG_SURFACE_TRUE=
+  CAIRO_CAN_TEST_SVG_SURFACE_FALSE='#'
+else
+  CAIRO_CAN_TEST_SVG_SURFACE_TRUE='#'
+  CAIRO_CAN_TEST_SVG_SURFACE_FALSE=
+fi
+
+
+
+
+
+                                                                                                                               # Check whether --enable-test-surfaces was given.
+if test "${enable_test_surfaces+set}" = set; then :
+  enableval=$enable_test_surfaces; enable_test_surfaces=$enableval
+else
+  enable_test_surfaces=no
+fi
+
+                       case $enable_test_surfaces in #(
+  no) :
+               use_test_surfaces="no (disabled, use --enable-test-surfaces to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's test surfaces feature" >&5
+$as_echo_n "checking for cairo's test surfaces feature... " >&6; }
+               echo
+
+               use_test_surfaces=yes
+                       test_surfaces_BASE="cairo"
+test_surfaces_REQUIRES="$ac_env_test_surfaces_REQUIRES_value"
+test_surfaces_CFLAGS="$ac_env_test_surfaces_CFLAGS_value"
+test_surfaces_NONPKGCONFIG_CFLAGS="$ac_env_test_surfaces_NONPKGCONFIG_CFLAGS_value"
+test_surfaces_LIBS="$ac_env_test_surfaces_LIBS_value"
+test_surfaces_NONPKGCONFIG_LIBS="$ac_env_test_surfaces_NONPKGCONFIG_LIBS_value"
+test_surfaces_NONPKGCONFIG_EXTRA_LIBS="$ac_env_test_surfaces_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's test surfaces feature could be enabled" >&5
+$as_echo_n "checking whether cairo's test surfaces feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_test_surfaces" >&5
+$as_echo "$use_test_surfaces" >&6; }
+
+               if test "x$enable_test_surfaces" = "xyes" -a "x$use_test_surfaces" != xyes; then :
+                       as_fn_error $? " test surfaces feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-test-surfaces: \`$use_test_surfaces', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_test_surfaces" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$test_surfaces_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$test_surfaces_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$test_surfaces_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$test_surfaces_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$test_surfaces_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset test_surfaces_BASE
+unset test_surfaces_REQUIRES
+unset test_surfaces_CFLAGS
+unset test_surfaces_NONPKGCONFIG_CFLAGS
+unset test_surfaces_LIBS
+unset test_surfaces_NONPKGCONFIG_LIBS
+unset test_surfaces_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_test_surfaces" = xyes; then
+  CAIRO_HAS_TEST_SURFACES_TRUE=
+  CAIRO_HAS_TEST_SURFACES_FALSE='#'
+else
+  CAIRO_HAS_TEST_SURFACES_TRUE='#'
+  CAIRO_HAS_TEST_SURFACES_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_TEST_SURFACES=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+                                                                               cr_make_tmp='all_cairo_private += $(cairo_test_surfaces_private) $(cairo_test_surfaces_headers)
+all_cairo_cxx_sources += $(cairo_test_surfaces_cxx_sources)
+all_cairo_sources += $(cairo_test_surfaces_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_private += $(cairo_boilerplate_test_surfaces_private) $(cairo_boilerplate_test_surfaces_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_test_surfaces_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_test_surfaces_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_private += $(cairo_test_surfaces_private) $(cairo_test_surfaces_headers)
+enabled_cairo_cxx_sources += $(cairo_test_surfaces_cxx_sources)
+enabled_cairo_sources += $(cairo_test_surfaces_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_TEST_SURFACES'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_TEST_SURFACES),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_private += $(cairo_boilerplate_test_surfaces_private) $(cairo_boilerplate_test_surfaces_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_test_surfaces_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_test_surfaces_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_TEST_SURFACES'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_TEST_SURFACES),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+                                       if test "x$use_test_surfaces" = xyes; then :
+  :
+
+$as_echo "#define CAIRO_HAS_TEST_SURFACES 1" >>confdefs.h
+
+
+
+fi
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_TEST_SURFACES 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_TEST_SURFACES),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+                                                                                                                               enable_image=yes
+                       case $enable_image in #(
+  no) :
+               use_image="no (disabled, use --enable-image to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's image surface backend feature" >&5
+$as_echo_n "checking for cairo's image surface backend feature... " >&6; }
+               echo
+
+               use_image=yes
+                       image_BASE="cairo"
+image_REQUIRES="$ac_env_image_REQUIRES_value"
+image_CFLAGS="$ac_env_image_CFLAGS_value"
+image_NONPKGCONFIG_CFLAGS="$ac_env_image_NONPKGCONFIG_CFLAGS_value"
+image_LIBS="$ac_env_image_LIBS_value"
+image_NONPKGCONFIG_LIBS="$ac_env_image_NONPKGCONFIG_LIBS_value"
+image_NONPKGCONFIG_EXTRA_LIBS="$ac_env_image_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  pixman_REQUIRES="pixman-1 >= 0.22.0"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pixman" >&5
+$as_echo_n "checking for pixman... " >&6; }
+
+if test -n "$pixman_CFLAGS"; then
+    pkg_cv_pixman_CFLAGS="$pixman_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pixman_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$pixman_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_pixman_CFLAGS=`$PKG_CONFIG --cflags "$pixman_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$pixman_LIBS"; then
+    pkg_cv_pixman_LIBS="$pixman_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pixman_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$pixman_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_pixman_LIBS=`$PKG_CONFIG --libs "$pixman_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               pixman_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$pixman_REQUIRES" 2>&1`
+        else
+               pixman_PKG_ERRORS=`$PKG_CONFIG --print-errors "$pixman_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$pixman_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  use_image="no (requires $pixman_REQUIRES http://cairographics.org/releases/)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  use_image="no (requires $pixman_REQUIRES http://cairographics.org/releases/)"
+else
+       pixman_CFLAGS=$pkg_cv_pixman_CFLAGS
+       pixman_LIBS=$pkg_cv_pixman_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  image_REQUIRES=$pixman_REQUIRES
+  image_CFLAGS=$pixman_CFLAGS
+  image_LIBS=$pixman_LIBS
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's image surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's image surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_image" >&5
+$as_echo "$use_image" >&6; }
+
+               if test "x$enable_image" = "xyes" -a "x$use_image" != xyes; then :
+                       as_fn_error $? "mandatory image surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-image: \`$use_image', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_image" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$image_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$image_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$image_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$image_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$image_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset image_BASE
+unset image_REQUIRES
+unset image_CFLAGS
+unset image_NONPKGCONFIG_CFLAGS
+unset image_LIBS
+unset image_NONPKGCONFIG_LIBS
+unset image_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_image_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_image_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_image_headers)
+all_cairo_private += $(cairo_image_private)
+all_cairo_cxx_sources += $(cairo_image_cxx_sources)
+all_cairo_sources += $(cairo_image_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_image_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_image_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_image_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_image_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_image_headers)
+enabled_cairo_private += $(cairo_image_private)
+enabled_cairo_cxx_sources += $(cairo_image_cxx_sources)
+enabled_cairo_sources += $(cairo_image_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_image_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_image_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_image_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_image_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+
+                                       if test "x$use_image" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_IMAGE_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_IMAGE_SURFACE'
+
+
+
+                                       if test "x$use_image" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_IMAGE_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_IMAGE_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                               CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+
+
+                                                                                                                               enable_mime=yes
+                       case $enable_mime in #(
+  no) :
+               use_mime="no (disabled, use --enable-mime to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's mime surface backend feature" >&5
+$as_echo_n "checking for cairo's mime surface backend feature... " >&6; }
+               echo
+
+               use_mime=yes
+                       mime_BASE="cairo"
+mime_REQUIRES="$ac_env_mime_REQUIRES_value"
+mime_CFLAGS="$ac_env_mime_CFLAGS_value"
+mime_NONPKGCONFIG_CFLAGS="$ac_env_mime_NONPKGCONFIG_CFLAGS_value"
+mime_LIBS="$ac_env_mime_LIBS_value"
+mime_NONPKGCONFIG_LIBS="$ac_env_mime_NONPKGCONFIG_LIBS_value"
+mime_NONPKGCONFIG_EXTRA_LIBS="$ac_env_mime_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's mime surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's mime surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_mime" >&5
+$as_echo "$use_mime" >&6; }
+
+               if test "x$enable_mime" = "xyes" -a "x$use_mime" != xyes; then :
+                       as_fn_error $? "mandatory mime surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-mime: \`$use_mime', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_mime" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$mime_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$mime_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$mime_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$mime_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$mime_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset mime_BASE
+unset mime_REQUIRES
+unset mime_CFLAGS
+unset mime_NONPKGCONFIG_CFLAGS
+unset mime_LIBS
+unset mime_NONPKGCONFIG_LIBS
+unset mime_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_mime_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_mime_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_mime_headers)
+all_cairo_private += $(cairo_mime_private)
+all_cairo_cxx_sources += $(cairo_mime_cxx_sources)
+all_cairo_sources += $(cairo_mime_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_mime_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_mime_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_mime_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_mime_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_mime_headers)
+enabled_cairo_private += $(cairo_mime_private)
+enabled_cairo_cxx_sources += $(cairo_mime_cxx_sources)
+enabled_cairo_sources += $(cairo_mime_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_mime_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_mime_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_mime_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_mime_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+
+                                       if test "x$use_mime" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_MIME_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_MIME_SURFACE'
+
+
+
+                                       if test "x$use_mime" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_MIME_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_MIME_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                               CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+                                                                                                                               enable_recording=yes
+                       case $enable_recording in #(
+  no) :
+               use_recording="no (disabled, use --enable-recording to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's recording surface backend feature" >&5
+$as_echo_n "checking for cairo's recording surface backend feature... " >&6; }
+               echo
+
+               use_recording=yes
+                       recording_BASE="cairo"
+recording_REQUIRES="$ac_env_recording_REQUIRES_value"
+recording_CFLAGS="$ac_env_recording_CFLAGS_value"
+recording_NONPKGCONFIG_CFLAGS="$ac_env_recording_NONPKGCONFIG_CFLAGS_value"
+recording_LIBS="$ac_env_recording_LIBS_value"
+recording_NONPKGCONFIG_LIBS="$ac_env_recording_NONPKGCONFIG_LIBS_value"
+recording_NONPKGCONFIG_EXTRA_LIBS="$ac_env_recording_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's recording surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's recording surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_recording" >&5
+$as_echo "$use_recording" >&6; }
+
+               if test "x$enable_recording" = "xyes" -a "x$use_recording" != xyes; then :
+                       as_fn_error $? "mandatory recording surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-recording: \`$use_recording', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_recording" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$recording_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$recording_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$recording_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$recording_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$recording_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset recording_BASE
+unset recording_REQUIRES
+unset recording_CFLAGS
+unset recording_NONPKGCONFIG_CFLAGS
+unset recording_LIBS
+unset recording_NONPKGCONFIG_LIBS
+unset recording_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_recording_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_recording_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_recording_headers)
+all_cairo_private += $(cairo_recording_private)
+all_cairo_cxx_sources += $(cairo_recording_cxx_sources)
+all_cairo_sources += $(cairo_recording_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_recording_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_recording_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_recording_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_recording_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_recording_headers)
+enabled_cairo_private += $(cairo_recording_private)
+enabled_cairo_cxx_sources += $(cairo_recording_cxx_sources)
+enabled_cairo_sources += $(cairo_recording_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_recording_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_recording_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_recording_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_recording_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+
+                                       if test "x$use_recording" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_RECORDING_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_RECORDING_SURFACE'
+
+
+
+                                       if test "x$use_recording" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_RECORDING_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_RECORDING_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                               CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+                                                                                                                               enable_observer=yes
+                       case $enable_observer in #(
+  no) :
+               use_observer="no (disabled, use --enable-observer to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's observer surface backend feature" >&5
+$as_echo_n "checking for cairo's observer surface backend feature... " >&6; }
+               echo
+
+               use_observer=yes
+                       observer_BASE="cairo"
+observer_REQUIRES="$ac_env_observer_REQUIRES_value"
+observer_CFLAGS="$ac_env_observer_CFLAGS_value"
+observer_NONPKGCONFIG_CFLAGS="$ac_env_observer_NONPKGCONFIG_CFLAGS_value"
+observer_LIBS="$ac_env_observer_LIBS_value"
+observer_NONPKGCONFIG_LIBS="$ac_env_observer_NONPKGCONFIG_LIBS_value"
+observer_NONPKGCONFIG_EXTRA_LIBS="$ac_env_observer_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's observer surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's observer surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_observer" >&5
+$as_echo "$use_observer" >&6; }
+
+               if test "x$enable_observer" = "xyes" -a "x$use_observer" != xyes; then :
+                       as_fn_error $? "mandatory observer surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-observer: \`$use_observer', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_observer" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$observer_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$observer_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$observer_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$observer_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$observer_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset observer_BASE
+unset observer_REQUIRES
+unset observer_CFLAGS
+unset observer_NONPKGCONFIG_CFLAGS
+unset observer_LIBS
+unset observer_NONPKGCONFIG_LIBS
+unset observer_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_observer_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_observer_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_observer_headers)
+all_cairo_private += $(cairo_observer_private)
+all_cairo_cxx_sources += $(cairo_observer_cxx_sources)
+all_cairo_sources += $(cairo_observer_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_observer_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_observer_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_observer_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_observer_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_observer_headers)
+enabled_cairo_private += $(cairo_observer_private)
+enabled_cairo_cxx_sources += $(cairo_observer_cxx_sources)
+enabled_cairo_sources += $(cairo_observer_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_observer_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_observer_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_observer_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_observer_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+
+                                       if test "x$use_observer" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_OBSERVER_SURFACE'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_OBSERVER_SURFACE'
+
+
+
+                                       if test "x$use_observer" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_OBSERVER_SURFACE'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_OBSERVER_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                               CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-tee was given.
+if test "${enable_tee+set}" = set; then :
+  enableval=$enable_tee; enable_tee=$enableval
+else
+  enable_tee=no
+fi
+
+                       case $enable_tee in #(
+  no) :
+               use_tee="no (disabled, use --enable-tee to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's tee surface backend feature" >&5
+$as_echo_n "checking for cairo's tee surface backend feature... " >&6; }
+               echo
+
+               use_tee=yes
+                       tee_BASE="cairo"
+tee_REQUIRES="$ac_env_tee_REQUIRES_value"
+tee_CFLAGS="$ac_env_tee_CFLAGS_value"
+tee_NONPKGCONFIG_CFLAGS="$ac_env_tee_NONPKGCONFIG_CFLAGS_value"
+tee_LIBS="$ac_env_tee_LIBS_value"
+tee_NONPKGCONFIG_LIBS="$ac_env_tee_NONPKGCONFIG_LIBS_value"
+tee_NONPKGCONFIG_EXTRA_LIBS="$ac_env_tee_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's tee surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's tee surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_tee" >&5
+$as_echo "$use_tee" >&6; }
+
+               if test "x$enable_tee" = "xyes" -a "x$use_tee" != xyes; then :
+                       as_fn_error $? " tee surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-tee: \`$use_tee', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_tee" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$tee_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$tee_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$tee_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$tee_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$tee_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset tee_BASE
+unset tee_REQUIRES
+unset tee_CFLAGS
+unset tee_NONPKGCONFIG_CFLAGS
+unset tee_LIBS
+unset tee_NONPKGCONFIG_LIBS
+unset tee_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_tee" = xyes; then
+  CAIRO_HAS_TEE_SURFACE_TRUE=
+  CAIRO_HAS_TEE_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_TEE_SURFACE_TRUE='#'
+  CAIRO_HAS_TEE_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_TEE_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_tee_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_tee_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_tee_headers)
+all_cairo_private += $(cairo_tee_private)
+all_cairo_cxx_sources += $(cairo_tee_cxx_sources)
+all_cairo_sources += $(cairo_tee_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_tee_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_tee_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tee_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_tee_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_tee_headers)
+enabled_cairo_private += $(cairo_tee_private)
+enabled_cairo_cxx_sources += $(cairo_tee_cxx_sources)
+enabled_cairo_sources += $(cairo_tee_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_TEE_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_TEE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_tee_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_tee_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tee_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_tee_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_TEE_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_TEE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_tee" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-tee.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_tee" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-tee-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-tee.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-tee.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_TEE_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_TEE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_tee" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_TEE_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_TEE_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_TEE_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_tee" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The tee surface backend feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to tee surface backend specific
+--- API.'
+
+
+
+fi
+
+
+
+
+                                                                                                                               # Check whether --enable-xml was given.
+if test "${enable_xml+set}" = set; then :
+  enableval=$enable_xml; enable_xml=$enableval
+else
+  enable_xml=no
+fi
+
+                       case $enable_xml in #(
+  no) :
+               use_xml="no (disabled, use --enable-xml to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's xml surface backend feature" >&5
+$as_echo_n "checking for cairo's xml surface backend feature... " >&6; }
+               echo
+
+               use_xml=yes
+                       xml_BASE="cairo"
+xml_REQUIRES="$ac_env_xml_REQUIRES_value"
+xml_CFLAGS="$ac_env_xml_CFLAGS_value"
+xml_NONPKGCONFIG_CFLAGS="$ac_env_xml_NONPKGCONFIG_CFLAGS_value"
+xml_LIBS="$ac_env_xml_LIBS_value"
+xml_NONPKGCONFIG_LIBS="$ac_env_xml_NONPKGCONFIG_LIBS_value"
+xml_NONPKGCONFIG_EXTRA_LIBS="$ac_env_xml_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+    use_xml=$have_libz
+    xml_NONPKGCONFIG_LIBS=-lz
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's xml surface backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's xml surface backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_xml" >&5
+$as_echo "$use_xml" >&6; }
+
+               if test "x$enable_xml" = "xyes" -a "x$use_xml" != xyes; then :
+                       as_fn_error $? " xml surface backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-xml: \`$use_xml', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_xml" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$xml_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$xml_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$xml_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$xml_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$xml_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset xml_BASE
+unset xml_REQUIRES
+unset xml_CFLAGS
+unset xml_NONPKGCONFIG_CFLAGS
+unset xml_LIBS
+unset xml_NONPKGCONFIG_LIBS
+unset xml_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_xml" = xyes; then
+  CAIRO_HAS_XML_SURFACE_TRUE=
+  CAIRO_HAS_XML_SURFACE_FALSE='#'
+else
+  CAIRO_HAS_XML_SURFACE_TRUE='#'
+  CAIRO_HAS_XML_SURFACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_XML_SURFACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='unsupported_cairo_headers += $(cairo_xml_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_xml_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_xml_headers)
+all_cairo_private += $(cairo_xml_private)
+all_cairo_cxx_sources += $(cairo_xml_cxx_sources)
+all_cairo_sources += $(cairo_xml_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_xml_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xml_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xml_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xml_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_xml_headers)
+enabled_cairo_private += $(cairo_xml_private)
+enabled_cairo_cxx_sources += $(cairo_xml_cxx_sources)
+enabled_cairo_sources += $(cairo_xml_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XML_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XML_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xml_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xml_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xml_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xml_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_XML_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_XML_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_xml" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-xml.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_xml" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-xml-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-xml.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-xml.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_XML_SURFACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_XML_SURFACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xml" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_XML_SURFACE'
+
+
+fi
+
+
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_XML_SURFACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_XML_SURFACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+                                       if test "x$use_xml" = xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'--- The xml surface backend feature is still under active development and is
+--- included in this release only as a preview. It does NOT fully work yet
+--- and incompatible changes may yet be made to xml surface backend specific
+--- API.'
+
+
+
+fi
+
+
+
+
+
+
+                                                                                                                               enable_user=yes
+                       case $enable_user in #(
+  no) :
+               use_user="no (disabled, use --enable-user to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's user font backend feature" >&5
+$as_echo_n "checking for cairo's user font backend feature... " >&6; }
+               echo
+
+               use_user=yes
+                       user_BASE="cairo"
+user_REQUIRES="$ac_env_user_REQUIRES_value"
+user_CFLAGS="$ac_env_user_CFLAGS_value"
+user_NONPKGCONFIG_CFLAGS="$ac_env_user_NONPKGCONFIG_CFLAGS_value"
+user_LIBS="$ac_env_user_LIBS_value"
+user_NONPKGCONFIG_LIBS="$ac_env_user_NONPKGCONFIG_LIBS_value"
+user_NONPKGCONFIG_EXTRA_LIBS="$ac_env_user_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's user font backend feature could be enabled" >&5
+$as_echo_n "checking whether cairo's user font backend feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_user" >&5
+$as_echo "$use_user" >&6; }
+
+               if test "x$enable_user" = "xyes" -a "x$use_user" != xyes; then :
+                       as_fn_error $? "mandatory user font backend feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-user: \`$use_user', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_user" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$user_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$user_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$user_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$user_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$user_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset user_BASE
+unset user_REQUIRES
+unset user_CFLAGS
+unset user_NONPKGCONFIG_CFLAGS
+unset user_LIBS
+unset user_NONPKGCONFIG_LIBS
+unset user_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_user_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_user_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_user_headers)
+all_cairo_private += $(cairo_user_private)
+all_cairo_cxx_sources += $(cairo_user_cxx_sources)
+all_cairo_sources += $(cairo_user_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_user_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_user_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_user_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_user_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_user_headers)
+enabled_cairo_private += $(cairo_user_private)
+enabled_cairo_cxx_sources += $(cairo_user_cxx_sources)
+enabled_cairo_sources += $(cairo_user_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_user_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_user_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_user_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_user_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+
+                                       if test "x$use_user" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_USER_FONT'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_USER_FONT'
+
+
+
+                                       if test "x$use_user" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_USER_FONT'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_USER_FONT 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                               CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+
+
+have_real_pthread=no
+have_pthread=no
+                                                                                                                               # Check whether --enable-pthread was given.
+if test "${enable_pthread+set}" = set; then :
+  enableval=$enable_pthread; enable_pthread=$enableval
+else
+  enable_pthread=auto
+fi
+
+                       case $enable_pthread in #(
+  no) :
+               use_pthread="no (disabled, use --enable-pthread to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's pthread feature" >&5
+$as_echo_n "checking for cairo's pthread feature... " >&6; }
+               echo
+
+               use_pthread=yes
+                       pthread_BASE="cairo"
+pthread_REQUIRES="$ac_env_pthread_REQUIRES_value"
+pthread_CFLAGS="$ac_env_pthread_CFLAGS_value"
+pthread_NONPKGCONFIG_CFLAGS="$ac_env_pthread_NONPKGCONFIG_CFLAGS_value"
+pthread_LIBS="$ac_env_pthread_LIBS_value"
+pthread_NONPKGCONFIG_LIBS="$ac_env_pthread_NONPKGCONFIG_LIBS_value"
+pthread_NONPKGCONFIG_EXTRA_LIBS="$ac_env_pthread_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+                                       if test "x$PTHREAD_CFLAGS" = "x"; then
+               PTHREAD_CFLAGS="-D_REENTRANT"
+       fi
+       if test "x$PTHREAD_LIBS" = "x"; then
+               PTHREAD_LIBS="-lpthread"
+       fi
+
+                               # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program="#ifndef _GNU_SOURCE
+#define _GNU_SOURCE /* for PTHREAD_MUTEX_INITIALIZER under linux */
+#endif
+#include <pthread.h>
+
+pthread_mutex_t test_mutex_initializer = PTHREAD_MUTEX_INITIALIZER;
+int test_mutex (void)
+{
+       int x = 0;
+       pthread_mutex_t mutex;
+       x |= pthread_mutex_init (&mutex, NULL);
+       x |= pthread_mutex_lock (&mutex);
+       x |= pthread_mutex_unlock (&mutex);
+       x |= pthread_mutex_destroy (&mutex);
+       return 0;
+}
+
+int test_mutex_attr (void)
+{
+       int x = 0;
+       pthread_mutexattr_t attr;
+       pthread_mutex_t mutex;
+       x |= pthread_mutexattr_init (&attr);
+       x |= pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
+       x |= pthread_mutex_init (&mutex, &attr);
+       x |= pthread_mutex_lock (&mutex);
+       x |= pthread_mutex_unlock (&mutex);
+       x |= pthread_mutex_destroy (&mutex);
+       x |= pthread_mutexattr_destroy (&attr);
+       return x;
+}
+
+pthread_once_t once_control = PTHREAD_ONCE_INIT;
+void test_once_init (void) {}
+int test_once (void)
+{
+       return pthread_once (&once_control, test_once_init);
+}
+
+pthread_key_t test_specific_key;
+int test_specific (void)
+{
+       int x = 0;
+       x |= pthread_key_create (&test_specific_key, NULL);
+       x |= pthread_setspecific (test_specific_key, NULL);
+       x |= pthread_getspecific (test_specific_key) != NULL;
+       return x;
+}
+
+void cleaner (void *arg) { (void)arg; }
+
+void *
+test_thread_main (void *arg)
+{
+       pthread_cleanup_push (cleaner, arg);
+       pthread_exit (arg);
+       pthread_cleanup_pop (1);
+       return arg;
+}
+
+int
+test_threads (void)
+{
+       int x = 0;
+       pthread_t thread;
+       pthread_attr_t attr;
+       void *arg = NULL;
+       x |= pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+       x |= pthread_create (&thread, &attr, test_thread_main, arg);
+       x |= pthread_equal (pthread_self(), thread);
+       x |= pthread_join (thread, &arg);
+       x |= pthread_attr_destroy (&attr);
+       return x;
+}"'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS $PTHREAD_CFLAGS";
+                LIBS="$LIBS $PTHREAD_LIBS"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               real_pthread_CFLAGS="$PTHREAD_CFLAGS";
+                real_pthread_LIBS="$PTHREAD_LIBS";
+                have_real_pthread=yes
+       else
+               real_pthread_CFLAGS="";
+                real_pthread_LIBS="";
+                have_real_pthread=no
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+       if test "x$have_real_pthread" != "xyes"; then
+                                               # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program="#ifndef _GNU_SOURCE
+#define _GNU_SOURCE /* for PTHREAD_MUTEX_INITIALIZER under linux */
+#endif
+#include <pthread.h>
+
+pthread_mutex_t test_mutex_initializer = PTHREAD_MUTEX_INITIALIZER;
+int test_mutex (void)
+{
+       int x = 0;
+       pthread_mutex_t mutex;
+       x |= pthread_mutex_init (&mutex, NULL);
+       x |= pthread_mutex_lock (&mutex);
+       x |= pthread_mutex_unlock (&mutex);
+       x |= pthread_mutex_destroy (&mutex);
+       return 0;
+}
+
+int test_mutex_attr (void)
+{
+       int x = 0;
+       pthread_mutexattr_t attr;
+       pthread_mutex_t mutex;
+       x |= pthread_mutexattr_init (&attr);
+       x |= pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
+       x |= pthread_mutex_init (&mutex, &attr);
+       x |= pthread_mutex_lock (&mutex);
+       x |= pthread_mutex_unlock (&mutex);
+       x |= pthread_mutex_destroy (&mutex);
+       x |= pthread_mutexattr_destroy (&attr);
+       return x;
+}
+
+pthread_once_t once_control = PTHREAD_ONCE_INIT;
+void test_once_init (void) {}
+int test_once (void)
+{
+       return pthread_once (&once_control, test_once_init);
+}
+
+pthread_key_t test_specific_key;
+int test_specific (void)
+{
+       int x = 0;
+       x |= pthread_key_create (&test_specific_key, NULL);
+       x |= pthread_setspecific (test_specific_key, NULL);
+       x |= pthread_getspecific (test_specific_key) != NULL;
+       return x;
+}
+
+void cleaner (void *arg) { (void)arg; }
+
+void *
+test_thread_main (void *arg)
+{
+       pthread_cleanup_push (cleaner, arg);
+       pthread_exit (arg);
+       pthread_cleanup_pop (1);
+       return arg;
+}
+
+int
+test_threads (void)
+{
+       int x = 0;
+       pthread_t thread;
+       pthread_attr_t attr;
+       void *arg = NULL;
+       x |= pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+       x |= pthread_create (&thread, &attr, test_thread_main, arg);
+       x |= pthread_equal (pthread_self(), thread);
+       x |= pthread_join (thread, &arg);
+       x |= pthread_attr_destroy (&attr);
+       return x;
+}"'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS -pthread";
+                LIBS="$LIBS "
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               real_pthread_CFLAGS="-pthread";
+                real_pthread_LIBS="";
+                have_real_pthread=yes
+       else
+               real_pthread_CFLAGS="";
+                real_pthread_LIBS="";
+                have_real_pthread="no (can't link with -lpthread or -pthread)"
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+       fi
+       PTHREAD_CFLAGS=
+       PTHREAD_LIBS=
+
+                               have_pthread="no"
+       if test "x$enable_pthread" != "xyes"; then
+                               # AC_LANG_PROGRAM() produces a main() w/o args,
+       # but -Wold-style-definition doesn't like that.
+       # We need _some_ program so that we don't get
+       # warnings about empty compilation units, so always
+       # append a reasonable main().
+       _compile_program="#ifndef _GNU_SOURCE
+#define _GNU_SOURCE /* for PTHREAD_MUTEX_INITIALIZER under linux */
+#endif
+#include <pthread.h>
+
+pthread_mutex_t test_mutex_initializer = PTHREAD_MUTEX_INITIALIZER;
+int test_mutex (void)
+{
+       int x = 0;
+       pthread_mutex_t mutex;
+       x |= pthread_mutex_init (&mutex, NULL);
+       x |= pthread_mutex_lock (&mutex);
+       x |= pthread_mutex_unlock (&mutex);
+       x |= pthread_mutex_destroy (&mutex);
+       return 0;
+}
+
+int test_mutex_attr (void)
+{
+       int x = 0;
+       pthread_mutexattr_t attr;
+       pthread_mutex_t mutex;
+       x |= pthread_mutexattr_init (&attr);
+       x |= pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
+       x |= pthread_mutex_init (&mutex, &attr);
+       x |= pthread_mutex_lock (&mutex);
+       x |= pthread_mutex_unlock (&mutex);
+       x |= pthread_mutex_destroy (&mutex);
+       x |= pthread_mutexattr_destroy (&attr);
+       return x;
+}"'
+               int main(int c, char **v) { (void)c; (void)v; return 0; }'
+
+       _save_cflags="$CFLAGS"
+       _save_ldflags="$LDFLAGS"
+       _save_libs="$LIBS"
+       CFLAGS="$CFLAGS -D_REENTRANT";
+                LIBS="$LIBS "
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$_compile_program
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=yes
+else
+  cairo_cc_stderr=`test -f conftest.err && cat conftest.err`
+                cairo_cc_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+       if test "x$cairo_cc_stderr" != "x"; then
+               cairo_cc_flag=no
+       fi
+
+       if test "x$cairo_cc_flag" = "xyes"; then
+               pthread_CFLAGS="-D_REENTRANT";
+                pthread_LIBS="";
+                have_pthread=yes
+       else
+               pthread_CFLAGS="";
+                pthread_LIBS="";
+
+       fi
+       CFLAGS="$_save_cflags"
+       LDFLAGS="$_save_ldflags"
+       LIBS="$_save_libs"
+
+
+       fi
+
+               if test "x$have_pthread" != "xyes"; then
+               have_pthread="$have_real_pthread";
+               pthread_CFLAGS="$real_pthread_CFLAGS";
+               pthread_LIBS="$real_pthread_LIBS";
+       fi
+
+               if test "x$have_real_pthread" = "xyes"; then
+
+$as_echo "#define CAIRO_HAS_REAL_PTHREAD 1" >>confdefs.h
+
+       fi
+       if test "x$have_pthread" = "xyes"; then
+
+$as_echo "#define CAIRO_HAS_PTHREAD 1" >>confdefs.h
+
+       fi
+
+               if test "x$enable_pthread" = "xyes" -a "x$have_pthread" != "xyes"; then
+               as_fn_error $? "pthread requested but not found" "$LINENO" 5
+       fi
+
+               use_pthread="$have_pthread"
+       pthread_REQUIRES=""
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's pthread feature could be enabled" >&5
+$as_echo_n "checking whether cairo's pthread feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_pthread" >&5
+$as_echo "$use_pthread" >&6; }
+
+               if test "x$enable_pthread" = "xyes" -a "x$use_pthread" != xyes; then :
+                       as_fn_error $? " pthread feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-pthread: \`$use_pthread', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_pthread" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$pthread_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$pthread_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$pthread_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$pthread_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$pthread_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset pthread_BASE
+unset pthread_REQUIRES
+unset pthread_CFLAGS
+unset pthread_NONPKGCONFIG_CFLAGS
+unset pthread_LIBS
+unset pthread_NONPKGCONFIG_LIBS
+unset pthread_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_pthread" = xyes; then
+  CAIRO_HAS_PTHREAD_TRUE=
+  CAIRO_HAS_PTHREAD_FALSE='#'
+else
+  CAIRO_HAS_PTHREAD_TRUE='#'
+  CAIRO_HAS_PTHREAD_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_PTHREAD=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+                                                                               cr_make_tmp='all_cairo_private += $(cairo_pthread_private) $(cairo_pthread_headers)
+all_cairo_cxx_sources += $(cairo_pthread_cxx_sources)
+all_cairo_sources += $(cairo_pthread_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_private += $(cairo_boilerplate_pthread_private) $(cairo_boilerplate_pthread_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pthread_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_pthread_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_private += $(cairo_pthread_private) $(cairo_pthread_headers)
+enabled_cairo_cxx_sources += $(cairo_pthread_cxx_sources)
+enabled_cairo_sources += $(cairo_pthread_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_PTHREAD'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_PTHREAD),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_private += $(cairo_boilerplate_pthread_private) $(cairo_boilerplate_pthread_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pthread_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_pthread_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_PTHREAD'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_PTHREAD),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+                                       if test "x$use_pthread" = xyes; then :
+  :
+
+$as_echo "#define CAIRO_HAS_PTHREAD 1" >>confdefs.h
+
+
+
+fi
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_PTHREAD 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_PTHREAD),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+ if test "x$use_pthread" = "xyes" -a "x$have_real_pthread" = "xyes"; then
+  HAVE_REAL_PTHREAD_TRUE=
+  HAVE_REAL_PTHREAD_FALSE='#'
+else
+  HAVE_REAL_PTHREAD_TRUE='#'
+  HAVE_REAL_PTHREAD_FALSE=
+fi
+
+ if test "x$use_pthread" = "xyes"; then
+  HAVE_PTHREAD_TRUE=
+  HAVE_PTHREAD_FALSE='#'
+else
+  HAVE_PTHREAD_TRUE='#'
+  HAVE_PTHREAD_FALSE=
+fi
+
+
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-gobject was given.
+if test "${enable_gobject+set}" = set; then :
+  enableval=$enable_gobject; enable_gobject=$enableval
+else
+  enable_gobject=auto
+fi
+
+                       case $enable_gobject in #(
+  no) :
+               use_gobject="no (disabled, use --enable-gobject to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's gobject functions feature" >&5
+$as_echo_n "checking for cairo's gobject functions feature... " >&6; }
+               echo
+
+               use_gobject=yes
+                       gobject_BASE="cairo"
+gobject_REQUIRES="$ac_env_gobject_REQUIRES_value"
+gobject_CFLAGS="$ac_env_gobject_CFLAGS_value"
+gobject_NONPKGCONFIG_CFLAGS="$ac_env_gobject_NONPKGCONFIG_CFLAGS_value"
+gobject_LIBS="$ac_env_gobject_LIBS_value"
+gobject_NONPKGCONFIG_LIBS="$ac_env_gobject_NONPKGCONFIG_LIBS_value"
+gobject_NONPKGCONFIG_EXTRA_LIBS="$ac_env_gobject_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+  gobject_REQUIRES="gobject-2.0 glib-2.0"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5
+$as_echo_n "checking for GOBJECT... " >&6; }
+
+if test -n "$GOBJECT_CFLAGS"; then
+    pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gobject_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$gobject_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "$gobject_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GOBJECT_LIBS"; then
+    pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gobject_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$gobject_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "$gobject_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$gobject_REQUIRES" 2>&1`
+        else
+               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --print-errors "$gobject_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$GOBJECT_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  use_gobject="no (requires $gobject_REQUIRES http://download.gnome.org/pub/GNOME/sources/glib/)"
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  use_gobject="no (requires $gobject_REQUIRES http://download.gnome.org/pub/GNOME/sources/glib/)"
+else
+       GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS
+       GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+  gobject_NONPKGCONFIG_EXTRA_LIBS="-L\${libdir} -lcairo-gobject"
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's gobject functions feature could be enabled" >&5
+$as_echo_n "checking whether cairo's gobject functions feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_gobject" >&5
+$as_echo "$use_gobject" >&6; }
+
+               if test "x$enable_gobject" = "xyes" -a "x$use_gobject" != xyes; then :
+                       as_fn_error $? " gobject functions feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-gobject: \`$use_gobject', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_gobject" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$gobject_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$gobject_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$gobject_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$gobject_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$gobject_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset gobject_BASE
+unset gobject_REQUIRES
+unset gobject_CFLAGS
+unset gobject_NONPKGCONFIG_CFLAGS
+unset gobject_LIBS
+unset gobject_NONPKGCONFIG_LIBS
+unset gobject_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_gobject" = xyes; then
+  CAIRO_HAS_GOBJECT_FUNCTIONS_TRUE=
+  CAIRO_HAS_GOBJECT_FUNCTIONS_FALSE='#'
+else
+  CAIRO_HAS_GOBJECT_FUNCTIONS_TRUE='#'
+  CAIRO_HAS_GOBJECT_FUNCTIONS_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_GOBJECT_FUNCTIONS=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='supported_cairo_headers += $(cairo_gobject_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='supported_cairo_boilerplate_headers += $(cairo_boilerplate_gobject_headers)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+                                                                               cr_make_tmp='all_cairo_headers += $(cairo_gobject_headers)
+all_cairo_private += $(cairo_gobject_private)
+all_cairo_cxx_sources += $(cairo_gobject_cxx_sources)
+all_cairo_sources += $(cairo_gobject_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_headers += $(cairo_boilerplate_gobject_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_gobject_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gobject_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_gobject_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_headers += $(cairo_gobject_headers)
+enabled_cairo_private += $(cairo_gobject_private)
+enabled_cairo_cxx_sources += $(cairo_gobject_cxx_sources)
+enabled_cairo_sources += $(cairo_gobject_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GOBJECT_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GOBJECT_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_headers += $(cairo_boilerplate_gobject_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_gobject_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gobject_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_gobject_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_GOBJECT_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_GOBJECT_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+                                       if test "x$use_gobject" = xyes; then :
+  :
+               ac_config_files="$ac_config_files src/cairo-gobject.pc:src/cairo-features.pc.in"
+
+
+fi
+                                       if test "x$use_gobject" = xyes; then :
+  :
+               ac_config_files="$ac_config_files cairo-gobject-uninstalled.pc:src/cairo-features-uninstalled.pc.in"
+
+
+fi
+                                                                               cr_make_tmp='all_cairo_pkgconf += cairo-gobject.pc'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_pkgconf += cairo-gobject.pc'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_GOBJECT_FUNCTIONS'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_GOBJECT_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+
+
+                                       if test "x$use_gobject" = xyes; then :
+  :
+                                       CAIRO_FEATURES="${CAIRO_FEATURES} "'CAIRO_HAS_GOBJECT_FUNCTIONS'
+
+
+fi
+                                                                               CAIRO_SUPPORTED_FEATURES="${CAIRO_SUPPORTED_FEATURES} "'CAIRO_HAS_GOBJECT_FUNCTIONS'
+
+
+
+                                       if test "x$use_gobject" != xyes; then :
+  :
+                                       CAIRO_NO_FEATURES="${CAIRO_NO_FEATURES} "'CAIRO_HAS_GOBJECT_FUNCTIONS'
+
+
+
+fi
+
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_GOBJECT_FUNCTIONS 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_GOBJECT_FUNCTIONS),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+if test "x$use_gobject" = "xyes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5
+$as_echo_n "checking for GOBJECT... " >&6; }
+
+if test -n "$GOBJECT_CFLAGS"; then
+    pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gobject_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$gobject_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "$gobject_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GOBJECT_LIBS"; then
+    pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gobject_REQUIRES\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$gobject_REQUIRES") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "$gobject_REQUIRES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$gobject_REQUIRES" 2>&1`
+        else
+               GOBJECT_PKG_ERRORS=`$PKG_CONFIG --print-errors "$gobject_REQUIRES" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$GOBJECT_PKG_ERRORS" >&5
+
+       as_fn_error $? "Package requirements ($gobject_REQUIRES) were not met:
+
+$GOBJECT_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GOBJECT_CFLAGS
+and GOBJECT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GOBJECT_CFLAGS
+and GOBJECT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+       GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS
+       GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+fi
+
+
+# Check whether --enable-full-testing was given.
+if test "${enable_full_testing+set}" = set; then :
+  enableval=$enable_full_testing;
+if test "x$enableval" = "xyes"; then
+    CAIRO_TEST_MODE=full
+
+fi
+
+fi
+
+
+ if test "x$any2ppm_svg" = "xyes" \
+                -o "x$any2ppm_pdf" = "xyes" \
+                -o "x$any2ppm_ps"  = "xyes" \
+                -o "x$any2ppm_cs"  = "xyes"; then
+  BUILD_ANY2PPM_TRUE=
+  BUILD_ANY2PPM_FALSE='#'
+else
+  BUILD_ANY2PPM_TRUE='#'
+  BUILD_ANY2PPM_FALSE=
+fi
+
+
+
+case $host in
+*-*-darwin*)
+       SHLIB_EXT="dylib"
+       ;;
+*)
+       SHLIB_EXT="so"
+       ;;
+esac
+
+cat >>confdefs.h <<_ACEOF
+#define SHARED_LIB_EXT "${SHLIB_EXT}"
+_ACEOF
+
+
+
+
+case $host in
+*-linux*|*-*bsd*|*-solaris*|*-*-darwin*|*-dragonfly*|*-*-gnu*)
+       have_ld_preload="yes"
+       ;;
+*)
+       have_ld_preload="no"
+       ;;
+esac
+
+                                                                                                                               # Check whether --enable-trace was given.
+if test "${enable_trace+set}" = set; then :
+  enableval=$enable_trace; enable_trace=$enableval
+else
+  enable_trace=auto
+fi
+
+                       case $enable_trace in #(
+  no) :
+               use_trace="no (disabled, use --enable-trace to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's cairo-trace feature" >&5
+$as_echo_n "checking for cairo's cairo-trace feature... " >&6; }
+               echo
+
+               use_trace=yes
+                       trace_BASE="cairo"
+trace_REQUIRES="$ac_env_trace_REQUIRES_value"
+trace_CFLAGS="$ac_env_trace_CFLAGS_value"
+trace_NONPKGCONFIG_CFLAGS="$ac_env_trace_NONPKGCONFIG_CFLAGS_value"
+trace_LIBS="$ac_env_trace_LIBS_value"
+trace_NONPKGCONFIG_LIBS="$ac_env_trace_NONPKGCONFIG_LIBS_value"
+trace_NONPKGCONFIG_EXTRA_LIBS="$ac_env_trace_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+       if test "x$have_ld_preload" != "xyes" -o \
+               "x$have_libz" != "xyes" -o \
+               "x$have_real_pthread" != "xyes" -o \
+               "x$have_dlsym" != "xyes"; then
+               use_trace="no (requires dynamic linker and zlib and real pthreads)"
+       fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's cairo-trace feature could be enabled" >&5
+$as_echo_n "checking whether cairo's cairo-trace feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_trace" >&5
+$as_echo "$use_trace" >&6; }
+
+               if test "x$enable_trace" = "xyes" -a "x$use_trace" != xyes; then :
+                       as_fn_error $? " cairo-trace feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-trace: \`$use_trace', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_trace" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$trace_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$trace_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$trace_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$trace_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$trace_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset trace_BASE
+unset trace_REQUIRES
+unset trace_CFLAGS
+unset trace_NONPKGCONFIG_CFLAGS
+unset trace_LIBS
+unset trace_NONPKGCONFIG_LIBS
+unset trace_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_trace" = xyes; then
+  CAIRO_HAS_TRACE_TRUE=
+  CAIRO_HAS_TRACE_FALSE='#'
+else
+  CAIRO_HAS_TRACE_TRUE='#'
+  CAIRO_HAS_TRACE_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_TRACE=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+                                                                               cr_make_tmp='all_cairo_private += $(cairo_trace_private) $(cairo_trace_headers)
+all_cairo_cxx_sources += $(cairo_trace_cxx_sources)
+all_cairo_sources += $(cairo_trace_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_private += $(cairo_boilerplate_trace_private) $(cairo_boilerplate_trace_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_trace_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_trace_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_private += $(cairo_trace_private) $(cairo_trace_headers)
+enabled_cairo_cxx_sources += $(cairo_trace_cxx_sources)
+enabled_cairo_sources += $(cairo_trace_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_TRACE'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_TRACE),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_private += $(cairo_boilerplate_trace_private) $(cairo_boilerplate_trace_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_trace_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_trace_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_TRACE'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_TRACE),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+                                       if test "x$use_trace" = xyes; then :
+  :
+
+$as_echo "#define CAIRO_HAS_TRACE 1" >>confdefs.h
+
+
+
+fi
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_TRACE 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_TRACE),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+                                                                                                                               # Check whether --enable-interpreter was given.
+if test "${enable_interpreter+set}" = set; then :
+  enableval=$enable_interpreter; enable_interpreter=$enableval
+else
+  enable_interpreter=yes
+fi
+
+                       case $enable_interpreter in #(
+  no) :
+               use_interpreter="no (disabled, use --enable-interpreter to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's cairo-script-interpreter feature" >&5
+$as_echo_n "checking for cairo's cairo-script-interpreter feature... " >&6; }
+               echo
+
+               use_interpreter=yes
+                       interpreter_BASE="cairo"
+interpreter_REQUIRES="$ac_env_interpreter_REQUIRES_value"
+interpreter_CFLAGS="$ac_env_interpreter_CFLAGS_value"
+interpreter_NONPKGCONFIG_CFLAGS="$ac_env_interpreter_NONPKGCONFIG_CFLAGS_value"
+interpreter_LIBS="$ac_env_interpreter_LIBS_value"
+interpreter_NONPKGCONFIG_LIBS="$ac_env_interpreter_NONPKGCONFIG_LIBS_value"
+interpreter_NONPKGCONFIG_EXTRA_LIBS="$ac_env_interpreter_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+       if test "x$have_libz" != "xyes"; then
+               use_interpreter="no (requires zlib)"
+       fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's cairo-script-interpreter feature could be enabled" >&5
+$as_echo_n "checking whether cairo's cairo-script-interpreter feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_interpreter" >&5
+$as_echo "$use_interpreter" >&6; }
+
+               if test "x$enable_interpreter" = "xyes" -a "x$use_interpreter" != xyes; then :
+                       as_fn_error $? "recommended cairo-script-interpreter feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-interpreter: \`$use_interpreter', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_interpreter" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$interpreter_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$interpreter_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$interpreter_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$interpreter_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$interpreter_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset interpreter_BASE
+unset interpreter_REQUIRES
+unset interpreter_CFLAGS
+unset interpreter_NONPKGCONFIG_CFLAGS
+unset interpreter_LIBS
+unset interpreter_NONPKGCONFIG_LIBS
+unset interpreter_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_interpreter" = xyes; then
+  CAIRO_HAS_INTERPRETER_TRUE=
+  CAIRO_HAS_INTERPRETER_FALSE='#'
+else
+  CAIRO_HAS_INTERPRETER_TRUE='#'
+  CAIRO_HAS_INTERPRETER_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_INTERPRETER=1'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+                                                                               cr_make_tmp='all_cairo_private += $(cairo_interpreter_private) $(cairo_interpreter_headers)
+all_cairo_cxx_sources += $(cairo_interpreter_cxx_sources)
+all_cairo_sources += $(cairo_interpreter_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_private += $(cairo_boilerplate_interpreter_private) $(cairo_boilerplate_interpreter_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_interpreter_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_interpreter_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_private += $(cairo_interpreter_private) $(cairo_interpreter_headers)
+enabled_cairo_cxx_sources += $(cairo_interpreter_cxx_sources)
+enabled_cairo_sources += $(cairo_interpreter_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_INTERPRETER'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_INTERPRETER),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_private += $(cairo_boilerplate_interpreter_private) $(cairo_boilerplate_interpreter_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_interpreter_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_interpreter_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_INTERPRETER'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_INTERPRETER),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+                                       if test "x$use_interpreter" = xyes; then :
+  :
+
+$as_echo "#define CAIRO_HAS_INTERPRETER 1" >>confdefs.h
+
+
+
+fi
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_INTERPRETER 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_INTERPRETER),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+                                       if test "x$use_interpreter" != xyes; then :
+  :
+                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'+++ It is strongly recommended that you do NOT disable the
++++ cairo-script-interpreter feature.'
+
+
+
+fi
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bfd_openr in -lbfd" >&5
+$as_echo_n "checking for bfd_openr in -lbfd... " >&6; }
+if test "${ac_cv_lib_bfd_bfd_openr+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbfd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bfd_openr ();
+int
+main ()
+{
+return bfd_openr ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bfd_bfd_openr=yes
+else
+  ac_cv_lib_bfd_bfd_openr=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bfd_bfd_openr" >&5
+$as_echo "$ac_cv_lib_bfd_bfd_openr" >&6; }
+if test "x$ac_cv_lib_bfd_bfd_openr" = x""yes; then :
+  ac_fn_c_check_header_mongrel "$LINENO" "bfd.h" "ac_cv_header_bfd_h" "$ac_includes_default"
+if test "x$ac_cv_header_bfd_h" = x""yes; then :
+  have_bfd=yes
+else
+  have_bfd=no
+fi
+
+
+else
+  have_bfd=no
+fi
+
+ac_fn_c_check_header_mongrel "$LINENO" "libiberty.h" "ac_cv_header_libiberty_h" "$ac_includes_default"
+if test "x$ac_cv_header_libiberty_h" = x""yes; then :
+
+else
+  have_bfd=no
+fi
+
+
+if test "x$have_bfd" = "xyes"; then
+
+$as_echo "#define HAVE_BFD 1" >>confdefs.h
+
+    BFD_LIBS=-lbfd
+
+fi
+
+                                                                                                                               # Check whether --enable-symbol-lookup was given.
+if test "${enable_symbol_lookup+set}" = set; then :
+  enableval=$enable_symbol_lookup; enable_symbol_lookup=$enableval
+else
+  enable_symbol_lookup=auto
+fi
+
+                       case $enable_symbol_lookup in #(
+  no) :
+               use_symbol_lookup="no (disabled, use --enable-symbol-lookup to enable)"
+        ;; #(
+       yes|auto) :
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo's symbol-lookup feature" >&5
+$as_echo_n "checking for cairo's symbol-lookup feature... " >&6; }
+               echo
+
+               use_symbol_lookup=yes
+                       symbol_lookup_BASE="cairo"
+symbol_lookup_REQUIRES="$ac_env_symbol_lookup_REQUIRES_value"
+symbol_lookup_CFLAGS="$ac_env_symbol_lookup_CFLAGS_value"
+symbol_lookup_NONPKGCONFIG_CFLAGS="$ac_env_symbol_lookup_NONPKGCONFIG_CFLAGS_value"
+symbol_lookup_LIBS="$ac_env_symbol_lookup_LIBS_value"
+symbol_lookup_NONPKGCONFIG_LIBS="$ac_env_symbol_lookup_NONPKGCONFIG_LIBS_value"
+symbol_lookup_NONPKGCONFIG_EXTRA_LIBS="$ac_env_symbol_lookup_NONPKGCONFIG_EXTRA_LIBS_value"
+
+
+
+       if test "x$have_bfd" != "xyes"; then
+               use_symbol_lookup="no (requires bfd)"
+       fi
+
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's symbol-lookup feature could be enabled" >&5
+$as_echo_n "checking whether cairo's symbol-lookup feature could be enabled... " >&6; }
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_symbol_lookup" >&5
+$as_echo "$use_symbol_lookup" >&6; }
+
+               if test "x$enable_symbol_lookup" = "xyes" -a "x$use_symbol_lookup" != xyes; then :
+                       as_fn_error $? " symbol-lookup feature could not be enabled" "$LINENO" 5
+
+fi      ;; #(
+  *) :
+                       as_fn_error $? "invalid argument passed to --enable-symbol-lookup: \`$use_symbol_lookup', should be one of [no/auto/yes]" "$LINENO" 5
+        ;;
+esac
+       if test "x$use_symbol_lookup" = "xyes"; then :
+                                                                               CAIRO_REQUIRES="$symbol_lookup_REQUIRES"" ${CAIRO_REQUIRES}"
+
+                                                                       CAIRO_CFLAGS="$symbol_lookup_CFLAGS"" ${CAIRO_CFLAGS}"
+
+                                                                       CAIRO_NONPKGCONFIG_CFLAGS="$symbol_lookup_NONPKGCONFIG_CFLAGS"" ${CAIRO_NONPKGCONFIG_CFLAGS}"
+
+                                                                       CAIRO_LIBS="$symbol_lookup_LIBS"" ${CAIRO_LIBS}"
+
+                                                                       CAIRO_NONPKGCONFIG_LIBS="$symbol_lookup_NONPKGCONFIG_LIBS"" ${CAIRO_NONPKGCONFIG_LIBS}"
+
+
+else
+                                       unset symbol_lookup_BASE
+unset symbol_lookup_REQUIRES
+unset symbol_lookup_CFLAGS
+unset symbol_lookup_NONPKGCONFIG_CFLAGS
+unset symbol_lookup_LIBS
+unset symbol_lookup_NONPKGCONFIG_LIBS
+unset symbol_lookup_NONPKGCONFIG_EXTRA_LIBS
+
+
+fi
+
+                                                        if test "x$use_symbol_lookup" = xyes; then
+  CAIRO_HAS_SYMBOL_LOOKUP_TRUE=
+  CAIRO_HAS_SYMBOL_LOOKUP_FALSE='#'
+else
+  CAIRO_HAS_SYMBOL_LOOKUP_TRUE='#'
+  CAIRO_HAS_SYMBOL_LOOKUP_FALSE=
+fi
+
+
+                                                                               cr_make_tmp='CAIRO_HAS_SYMBOL_LOOKUP=0'
+                                                                                                               CAIRO_MAKEFILE___WIN32="${CAIRO_MAKEFILE___WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp=''
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+
+
+
+
+                                                                               cr_make_tmp='all_cairo_private += $(cairo_symbol_lookup_private) $(cairo_symbol_lookup_headers)
+all_cairo_cxx_sources += $(cairo_symbol_lookup_cxx_sources)
+all_cairo_sources += $(cairo_symbol_lookup_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                                                               cr_make_tmp='all_cairo_boilerplate_private += $(cairo_boilerplate_symbol_lookup_private) $(cairo_boilerplate_symbol_lookup_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_symbol_lookup_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_symbol_lookup_sources)'
+                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+
+                                                                                                               CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+
+
+                                                                               cr_make_tmp='enabled_cairo_private += $(cairo_symbol_lookup_private) $(cairo_symbol_lookup_headers)
+enabled_cairo_cxx_sources += $(cairo_symbol_lookup_cxx_sources)
+enabled_cairo_sources += $(cairo_symbol_lookup_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'if CAIRO_HAS_SYMBOL_LOOKUP'
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_AMAKE="${CAIRO_MAKEFILE_cairo_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'ifeq ($(CAIRO_HAS_SYMBOL_LOOKUP),1)'
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_WIN32="${CAIRO_MAKEFILE_cairo_WIN32}
+"'endif'
+                                                                       cr_make_tmp='enabled_cairo_boilerplate_private += $(cairo_boilerplate_symbol_lookup_private) $(cairo_boilerplate_symbol_lookup_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_symbol_lookup_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_symbol_lookup_sources)'
+                                                                               CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'if CAIRO_HAS_SYMBOL_LOOKUP'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_AMAKE="${CAIRO_MAKEFILE_cairo_boilerplate_AMAKE}
+"'endif'
+
+                                                                                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'ifeq ($(CAIRO_HAS_SYMBOL_LOOKUP),1)'
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_cairo_boilerplate_WIN32="${CAIRO_MAKEFILE_cairo_boilerplate_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+                                       if test "x$use_symbol_lookup" = xyes; then :
+  :
+
+$as_echo "#define CAIRO_HAS_SYMBOL_LOOKUP 1" >>confdefs.h
+
+
+
+fi
+                                                                               cr_make_tmp='   @echo "#define CAIRO_HAS_SYMBOL_LOOKUP 1" >> $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'ifeq ($(CAIRO_HAS_SYMBOL_LOOKUP),1)'
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+"'endif'
+
+
+
+
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glib" >&5
+$as_echo_n "checking for glib... " >&6; }
+
+if test -n "$glib_CFLAGS"; then
+    pkg_cv_glib_CFLAGS="$glib_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_glib_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$glib_LIBS"; then
+    pkg_cv_glib_LIBS="$glib_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_glib_LIBS=`$PKG_CONFIG --libs "glib-2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               glib_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0" 2>&1`
+        else
+               glib_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$glib_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                have_glib=no
+elif test $pkg_failed = untried; then
+       have_glib=no
+else
+       glib_CFLAGS=$pkg_cv_glib_CFLAGS
+       glib_LIBS=$pkg_cv_glib_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       have_glib=yes
+fi
+
+
+ if test "x$have_glib" = "xyes"; then
+  BUILD_SPHINX_TRUE=
+  BUILD_SPHINX_FALSE='#'
+else
+  BUILD_SPHINX_TRUE='#'
+  BUILD_SPHINX_FALSE=
+fi
+
+
+save_LIBS="$LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shm_open in -lrt" >&5
+$as_echo_n "checking for shm_open in -lrt... " >&6; }
+if test "${ac_cv_lib_rt_shm_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shm_open ();
+int
+main ()
+{
+return shm_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_rt_shm_open=yes
+else
+  ac_cv_lib_rt_shm_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_shm_open" >&5
+$as_echo "$ac_cv_lib_rt_shm_open" >&6; }
+if test "x$ac_cv_lib_rt_shm_open" = x""yes; then :
+  shm_LIBS="-lrt"
+fi
+
+
+LIBS="$save_LIBS"
+
+
+# Check whether --enable-some-floating-point was given.
+if test "${enable_some_floating_point+set}" = set; then :
+  enableval=$enable_some_floating_point;
+if test "x$enableval" = "xno"; then
+  # A value of 'no' for $enableval means that they want to disable, which
+  # means 'yes' for $disable_some_floating_point.
+  disable_some_floating_point=yes
+fi
+
+else
+  disable_some_floating_point=no
+fi
+
+
+ if test "x$disable_some_floating_point" = "xyes"; then
+  DISABLE_SOME_FLOATING_POINT_TRUE=
+  DISABLE_SOME_FLOATING_POINT_FALSE='#'
+else
+  DISABLE_SOME_FLOATING_POINT_TRUE='#'
+  DISABLE_SOME_FLOATING_POINT_FALSE=
+fi
+
+if test "x$disable_some_floating_point" = "xyes"; then
+
+$as_echo "#define DISABLE_SOME_FLOATING_POINT 1" >>confdefs.h
+
+fi
+
+
+need_cxx="no"
+if test "x$use_skia" = "xyes"; then :
+  need_cxx="yes"
+fi
+if test "x$use_qt" = "xyes"; then :
+  need_cxx="yes"
+fi
+if test "x$use_beos" = "xyes"; then :
+  need_cxx="yes"
+fi
+
+ if test "x$need_cxx" = "xyes"; then
+  BUILD_CXX_TRUE=
+  BUILD_CXX_FALSE='#'
+else
+  BUILD_CXX_TRUE='#'
+  BUILD_CXX_FALSE=
+fi
+
+
+
+# We use GTK+ for some utility/debugging tools
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gtk" >&5
+$as_echo_n "checking for gtk... " >&6; }
+
+if test -n "$gtk_CFLAGS"; then
+    pkg_cv_gtk_CFLAGS="$gtk_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\"gtk+-2.0\"\""; } >&5
+  ($PKG_CONFIG --exists --print-errors ""gtk+-2.0"") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_gtk_CFLAGS=`$PKG_CONFIG --cflags ""gtk+-2.0"" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$gtk_LIBS"; then
+    pkg_cv_gtk_LIBS="$gtk_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\"gtk+-2.0\"\""; } >&5
+  ($PKG_CONFIG --exists --print-errors ""gtk+-2.0"") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_gtk_LIBS=`$PKG_CONFIG --libs ""gtk+-2.0"" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               gtk_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors ""gtk+-2.0"" 2>&1`
+        else
+               gtk_PKG_ERRORS=`$PKG_CONFIG --print-errors ""gtk+-2.0"" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$gtk_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                have_gtk=no
+elif test $pkg_failed = untried; then
+       have_gtk=no
+else
+       gtk_CFLAGS=$pkg_cv_gtk_CFLAGS
+       gtk_LIBS=$pkg_cv_gtk_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       have_gtk=yes
+fi
+ if test "x$have_gtk" = "xyes"; then
+  HAVE_GTK_TRUE=
+  HAVE_GTK_FALSE='#'
+else
+  HAVE_GTK_TRUE='#'
+  HAVE_GTK_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files Makefile boilerplate/Makefile src/Makefile test/Makefile test/pdiff/Makefile perf/Makefile perf/micro/Makefile util/Makefile util/cairo-fdr/Makefile util/cairo-gobject/Makefile util/cairo-missing/Makefile util/cairo-script/Makefile util/cairo-script/examples/Makefile util/cairo-sphinx/Makefile util/cairo-trace/Makefile util/cairo-trace/cairo-trace doc/Makefile doc/public/Makefile"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+CAIRO_CFLAGS="$CAIRO_CFLAGS $CAIRO_NONPKGCONFIG_CFLAGS"
+CAIRO_LIBS="$CAIRO_LIBS $CAIRO_NONPKGCONFIG_LIBS"
+
+                                                               cr_make_tmp='   @echo "#endif" >>  $(top_srcdir)/src/cairo-features.h'
+                                                                                                       CAIRO_MAKEFILE_win32_features_h_WIN32="${CAIRO_MAKEFILE_win32_features_h_WIN32}
+""$cr_make_tmp"
+
+
+
+       if test -z "$CAIRO_NATIVE_SURFACE_BACKENDS"; then :
+                                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'*** No native surface backends enabled for your platform. It is strongly
+*** recommended that you enable the native surface backend feature for your
+*** platform.'
+
+
+fi
+       if test -z "$CAIRO_NATIVE_FONT_BACKENDS"; then :
+                                                       CAIRO_WARNING_MESSAGE="${CAIRO_WARNING_MESSAGE}
+
+"'*** No native font backends enabled for your platform. It is strongly
+*** recommended that you enable the native font backend feature for your
+*** platform.'
+
+
+fi
+
+if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then
+  as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then
+  as_fn_error $? "conditional \"OS_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_SHM_TRUE}" && test -z "${HAVE_SHM_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_SHM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_LCOV_TRUE}" && test -z "${CAIRO_HAS_LCOV_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_LCOV\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_DL_TRUE}" && test -z "${CAIRO_HAS_DL_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_DL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_DLSYM_TRUE}" && test -z "${CAIRO_HAS_DLSYM_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_DLSYM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_XLIB_SURFACE_TRUE}" && test -z "${CAIRO_HAS_XLIB_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_XLIB_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_XLIB_XRENDER_SURFACE_TRUE}" && test -z "${CAIRO_HAS_XLIB_XRENDER_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_XLIB_XRENDER_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_XCB_SURFACE_TRUE}" && test -z "${CAIRO_HAS_XCB_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_XCB_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_XLIB_XCB_FUNCTIONS_TRUE}" && test -z "${CAIRO_HAS_XLIB_XCB_FUNCTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_XLIB_XCB_FUNCTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_XCB_SHM_FUNCTIONS_TRUE}" && test -z "${CAIRO_HAS_XCB_SHM_FUNCTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_XCB_SHM_FUNCTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_QT_SURFACE_TRUE}" && test -z "${CAIRO_HAS_QT_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_QT_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_QUARTZ_SURFACE_TRUE}" && test -z "${CAIRO_HAS_QUARTZ_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_QUARTZ_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_QUARTZ_FONT_TRUE}" && test -z "${CAIRO_HAS_QUARTZ_FONT_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_QUARTZ_FONT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_QUARTZ_IMAGE_SURFACE_TRUE}" && test -z "${CAIRO_HAS_QUARTZ_IMAGE_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_QUARTZ_IMAGE_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_WIN32_SURFACE_TRUE}" && test -z "${CAIRO_HAS_WIN32_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_WIN32_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_WIN32_FONT_TRUE}" && test -z "${CAIRO_HAS_WIN32_FONT_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_WIN32_FONT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_TRUE}" && test -z "${CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_SKIA_SURFACE_TRUE}" && test -z "${CAIRO_HAS_SKIA_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_SKIA_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_OS2_SURFACE_TRUE}" && test -z "${CAIRO_HAS_OS2_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_OS2_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_BEOS_SURFACE_TRUE}" && test -z "${CAIRO_HAS_BEOS_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_BEOS_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_DRM_SURFACE_TRUE}" && test -z "${CAIRO_HAS_DRM_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_DRM_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_GALLIUM_SURFACE_TRUE}" && test -z "${CAIRO_HAS_GALLIUM_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_GALLIUM_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_PNG_FUNCTIONS_TRUE}" && test -z "${CAIRO_HAS_PNG_FUNCTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_PNG_FUNCTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_GL_SURFACE_TRUE}" && test -z "${CAIRO_HAS_GL_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_GL_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_GLESV2_SURFACE_TRUE}" && test -z "${CAIRO_HAS_GLESV2_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_GLESV2_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_COGL_SURFACE_TRUE}" && test -z "${CAIRO_HAS_COGL_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_COGL_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_DIRECTFB_SURFACE_TRUE}" && test -z "${CAIRO_HAS_DIRECTFB_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_DIRECTFB_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_VG_SURFACE_TRUE}" && test -z "${CAIRO_HAS_VG_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_VG_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_EGL_FUNCTIONS_TRUE}" && test -z "${CAIRO_HAS_EGL_FUNCTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_EGL_FUNCTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_GLX_FUNCTIONS_TRUE}" && test -z "${CAIRO_HAS_GLX_FUNCTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_GLX_FUNCTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_WGL_FUNCTIONS_TRUE}" && test -z "${CAIRO_HAS_WGL_FUNCTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_WGL_FUNCTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_SCRIPT_SURFACE_TRUE}" && test -z "${CAIRO_HAS_SCRIPT_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_SCRIPT_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_FT_FONT_TRUE}" && test -z "${CAIRO_HAS_FT_FONT_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_FT_FONT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_FC_FONT_TRUE}" && test -z "${CAIRO_HAS_FC_FONT_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_FC_FONT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_PS_SURFACE_TRUE}" && test -z "${CAIRO_HAS_PS_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_PS_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_CAN_TEST_PS_SURFACE_TRUE}" && test -z "${CAIRO_CAN_TEST_PS_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_CAN_TEST_PS_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_SPECTRE_TRUE}" && test -z "${CAIRO_HAS_SPECTRE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_SPECTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_PDF_SURFACE_TRUE}" && test -z "${CAIRO_HAS_PDF_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_PDF_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_CAN_TEST_PDF_SURFACE_TRUE}" && test -z "${CAIRO_CAN_TEST_PDF_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_CAN_TEST_PDF_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_MULTI_PAGE_SURFACES_TRUE}" && test -z "${CAIRO_HAS_MULTI_PAGE_SURFACES_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_MULTI_PAGE_SURFACES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_SVG_SURFACE_TRUE}" && test -z "${CAIRO_HAS_SVG_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_SVG_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_CAN_TEST_SVG_SURFACE_TRUE}" && test -z "${CAIRO_CAN_TEST_SVG_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_CAN_TEST_SVG_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_TEST_SURFACES_TRUE}" && test -z "${CAIRO_HAS_TEST_SURFACES_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_TEST_SURFACES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_TEE_SURFACE_TRUE}" && test -z "${CAIRO_HAS_TEE_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_TEE_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_XML_SURFACE_TRUE}" && test -z "${CAIRO_HAS_XML_SURFACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_XML_SURFACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_PTHREAD_TRUE}" && test -z "${CAIRO_HAS_PTHREAD_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_PTHREAD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_REAL_PTHREAD_TRUE}" && test -z "${HAVE_REAL_PTHREAD_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_REAL_PTHREAD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_PTHREAD_TRUE}" && test -z "${HAVE_PTHREAD_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PTHREAD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_GOBJECT_FUNCTIONS_TRUE}" && test -z "${CAIRO_HAS_GOBJECT_FUNCTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_GOBJECT_FUNCTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_ANY2PPM_TRUE}" && test -z "${BUILD_ANY2PPM_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_ANY2PPM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_TRACE_TRUE}" && test -z "${CAIRO_HAS_TRACE_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_TRACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_INTERPRETER_TRUE}" && test -z "${CAIRO_HAS_INTERPRETER_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_INTERPRETER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CAIRO_HAS_SYMBOL_LOOKUP_TRUE}" && test -z "${CAIRO_HAS_SYMBOL_LOOKUP_FALSE}"; then
+  as_fn_error $? "conditional \"CAIRO_HAS_SYMBOL_LOOKUP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_SPHINX_TRUE}" && test -z "${BUILD_SPHINX_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_SPHINX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DISABLE_SOME_FLOATING_POINT_TRUE}" && test -z "${DISABLE_SOME_FLOATING_POINT_FALSE}"; then
+  as_fn_error $? "conditional \"DISABLE_SOME_FLOATING_POINT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_CXX_TRUE}" && test -z "${BUILD_CXX_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_CXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_GTK_TRUE}" && test -z "${HAVE_GTK_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_GTK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='        ';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by cairo $as_me 1.12.3, which was
+generated by GNU Autoconf 2.67.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=cairo>.
+cairo home page: <http://cairographics.org/>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+cairo config.status 1.12.3
+configured by $0, generated by GNU Autoconf 2.67,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+CAIRO_MAKEFILE___WIN32='$CAIRO_MAKEFILE___WIN32'
+CAIRO_MAKEFILE_cairo_AMAKE='$CAIRO_MAKEFILE_cairo_AMAKE'
+CAIRO_MAKEFILE_cairo_WIN32='$CAIRO_MAKEFILE_cairo_WIN32'
+CAIRO_MAKEFILE_cairo_boilerplate_AMAKE='$CAIRO_MAKEFILE_cairo_boilerplate_AMAKE'
+CAIRO_MAKEFILE_cairo_boilerplate_WIN32='$CAIRO_MAKEFILE_cairo_boilerplate_WIN32'
+       CAIRO_FEATURES='$CAIRO_FEATURES'
+       CAIRO_NO_FEATURES='$CAIRO_NO_FEATURES'
+
+       CAIRO_SUPPORTED_FEATURES='$CAIRO_SUPPORTED_FEATURES'
+
+CAIRO_MAKEFILE_win32_features_h_WIN32='$CAIRO_MAKEFILE_win32_features_h_WIN32'
+               SED='$SED'
+               xlib_BASE='$xlib_BASE'
+               xlib_REQUIRES='$xlib_REQUIRES'
+               xlib_NONPKGCONFIG_LIBS='$xlib_NONPKGCONFIG_LIBS'
+               xlib_NONPKGCONFIG_EXTRA_LIBS='$xlib_NONPKGCONFIG_EXTRA_LIBS'
+               xlib_NONPKGCONFIG_CFLAGS='$xlib_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xlib_BASE='$xlib_BASE'
+               xlib_REQUIRES='$xlib_REQUIRES'
+               xlib_NONPKGCONFIG_LIBS='$xlib_NONPKGCONFIG_LIBS'
+               xlib_NONPKGCONFIG_EXTRA_LIBS='$xlib_NONPKGCONFIG_EXTRA_LIBS'
+               xlib_NONPKGCONFIG_CFLAGS='$xlib_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xlib_xrender_BASE='$xlib_xrender_BASE'
+               xlib_xrender_REQUIRES='$xlib_xrender_REQUIRES'
+               xlib_xrender_NONPKGCONFIG_LIBS='$xlib_xrender_NONPKGCONFIG_LIBS'
+               xlib_xrender_NONPKGCONFIG_EXTRA_LIBS='$xlib_xrender_NONPKGCONFIG_EXTRA_LIBS'
+               xlib_xrender_NONPKGCONFIG_CFLAGS='$xlib_xrender_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xlib_xrender_BASE='$xlib_xrender_BASE'
+               xlib_xrender_REQUIRES='$xlib_xrender_REQUIRES'
+               xlib_xrender_NONPKGCONFIG_LIBS='$xlib_xrender_NONPKGCONFIG_LIBS'
+               xlib_xrender_NONPKGCONFIG_EXTRA_LIBS='$xlib_xrender_NONPKGCONFIG_EXTRA_LIBS'
+               xlib_xrender_NONPKGCONFIG_CFLAGS='$xlib_xrender_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xcb_BASE='$xcb_BASE'
+               xcb_REQUIRES='$xcb_REQUIRES'
+               xcb_NONPKGCONFIG_LIBS='$xcb_NONPKGCONFIG_LIBS'
+               xcb_NONPKGCONFIG_EXTRA_LIBS='$xcb_NONPKGCONFIG_EXTRA_LIBS'
+               xcb_NONPKGCONFIG_CFLAGS='$xcb_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xcb_BASE='$xcb_BASE'
+               xcb_REQUIRES='$xcb_REQUIRES'
+               xcb_NONPKGCONFIG_LIBS='$xcb_NONPKGCONFIG_LIBS'
+               xcb_NONPKGCONFIG_EXTRA_LIBS='$xcb_NONPKGCONFIG_EXTRA_LIBS'
+               xcb_NONPKGCONFIG_CFLAGS='$xcb_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xlib_xcb_BASE='$xlib_xcb_BASE'
+               xlib_xcb_REQUIRES='$xlib_xcb_REQUIRES'
+               xlib_xcb_NONPKGCONFIG_LIBS='$xlib_xcb_NONPKGCONFIG_LIBS'
+               xlib_xcb_NONPKGCONFIG_EXTRA_LIBS='$xlib_xcb_NONPKGCONFIG_EXTRA_LIBS'
+               xlib_xcb_NONPKGCONFIG_CFLAGS='$xlib_xcb_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xlib_xcb_BASE='$xlib_xcb_BASE'
+               xlib_xcb_REQUIRES='$xlib_xcb_REQUIRES'
+               xlib_xcb_NONPKGCONFIG_LIBS='$xlib_xcb_NONPKGCONFIG_LIBS'
+               xlib_xcb_NONPKGCONFIG_EXTRA_LIBS='$xlib_xcb_NONPKGCONFIG_EXTRA_LIBS'
+               xlib_xcb_NONPKGCONFIG_CFLAGS='$xlib_xcb_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xcb_shm_BASE='$xcb_shm_BASE'
+               xcb_shm_REQUIRES='$xcb_shm_REQUIRES'
+               xcb_shm_NONPKGCONFIG_LIBS='$xcb_shm_NONPKGCONFIG_LIBS'
+               xcb_shm_NONPKGCONFIG_EXTRA_LIBS='$xcb_shm_NONPKGCONFIG_EXTRA_LIBS'
+               xcb_shm_NONPKGCONFIG_CFLAGS='$xcb_shm_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xcb_shm_BASE='$xcb_shm_BASE'
+               xcb_shm_REQUIRES='$xcb_shm_REQUIRES'
+               xcb_shm_NONPKGCONFIG_LIBS='$xcb_shm_NONPKGCONFIG_LIBS'
+               xcb_shm_NONPKGCONFIG_EXTRA_LIBS='$xcb_shm_NONPKGCONFIG_EXTRA_LIBS'
+               xcb_shm_NONPKGCONFIG_CFLAGS='$xcb_shm_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               qt_BASE='$qt_BASE'
+               qt_REQUIRES='$qt_REQUIRES'
+               qt_NONPKGCONFIG_LIBS='$qt_NONPKGCONFIG_LIBS'
+               qt_NONPKGCONFIG_EXTRA_LIBS='$qt_NONPKGCONFIG_EXTRA_LIBS'
+               qt_NONPKGCONFIG_CFLAGS='$qt_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               qt_BASE='$qt_BASE'
+               qt_REQUIRES='$qt_REQUIRES'
+               qt_NONPKGCONFIG_LIBS='$qt_NONPKGCONFIG_LIBS'
+               qt_NONPKGCONFIG_EXTRA_LIBS='$qt_NONPKGCONFIG_EXTRA_LIBS'
+               qt_NONPKGCONFIG_CFLAGS='$qt_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               quartz_BASE='$quartz_BASE'
+               quartz_REQUIRES='$quartz_REQUIRES'
+               quartz_NONPKGCONFIG_LIBS='$quartz_NONPKGCONFIG_LIBS'
+               quartz_NONPKGCONFIG_EXTRA_LIBS='$quartz_NONPKGCONFIG_EXTRA_LIBS'
+               quartz_NONPKGCONFIG_CFLAGS='$quartz_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               quartz_BASE='$quartz_BASE'
+               quartz_REQUIRES='$quartz_REQUIRES'
+               quartz_NONPKGCONFIG_LIBS='$quartz_NONPKGCONFIG_LIBS'
+               quartz_NONPKGCONFIG_EXTRA_LIBS='$quartz_NONPKGCONFIG_EXTRA_LIBS'
+               quartz_NONPKGCONFIG_CFLAGS='$quartz_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               quartz_font_BASE='$quartz_font_BASE'
+               quartz_font_REQUIRES='$quartz_font_REQUIRES'
+               quartz_font_NONPKGCONFIG_LIBS='$quartz_font_NONPKGCONFIG_LIBS'
+               quartz_font_NONPKGCONFIG_EXTRA_LIBS='$quartz_font_NONPKGCONFIG_EXTRA_LIBS'
+               quartz_font_NONPKGCONFIG_CFLAGS='$quartz_font_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               quartz_font_BASE='$quartz_font_BASE'
+               quartz_font_REQUIRES='$quartz_font_REQUIRES'
+               quartz_font_NONPKGCONFIG_LIBS='$quartz_font_NONPKGCONFIG_LIBS'
+               quartz_font_NONPKGCONFIG_EXTRA_LIBS='$quartz_font_NONPKGCONFIG_EXTRA_LIBS'
+               quartz_font_NONPKGCONFIG_CFLAGS='$quartz_font_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               quartz_image_BASE='$quartz_image_BASE'
+               quartz_image_REQUIRES='$quartz_image_REQUIRES'
+               quartz_image_NONPKGCONFIG_LIBS='$quartz_image_NONPKGCONFIG_LIBS'
+               quartz_image_NONPKGCONFIG_EXTRA_LIBS='$quartz_image_NONPKGCONFIG_EXTRA_LIBS'
+               quartz_image_NONPKGCONFIG_CFLAGS='$quartz_image_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               quartz_image_BASE='$quartz_image_BASE'
+               quartz_image_REQUIRES='$quartz_image_REQUIRES'
+               quartz_image_NONPKGCONFIG_LIBS='$quartz_image_NONPKGCONFIG_LIBS'
+               quartz_image_NONPKGCONFIG_EXTRA_LIBS='$quartz_image_NONPKGCONFIG_EXTRA_LIBS'
+               quartz_image_NONPKGCONFIG_CFLAGS='$quartz_image_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               win32_BASE='$win32_BASE'
+               win32_REQUIRES='$win32_REQUIRES'
+               win32_NONPKGCONFIG_LIBS='$win32_NONPKGCONFIG_LIBS'
+               win32_NONPKGCONFIG_EXTRA_LIBS='$win32_NONPKGCONFIG_EXTRA_LIBS'
+               win32_NONPKGCONFIG_CFLAGS='$win32_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               win32_BASE='$win32_BASE'
+               win32_REQUIRES='$win32_REQUIRES'
+               win32_NONPKGCONFIG_LIBS='$win32_NONPKGCONFIG_LIBS'
+               win32_NONPKGCONFIG_EXTRA_LIBS='$win32_NONPKGCONFIG_EXTRA_LIBS'
+               win32_NONPKGCONFIG_CFLAGS='$win32_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               win32_font_BASE='$win32_font_BASE'
+               win32_font_REQUIRES='$win32_font_REQUIRES'
+               win32_font_NONPKGCONFIG_LIBS='$win32_font_NONPKGCONFIG_LIBS'
+               win32_font_NONPKGCONFIG_EXTRA_LIBS='$win32_font_NONPKGCONFIG_EXTRA_LIBS'
+               win32_font_NONPKGCONFIG_CFLAGS='$win32_font_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               win32_font_BASE='$win32_font_BASE'
+               win32_font_REQUIRES='$win32_font_REQUIRES'
+               win32_font_NONPKGCONFIG_LIBS='$win32_font_NONPKGCONFIG_LIBS'
+               win32_font_NONPKGCONFIG_EXTRA_LIBS='$win32_font_NONPKGCONFIG_EXTRA_LIBS'
+               win32_font_NONPKGCONFIG_CFLAGS='$win32_font_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               skia_BASE='$skia_BASE'
+               skia_REQUIRES='$skia_REQUIRES'
+               skia_NONPKGCONFIG_LIBS='$skia_NONPKGCONFIG_LIBS'
+               skia_NONPKGCONFIG_EXTRA_LIBS='$skia_NONPKGCONFIG_EXTRA_LIBS'
+               skia_NONPKGCONFIG_CFLAGS='$skia_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               skia_BASE='$skia_BASE'
+               skia_REQUIRES='$skia_REQUIRES'
+               skia_NONPKGCONFIG_LIBS='$skia_NONPKGCONFIG_LIBS'
+               skia_NONPKGCONFIG_EXTRA_LIBS='$skia_NONPKGCONFIG_EXTRA_LIBS'
+               skia_NONPKGCONFIG_CFLAGS='$skia_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               os2_BASE='$os2_BASE'
+               os2_REQUIRES='$os2_REQUIRES'
+               os2_NONPKGCONFIG_LIBS='$os2_NONPKGCONFIG_LIBS'
+               os2_NONPKGCONFIG_EXTRA_LIBS='$os2_NONPKGCONFIG_EXTRA_LIBS'
+               os2_NONPKGCONFIG_CFLAGS='$os2_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               os2_BASE='$os2_BASE'
+               os2_REQUIRES='$os2_REQUIRES'
+               os2_NONPKGCONFIG_LIBS='$os2_NONPKGCONFIG_LIBS'
+               os2_NONPKGCONFIG_EXTRA_LIBS='$os2_NONPKGCONFIG_EXTRA_LIBS'
+               os2_NONPKGCONFIG_CFLAGS='$os2_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               beos_BASE='$beos_BASE'
+               beos_REQUIRES='$beos_REQUIRES'
+               beos_NONPKGCONFIG_LIBS='$beos_NONPKGCONFIG_LIBS'
+               beos_NONPKGCONFIG_EXTRA_LIBS='$beos_NONPKGCONFIG_EXTRA_LIBS'
+               beos_NONPKGCONFIG_CFLAGS='$beos_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               beos_BASE='$beos_BASE'
+               beos_REQUIRES='$beos_REQUIRES'
+               beos_NONPKGCONFIG_LIBS='$beos_NONPKGCONFIG_LIBS'
+               beos_NONPKGCONFIG_EXTRA_LIBS='$beos_NONPKGCONFIG_EXTRA_LIBS'
+               beos_NONPKGCONFIG_CFLAGS='$beos_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               drm_BASE='$drm_BASE'
+               drm_REQUIRES='$drm_REQUIRES'
+               drm_NONPKGCONFIG_LIBS='$drm_NONPKGCONFIG_LIBS'
+               drm_NONPKGCONFIG_EXTRA_LIBS='$drm_NONPKGCONFIG_EXTRA_LIBS'
+               drm_NONPKGCONFIG_CFLAGS='$drm_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               drm_BASE='$drm_BASE'
+               drm_REQUIRES='$drm_REQUIRES'
+               drm_NONPKGCONFIG_LIBS='$drm_NONPKGCONFIG_LIBS'
+               drm_NONPKGCONFIG_EXTRA_LIBS='$drm_NONPKGCONFIG_EXTRA_LIBS'
+               drm_NONPKGCONFIG_CFLAGS='$drm_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               gallium_BASE='$gallium_BASE'
+               gallium_REQUIRES='$gallium_REQUIRES'
+               gallium_NONPKGCONFIG_LIBS='$gallium_NONPKGCONFIG_LIBS'
+               gallium_NONPKGCONFIG_EXTRA_LIBS='$gallium_NONPKGCONFIG_EXTRA_LIBS'
+               gallium_NONPKGCONFIG_CFLAGS='$gallium_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               gallium_BASE='$gallium_BASE'
+               gallium_REQUIRES='$gallium_REQUIRES'
+               gallium_NONPKGCONFIG_LIBS='$gallium_NONPKGCONFIG_LIBS'
+               gallium_NONPKGCONFIG_EXTRA_LIBS='$gallium_NONPKGCONFIG_EXTRA_LIBS'
+               gallium_NONPKGCONFIG_CFLAGS='$gallium_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               png_BASE='$png_BASE'
+               png_REQUIRES='$png_REQUIRES'
+               png_NONPKGCONFIG_LIBS='$png_NONPKGCONFIG_LIBS'
+               png_NONPKGCONFIG_EXTRA_LIBS='$png_NONPKGCONFIG_EXTRA_LIBS'
+               png_NONPKGCONFIG_CFLAGS='$png_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               png_BASE='$png_BASE'
+               png_REQUIRES='$png_REQUIRES'
+               png_NONPKGCONFIG_LIBS='$png_NONPKGCONFIG_LIBS'
+               png_NONPKGCONFIG_EXTRA_LIBS='$png_NONPKGCONFIG_EXTRA_LIBS'
+               png_NONPKGCONFIG_CFLAGS='$png_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               gl_BASE='$gl_BASE'
+               gl_REQUIRES='$gl_REQUIRES'
+               gl_NONPKGCONFIG_LIBS='$gl_NONPKGCONFIG_LIBS'
+               gl_NONPKGCONFIG_EXTRA_LIBS='$gl_NONPKGCONFIG_EXTRA_LIBS'
+               gl_NONPKGCONFIG_CFLAGS='$gl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               gl_BASE='$gl_BASE'
+               gl_REQUIRES='$gl_REQUIRES'
+               gl_NONPKGCONFIG_LIBS='$gl_NONPKGCONFIG_LIBS'
+               gl_NONPKGCONFIG_EXTRA_LIBS='$gl_NONPKGCONFIG_EXTRA_LIBS'
+               gl_NONPKGCONFIG_CFLAGS='$gl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               glesv2_BASE='$glesv2_BASE'
+               glesv2_REQUIRES='$glesv2_REQUIRES'
+               glesv2_NONPKGCONFIG_LIBS='$glesv2_NONPKGCONFIG_LIBS'
+               glesv2_NONPKGCONFIG_EXTRA_LIBS='$glesv2_NONPKGCONFIG_EXTRA_LIBS'
+               glesv2_NONPKGCONFIG_CFLAGS='$glesv2_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               glesv2_BASE='$glesv2_BASE'
+               glesv2_REQUIRES='$glesv2_REQUIRES'
+               glesv2_NONPKGCONFIG_LIBS='$glesv2_NONPKGCONFIG_LIBS'
+               glesv2_NONPKGCONFIG_EXTRA_LIBS='$glesv2_NONPKGCONFIG_EXTRA_LIBS'
+               glesv2_NONPKGCONFIG_CFLAGS='$glesv2_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               cogl_BASE='$cogl_BASE'
+               cogl_REQUIRES='$cogl_REQUIRES'
+               cogl_NONPKGCONFIG_LIBS='$cogl_NONPKGCONFIG_LIBS'
+               cogl_NONPKGCONFIG_EXTRA_LIBS='$cogl_NONPKGCONFIG_EXTRA_LIBS'
+               cogl_NONPKGCONFIG_CFLAGS='$cogl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               cogl_BASE='$cogl_BASE'
+               cogl_REQUIRES='$cogl_REQUIRES'
+               cogl_NONPKGCONFIG_LIBS='$cogl_NONPKGCONFIG_LIBS'
+               cogl_NONPKGCONFIG_EXTRA_LIBS='$cogl_NONPKGCONFIG_EXTRA_LIBS'
+               cogl_NONPKGCONFIG_CFLAGS='$cogl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               directfb_BASE='$directfb_BASE'
+               directfb_REQUIRES='$directfb_REQUIRES'
+               directfb_NONPKGCONFIG_LIBS='$directfb_NONPKGCONFIG_LIBS'
+               directfb_NONPKGCONFIG_EXTRA_LIBS='$directfb_NONPKGCONFIG_EXTRA_LIBS'
+               directfb_NONPKGCONFIG_CFLAGS='$directfb_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               directfb_BASE='$directfb_BASE'
+               directfb_REQUIRES='$directfb_REQUIRES'
+               directfb_NONPKGCONFIG_LIBS='$directfb_NONPKGCONFIG_LIBS'
+               directfb_NONPKGCONFIG_EXTRA_LIBS='$directfb_NONPKGCONFIG_EXTRA_LIBS'
+               directfb_NONPKGCONFIG_CFLAGS='$directfb_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               vg_BASE='$vg_BASE'
+               vg_REQUIRES='$vg_REQUIRES'
+               vg_NONPKGCONFIG_LIBS='$vg_NONPKGCONFIG_LIBS'
+               vg_NONPKGCONFIG_EXTRA_LIBS='$vg_NONPKGCONFIG_EXTRA_LIBS'
+               vg_NONPKGCONFIG_CFLAGS='$vg_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               vg_BASE='$vg_BASE'
+               vg_REQUIRES='$vg_REQUIRES'
+               vg_NONPKGCONFIG_LIBS='$vg_NONPKGCONFIG_LIBS'
+               vg_NONPKGCONFIG_EXTRA_LIBS='$vg_NONPKGCONFIG_EXTRA_LIBS'
+               vg_NONPKGCONFIG_CFLAGS='$vg_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               egl_BASE='$egl_BASE'
+               egl_REQUIRES='$egl_REQUIRES'
+               egl_NONPKGCONFIG_LIBS='$egl_NONPKGCONFIG_LIBS'
+               egl_NONPKGCONFIG_EXTRA_LIBS='$egl_NONPKGCONFIG_EXTRA_LIBS'
+               egl_NONPKGCONFIG_CFLAGS='$egl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               egl_BASE='$egl_BASE'
+               egl_REQUIRES='$egl_REQUIRES'
+               egl_NONPKGCONFIG_LIBS='$egl_NONPKGCONFIG_LIBS'
+               egl_NONPKGCONFIG_EXTRA_LIBS='$egl_NONPKGCONFIG_EXTRA_LIBS'
+               egl_NONPKGCONFIG_CFLAGS='$egl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               glx_BASE='$glx_BASE'
+               glx_REQUIRES='$glx_REQUIRES'
+               glx_NONPKGCONFIG_LIBS='$glx_NONPKGCONFIG_LIBS'
+               glx_NONPKGCONFIG_EXTRA_LIBS='$glx_NONPKGCONFIG_EXTRA_LIBS'
+               glx_NONPKGCONFIG_CFLAGS='$glx_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               glx_BASE='$glx_BASE'
+               glx_REQUIRES='$glx_REQUIRES'
+               glx_NONPKGCONFIG_LIBS='$glx_NONPKGCONFIG_LIBS'
+               glx_NONPKGCONFIG_EXTRA_LIBS='$glx_NONPKGCONFIG_EXTRA_LIBS'
+               glx_NONPKGCONFIG_CFLAGS='$glx_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               wgl_BASE='$wgl_BASE'
+               wgl_REQUIRES='$wgl_REQUIRES'
+               wgl_NONPKGCONFIG_LIBS='$wgl_NONPKGCONFIG_LIBS'
+               wgl_NONPKGCONFIG_EXTRA_LIBS='$wgl_NONPKGCONFIG_EXTRA_LIBS'
+               wgl_NONPKGCONFIG_CFLAGS='$wgl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               wgl_BASE='$wgl_BASE'
+               wgl_REQUIRES='$wgl_REQUIRES'
+               wgl_NONPKGCONFIG_LIBS='$wgl_NONPKGCONFIG_LIBS'
+               wgl_NONPKGCONFIG_EXTRA_LIBS='$wgl_NONPKGCONFIG_EXTRA_LIBS'
+               wgl_NONPKGCONFIG_CFLAGS='$wgl_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               script_BASE='$script_BASE'
+               script_REQUIRES='$script_REQUIRES'
+               script_NONPKGCONFIG_LIBS='$script_NONPKGCONFIG_LIBS'
+               script_NONPKGCONFIG_EXTRA_LIBS='$script_NONPKGCONFIG_EXTRA_LIBS'
+               script_NONPKGCONFIG_CFLAGS='$script_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               script_BASE='$script_BASE'
+               script_REQUIRES='$script_REQUIRES'
+               script_NONPKGCONFIG_LIBS='$script_NONPKGCONFIG_LIBS'
+               script_NONPKGCONFIG_EXTRA_LIBS='$script_NONPKGCONFIG_EXTRA_LIBS'
+               script_NONPKGCONFIG_CFLAGS='$script_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               ft_BASE='$ft_BASE'
+               ft_REQUIRES='$ft_REQUIRES'
+               ft_NONPKGCONFIG_LIBS='$ft_NONPKGCONFIG_LIBS'
+               ft_NONPKGCONFIG_EXTRA_LIBS='$ft_NONPKGCONFIG_EXTRA_LIBS'
+               ft_NONPKGCONFIG_CFLAGS='$ft_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               ft_BASE='$ft_BASE'
+               ft_REQUIRES='$ft_REQUIRES'
+               ft_NONPKGCONFIG_LIBS='$ft_NONPKGCONFIG_LIBS'
+               ft_NONPKGCONFIG_EXTRA_LIBS='$ft_NONPKGCONFIG_EXTRA_LIBS'
+               ft_NONPKGCONFIG_CFLAGS='$ft_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               fc_BASE='$fc_BASE'
+               fc_REQUIRES='$fc_REQUIRES'
+               fc_NONPKGCONFIG_LIBS='$fc_NONPKGCONFIG_LIBS'
+               fc_NONPKGCONFIG_EXTRA_LIBS='$fc_NONPKGCONFIG_EXTRA_LIBS'
+               fc_NONPKGCONFIG_CFLAGS='$fc_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               fc_BASE='$fc_BASE'
+               fc_REQUIRES='$fc_REQUIRES'
+               fc_NONPKGCONFIG_LIBS='$fc_NONPKGCONFIG_LIBS'
+               fc_NONPKGCONFIG_EXTRA_LIBS='$fc_NONPKGCONFIG_EXTRA_LIBS'
+               fc_NONPKGCONFIG_CFLAGS='$fc_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               ps_BASE='$ps_BASE'
+               ps_REQUIRES='$ps_REQUIRES'
+               ps_NONPKGCONFIG_LIBS='$ps_NONPKGCONFIG_LIBS'
+               ps_NONPKGCONFIG_EXTRA_LIBS='$ps_NONPKGCONFIG_EXTRA_LIBS'
+               ps_NONPKGCONFIG_CFLAGS='$ps_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               ps_BASE='$ps_BASE'
+               ps_REQUIRES='$ps_REQUIRES'
+               ps_NONPKGCONFIG_LIBS='$ps_NONPKGCONFIG_LIBS'
+               ps_NONPKGCONFIG_EXTRA_LIBS='$ps_NONPKGCONFIG_EXTRA_LIBS'
+               ps_NONPKGCONFIG_CFLAGS='$ps_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               pdf_BASE='$pdf_BASE'
+               pdf_REQUIRES='$pdf_REQUIRES'
+               pdf_NONPKGCONFIG_LIBS='$pdf_NONPKGCONFIG_LIBS'
+               pdf_NONPKGCONFIG_EXTRA_LIBS='$pdf_NONPKGCONFIG_EXTRA_LIBS'
+               pdf_NONPKGCONFIG_CFLAGS='$pdf_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               pdf_BASE='$pdf_BASE'
+               pdf_REQUIRES='$pdf_REQUIRES'
+               pdf_NONPKGCONFIG_LIBS='$pdf_NONPKGCONFIG_LIBS'
+               pdf_NONPKGCONFIG_EXTRA_LIBS='$pdf_NONPKGCONFIG_EXTRA_LIBS'
+               pdf_NONPKGCONFIG_CFLAGS='$pdf_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               svg_BASE='$svg_BASE'
+               svg_REQUIRES='$svg_REQUIRES'
+               svg_NONPKGCONFIG_LIBS='$svg_NONPKGCONFIG_LIBS'
+               svg_NONPKGCONFIG_EXTRA_LIBS='$svg_NONPKGCONFIG_EXTRA_LIBS'
+               svg_NONPKGCONFIG_CFLAGS='$svg_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               svg_BASE='$svg_BASE'
+               svg_REQUIRES='$svg_REQUIRES'
+               svg_NONPKGCONFIG_LIBS='$svg_NONPKGCONFIG_LIBS'
+               svg_NONPKGCONFIG_EXTRA_LIBS='$svg_NONPKGCONFIG_EXTRA_LIBS'
+               svg_NONPKGCONFIG_CFLAGS='$svg_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               tee_BASE='$tee_BASE'
+               tee_REQUIRES='$tee_REQUIRES'
+               tee_NONPKGCONFIG_LIBS='$tee_NONPKGCONFIG_LIBS'
+               tee_NONPKGCONFIG_EXTRA_LIBS='$tee_NONPKGCONFIG_EXTRA_LIBS'
+               tee_NONPKGCONFIG_CFLAGS='$tee_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               tee_BASE='$tee_BASE'
+               tee_REQUIRES='$tee_REQUIRES'
+               tee_NONPKGCONFIG_LIBS='$tee_NONPKGCONFIG_LIBS'
+               tee_NONPKGCONFIG_EXTRA_LIBS='$tee_NONPKGCONFIG_EXTRA_LIBS'
+               tee_NONPKGCONFIG_CFLAGS='$tee_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xml_BASE='$xml_BASE'
+               xml_REQUIRES='$xml_REQUIRES'
+               xml_NONPKGCONFIG_LIBS='$xml_NONPKGCONFIG_LIBS'
+               xml_NONPKGCONFIG_EXTRA_LIBS='$xml_NONPKGCONFIG_EXTRA_LIBS'
+               xml_NONPKGCONFIG_CFLAGS='$xml_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               xml_BASE='$xml_BASE'
+               xml_REQUIRES='$xml_REQUIRES'
+               xml_NONPKGCONFIG_LIBS='$xml_NONPKGCONFIG_LIBS'
+               xml_NONPKGCONFIG_EXTRA_LIBS='$xml_NONPKGCONFIG_EXTRA_LIBS'
+               xml_NONPKGCONFIG_CFLAGS='$xml_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               gobject_BASE='$gobject_BASE'
+               gobject_REQUIRES='$gobject_REQUIRES'
+               gobject_NONPKGCONFIG_LIBS='$gobject_NONPKGCONFIG_LIBS'
+               gobject_NONPKGCONFIG_EXTRA_LIBS='$gobject_NONPKGCONFIG_EXTRA_LIBS'
+               gobject_NONPKGCONFIG_CFLAGS='$gobject_NONPKGCONFIG_CFLAGS'
+
+               SED='$SED'
+               gobject_BASE='$gobject_BASE'
+               gobject_REQUIRES='$gobject_REQUIRES'
+               gobject_NONPKGCONFIG_LIBS='$gobject_NONPKGCONFIG_LIBS'
+               gobject_NONPKGCONFIG_EXTRA_LIBS='$gobject_NONPKGCONFIG_EXTRA_LIBS'
+               gobject_NONPKGCONFIG_CFLAGS='$gobject_NONPKGCONFIG_CFLAGS'
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "$srcdir/build/Makefile.win32.features") CONFIG_COMMANDS="$CONFIG_COMMANDS $srcdir/build/Makefile.win32.features" ;;
+    "$srcdir/src/Makefile.am.features") CONFIG_COMMANDS="$CONFIG_COMMANDS $srcdir/src/Makefile.am.features" ;;
+    "$srcdir/src/Makefile.win32.features") CONFIG_COMMANDS="$CONFIG_COMMANDS $srcdir/src/Makefile.win32.features" ;;
+    "$srcdir/boilerplate/Makefile.am.features") CONFIG_COMMANDS="$CONFIG_COMMANDS $srcdir/boilerplate/Makefile.am.features" ;;
+    "$srcdir/boilerplate/Makefile.win32.features") CONFIG_COMMANDS="$CONFIG_COMMANDS $srcdir/boilerplate/Makefile.win32.features" ;;
+    "src/cairo.pc") CONFIG_FILES="$CONFIG_FILES src/cairo.pc" ;;
+    "cairo-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-uninstalled.pc:src/cairo-uninstalled.pc.in" ;;
+    "src/cairo-features.h") CONFIG_COMMANDS="$CONFIG_COMMANDS src/cairo-features.h" ;;
+    "src/cairo-supported-features.h") CONFIG_COMMANDS="$CONFIG_COMMANDS src/cairo-supported-features.h" ;;
+    "$srcdir/build/Makefile.win32.features-h") CONFIG_COMMANDS="$CONFIG_COMMANDS $srcdir/build/Makefile.win32.features-h" ;;
+    "src/cairo-xlib.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-xlib.pc:src/cairo-features.pc.in" ;;
+    "cairo-xlib-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-xlib-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-xlib-xrender.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-xlib-xrender.pc:src/cairo-features.pc.in" ;;
+    "cairo-xlib-xrender-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-xlib-xrender-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-xcb.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-xcb.pc:src/cairo-features.pc.in" ;;
+    "cairo-xcb-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-xcb-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-xlib-xcb.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-xlib-xcb.pc:src/cairo-features.pc.in" ;;
+    "cairo-xlib-xcb-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-xlib-xcb-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-xcb-shm.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-xcb-shm.pc:src/cairo-features.pc.in" ;;
+    "cairo-xcb-shm-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-xcb-shm-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-qt.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-qt.pc:src/cairo-features.pc.in" ;;
+    "cairo-qt-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-qt-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-quartz.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-quartz.pc:src/cairo-features.pc.in" ;;
+    "cairo-quartz-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-quartz-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-quartz-font.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-quartz-font.pc:src/cairo-features.pc.in" ;;
+    "cairo-quartz-font-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-quartz-font-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-quartz-image.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-quartz-image.pc:src/cairo-features.pc.in" ;;
+    "cairo-quartz-image-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-quartz-image-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-win32.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-win32.pc:src/cairo-features.pc.in" ;;
+    "cairo-win32-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-win32-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-win32-font.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-win32-font.pc:src/cairo-features.pc.in" ;;
+    "cairo-win32-font-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-win32-font-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-skia.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-skia.pc:src/cairo-features.pc.in" ;;
+    "cairo-skia-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-skia-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-os2.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-os2.pc:src/cairo-features.pc.in" ;;
+    "cairo-os2-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-os2-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-beos.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-beos.pc:src/cairo-features.pc.in" ;;
+    "cairo-beos-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-beos-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-drm.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-drm.pc:src/cairo-features.pc.in" ;;
+    "cairo-drm-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-drm-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-gallium.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-gallium.pc:src/cairo-features.pc.in" ;;
+    "cairo-gallium-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-gallium-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-png.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-png.pc:src/cairo-features.pc.in" ;;
+    "cairo-png-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-png-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-gl.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-gl.pc:src/cairo-features.pc.in" ;;
+    "cairo-gl-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-gl-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-glesv2.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-glesv2.pc:src/cairo-features.pc.in" ;;
+    "cairo-glesv2-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-glesv2-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-cogl.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-cogl.pc:src/cairo-features.pc.in" ;;
+    "cairo-cogl-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-cogl-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-directfb.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-directfb.pc:src/cairo-features.pc.in" ;;
+    "cairo-directfb-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-directfb-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-vg.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-vg.pc:src/cairo-features.pc.in" ;;
+    "cairo-vg-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-vg-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-egl.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-egl.pc:src/cairo-features.pc.in" ;;
+    "cairo-egl-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-egl-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-glx.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-glx.pc:src/cairo-features.pc.in" ;;
+    "cairo-glx-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-glx-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-wgl.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-wgl.pc:src/cairo-features.pc.in" ;;
+    "cairo-wgl-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-wgl-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-script.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-script.pc:src/cairo-features.pc.in" ;;
+    "cairo-script-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-script-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-ft.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-ft.pc:src/cairo-features.pc.in" ;;
+    "cairo-ft-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-ft-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-fc.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-fc.pc:src/cairo-features.pc.in" ;;
+    "cairo-fc-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-fc-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-ps.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-ps.pc:src/cairo-features.pc.in" ;;
+    "cairo-ps-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-ps-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-pdf.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-pdf.pc:src/cairo-features.pc.in" ;;
+    "cairo-pdf-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-pdf-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-svg.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-svg.pc:src/cairo-features.pc.in" ;;
+    "cairo-svg-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-svg-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-tee.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-tee.pc:src/cairo-features.pc.in" ;;
+    "cairo-tee-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-tee-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-xml.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-xml.pc:src/cairo-features.pc.in" ;;
+    "cairo-xml-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-xml-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "src/cairo-gobject.pc") CONFIG_FILES="$CONFIG_FILES src/cairo-gobject.pc:src/cairo-features.pc.in" ;;
+    "cairo-gobject-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES cairo-gobject-uninstalled.pc:src/cairo-features-uninstalled.pc.in" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "boilerplate/Makefile") CONFIG_FILES="$CONFIG_FILES boilerplate/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "test/pdiff/Makefile") CONFIG_FILES="$CONFIG_FILES test/pdiff/Makefile" ;;
+    "perf/Makefile") CONFIG_FILES="$CONFIG_FILES perf/Makefile" ;;
+    "perf/micro/Makefile") CONFIG_FILES="$CONFIG_FILES perf/micro/Makefile" ;;
+    "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
+    "util/cairo-fdr/Makefile") CONFIG_FILES="$CONFIG_FILES util/cairo-fdr/Makefile" ;;
+    "util/cairo-gobject/Makefile") CONFIG_FILES="$CONFIG_FILES util/cairo-gobject/Makefile" ;;
+    "util/cairo-missing/Makefile") CONFIG_FILES="$CONFIG_FILES util/cairo-missing/Makefile" ;;
+    "util/cairo-script/Makefile") CONFIG_FILES="$CONFIG_FILES util/cairo-script/Makefile" ;;
+    "util/cairo-script/examples/Makefile") CONFIG_FILES="$CONFIG_FILES util/cairo-script/examples/Makefile" ;;
+    "util/cairo-sphinx/Makefile") CONFIG_FILES="$CONFIG_FILES util/cairo-sphinx/Makefile" ;;
+    "util/cairo-trace/Makefile") CONFIG_FILES="$CONFIG_FILES util/cairo-trace/Makefile" ;;
+    "util/cairo-trace/cairo-trace") CONFIG_FILES="$CONFIG_FILES util/cairo-trace/cairo-trace" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "doc/public/Makefile") CONFIG_FILES="$CONFIG_FILES doc/public/Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=[    ]*/{
+h
+s///
+s/^/:/
+s/[     ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[  ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[    ]*#[    ]*define[       ][      ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+       `' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Assembler program.
+AS=$AS
+
+# DLL creation program.
+DLLTOOL=$DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$OBJDUMP
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+    "$srcdir/build/Makefile.win32.features":C)
+               _config_file=$srcdir/build/Makefile.win32.features
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                       echo "$CAIRO_MAKEFILE___WIN32"
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "$srcdir/src/Makefile.am.features":C)
+               _config_file=$srcdir/src/Makefile.am.features
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                       echo "$CAIRO_MAKEFILE_cairo_AMAKE"
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "$srcdir/src/Makefile.win32.features":C)
+               _config_file=$srcdir/src/Makefile.win32.features
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                       echo "$CAIRO_MAKEFILE_cairo_WIN32"
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "$srcdir/boilerplate/Makefile.am.features":C)
+               _config_file=$srcdir/boilerplate/Makefile.am.features
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                       echo "$CAIRO_MAKEFILE_cairo_boilerplate_AMAKE"
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "$srcdir/boilerplate/Makefile.win32.features":C)
+               _config_file=$srcdir/boilerplate/Makefile.win32.features
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                       echo "$CAIRO_MAKEFILE_cairo_boilerplate_WIN32"
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "src/cairo-features.h":C)
+               _config_file=src/cairo-features.h
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                               echo '/* Generated by configure.  Do not edit. */'
+       echo '#ifndef CAIRO_FEATURES_H'
+       echo '#define CAIRO_FEATURES_H'
+       echo ''
+       for FEATURE in $CAIRO_FEATURES; do
+               echo "#define $FEATURE 1"
+       done | LANG=C sort
+       echo ''
+       for FEATURE in $CAIRO_NO_FEATURES; do
+               echo "/*#undef $FEATURE */"
+       done | LANG=C sort
+       echo ''
+       echo '#endif'
+
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "src/cairo-supported-features.h":C)
+               _config_file=src/cairo-supported-features.h
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                               echo '/* Generated by configure.  Do not edit. */'
+       echo '#ifndef CAIRO_SUPPORTED_FEATURES_H'
+       echo '#define CAIRO_SUPPORTED_FEATURES_H'
+       echo ''
+       echo '/* This is a dummy header, to trick gtk-doc only */'
+       echo ''
+       for FEATURE in $CAIRO_SUPPORTED_FEATURES; do
+               echo "#define $FEATURE 1"
+       done
+       echo ''
+       echo '#endif'
+
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "$srcdir/build/Makefile.win32.features-h":C)
+               _config_file=$srcdir/build/Makefile.win32.features-h
+               _tmp_file=cairoconf.tmp
+               { $as_echo "$as_me:${as_lineno-$LINENO}: creating $_config_file" >&5
+$as_echo "$as_me: creating $_config_file" >&6;}
+               {
+                       echo "$CAIRO_MAKEFILE_win32_features_h_WIN32"
+               } >> "$_tmp_file" ||
+               as_fn_error $? "failed to write to $_tmp_file" "$LINENO" 5
+
+               if cmp -s "$_tmp_file" "$_config_file"; then
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: $_config_file is unchanged" >&5
+$as_echo "$as_me: $_config_file is unchanged" >&6;}
+                 rm -f "$_tmp_file"
+               else
+                 mv "$_tmp_file" "$_config_file" ||
+                 as_fn_error $? "failed to update $_config_file" "$LINENO" 5
+               fi
+        ;;
+    "src/cairo-xlib.pc":F)             mv "src/cairo-xlib.pc" "src/cairo-xlib.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xlib%g;            s%@FEATURE_NAME@%Xlib surface backend%g;                s%@FEATURE_BASE@%$xlib_BASE%g;          s%@FEATURE_REQUIRES@%$xlib_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$xlib_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xlib_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xlib_NONPKGCONFIG_CFLAGS%g;            " < "src/cairo-xlib.pc.tmp" > "src/cairo-xlib.pc" && rm -f "src/cairo-xlib.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-xlib.pc" "$LINENO" 5
+        ;;
+    "cairo-xlib-uninstalled.pc":F)             mv "cairo-xlib-uninstalled.pc" "cairo-xlib-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xlib%g;            s%@FEATURE_NAME@%Xlib surface backend%g;                s%@FEATURE_BASE@%$xlib_BASE%g;          s%@FEATURE_REQUIRES@%$xlib_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$xlib_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xlib_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xlib_NONPKGCONFIG_CFLAGS%g;            " < "cairo-xlib-uninstalled.pc.tmp" > "cairo-xlib-uninstalled.pc" && rm -f "cairo-xlib-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-xlib-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-xlib-xrender.pc":F)             mv "src/cairo-xlib-xrender.pc" "src/cairo-xlib-xrender.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xlib-xrender%g;            s%@FEATURE_NAME@%Xlib Xrender surface backend%g;                s%@FEATURE_BASE@%$xlib_xrender_BASE%g;          s%@FEATURE_REQUIRES@%$xlib_xrender_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$xlib_xrender_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xlib_xrender_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xlib_xrender_NONPKGCONFIG_CFLAGS%g;            " < "src/cairo-xlib-xrender.pc.tmp" > "src/cairo-xlib-xrender.pc" && rm -f "src/cairo-xlib-xrender.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-xlib-xrender.pc" "$LINENO" 5
+        ;;
+    "cairo-xlib-xrender-uninstalled.pc":F)             mv "cairo-xlib-xrender-uninstalled.pc" "cairo-xlib-xrender-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xlib-xrender%g;            s%@FEATURE_NAME@%Xlib Xrender surface backend%g;                s%@FEATURE_BASE@%$xlib_xrender_BASE%g;          s%@FEATURE_REQUIRES@%$xlib_xrender_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$xlib_xrender_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xlib_xrender_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xlib_xrender_NONPKGCONFIG_CFLAGS%g;            " < "cairo-xlib-xrender-uninstalled.pc.tmp" > "cairo-xlib-xrender-uninstalled.pc" && rm -f "cairo-xlib-xrender-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-xlib-xrender-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-xcb.pc":F)              mv "src/cairo-xcb.pc" "src/cairo-xcb.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xcb%g;             s%@FEATURE_NAME@%XCB surface backend%g;         s%@FEATURE_BASE@%$xcb_BASE%g;           s%@FEATURE_REQUIRES@%$xcb_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$xcb_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xcb_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xcb_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-xcb.pc.tmp" > "src/cairo-xcb.pc" && rm -f "src/cairo-xcb.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-xcb.pc" "$LINENO" 5
+        ;;
+    "cairo-xcb-uninstalled.pc":F)              mv "cairo-xcb-uninstalled.pc" "cairo-xcb-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xcb%g;             s%@FEATURE_NAME@%XCB surface backend%g;         s%@FEATURE_BASE@%$xcb_BASE%g;           s%@FEATURE_REQUIRES@%$xcb_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$xcb_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xcb_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xcb_NONPKGCONFIG_CFLAGS%g;             " < "cairo-xcb-uninstalled.pc.tmp" > "cairo-xcb-uninstalled.pc" && rm -f "cairo-xcb-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-xcb-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-xlib-xcb.pc":F)                 mv "src/cairo-xlib-xcb.pc" "src/cairo-xlib-xcb.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xlib-xcb%g;                s%@FEATURE_NAME@%Xlib/XCB functions%g;          s%@FEATURE_BASE@%$xlib_xcb_BASE%g;              s%@FEATURE_REQUIRES@%$xlib_xcb_REQUIRES%g;              s%@FEATURE_NONPKGCONFIG_LIBS@%$xlib_xcb_NONPKGCONFIG_LIBS%g;            s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xlib_xcb_NONPKGCONFIG_EXTRA_LIBS%g;                s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xlib_xcb_NONPKGCONFIG_CFLAGS%g;                " < "src/cairo-xlib-xcb.pc.tmp" > "src/cairo-xlib-xcb.pc" && rm -f "src/cairo-xlib-xcb.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-xlib-xcb.pc" "$LINENO" 5
+        ;;
+    "cairo-xlib-xcb-uninstalled.pc":F)                 mv "cairo-xlib-xcb-uninstalled.pc" "cairo-xlib-xcb-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xlib-xcb%g;                s%@FEATURE_NAME@%Xlib/XCB functions%g;          s%@FEATURE_BASE@%$xlib_xcb_BASE%g;              s%@FEATURE_REQUIRES@%$xlib_xcb_REQUIRES%g;              s%@FEATURE_NONPKGCONFIG_LIBS@%$xlib_xcb_NONPKGCONFIG_LIBS%g;            s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xlib_xcb_NONPKGCONFIG_EXTRA_LIBS%g;                s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xlib_xcb_NONPKGCONFIG_CFLAGS%g;                " < "cairo-xlib-xcb-uninstalled.pc.tmp" > "cairo-xlib-xcb-uninstalled.pc" && rm -f "cairo-xlib-xcb-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-xlib-xcb-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-xcb-shm.pc":F)          mv "src/cairo-xcb-shm.pc" "src/cairo-xcb-shm.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xcb-shm%g;         s%@FEATURE_NAME@%XCB/SHM functions%g;           s%@FEATURE_BASE@%$xcb_shm_BASE%g;               s%@FEATURE_REQUIRES@%$xcb_shm_REQUIRES%g;               s%@FEATURE_NONPKGCONFIG_LIBS@%$xcb_shm_NONPKGCONFIG_LIBS%g;             s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xcb_shm_NONPKGCONFIG_EXTRA_LIBS%g;         s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xcb_shm_NONPKGCONFIG_CFLAGS%g;         " < "src/cairo-xcb-shm.pc.tmp" > "src/cairo-xcb-shm.pc" && rm -f "src/cairo-xcb-shm.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-xcb-shm.pc" "$LINENO" 5
+        ;;
+    "cairo-xcb-shm-uninstalled.pc":F)          mv "cairo-xcb-shm-uninstalled.pc" "cairo-xcb-shm-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xcb-shm%g;         s%@FEATURE_NAME@%XCB/SHM functions%g;           s%@FEATURE_BASE@%$xcb_shm_BASE%g;               s%@FEATURE_REQUIRES@%$xcb_shm_REQUIRES%g;               s%@FEATURE_NONPKGCONFIG_LIBS@%$xcb_shm_NONPKGCONFIG_LIBS%g;             s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xcb_shm_NONPKGCONFIG_EXTRA_LIBS%g;         s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xcb_shm_NONPKGCONFIG_CFLAGS%g;         " < "cairo-xcb-shm-uninstalled.pc.tmp" > "cairo-xcb-shm-uninstalled.pc" && rm -f "cairo-xcb-shm-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-xcb-shm-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-qt.pc":F)               mv "src/cairo-qt.pc" "src/cairo-qt.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-qt%g;              s%@FEATURE_NAME@%Qt surface backend%g;          s%@FEATURE_BASE@%$qt_BASE%g;            s%@FEATURE_REQUIRES@%$qt_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$qt_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$qt_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$qt_NONPKGCONFIG_CFLAGS%g;              " < "src/cairo-qt.pc.tmp" > "src/cairo-qt.pc" && rm -f "src/cairo-qt.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-qt.pc" "$LINENO" 5
+        ;;
+    "cairo-qt-uninstalled.pc":F)               mv "cairo-qt-uninstalled.pc" "cairo-qt-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-qt%g;              s%@FEATURE_NAME@%Qt surface backend%g;          s%@FEATURE_BASE@%$qt_BASE%g;            s%@FEATURE_REQUIRES@%$qt_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$qt_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$qt_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$qt_NONPKGCONFIG_CFLAGS%g;              " < "cairo-qt-uninstalled.pc.tmp" > "cairo-qt-uninstalled.pc" && rm -f "cairo-qt-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-qt-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-quartz.pc":F)           mv "src/cairo-quartz.pc" "src/cairo-quartz.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-quartz%g;          s%@FEATURE_NAME@%Quartz surface backend%g;              s%@FEATURE_BASE@%$quartz_BASE%g;                s%@FEATURE_REQUIRES@%$quartz_REQUIRES%g;                s%@FEATURE_NONPKGCONFIG_LIBS@%$quartz_NONPKGCONFIG_LIBS%g;              s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$quartz_NONPKGCONFIG_EXTRA_LIBS%g;          s%@FEATURE_NONPKGCONFIG_CFLAGS@%$quartz_NONPKGCONFIG_CFLAGS%g;          " < "src/cairo-quartz.pc.tmp" > "src/cairo-quartz.pc" && rm -f "src/cairo-quartz.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-quartz.pc" "$LINENO" 5
+        ;;
+    "cairo-quartz-uninstalled.pc":F)           mv "cairo-quartz-uninstalled.pc" "cairo-quartz-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-quartz%g;          s%@FEATURE_NAME@%Quartz surface backend%g;              s%@FEATURE_BASE@%$quartz_BASE%g;                s%@FEATURE_REQUIRES@%$quartz_REQUIRES%g;                s%@FEATURE_NONPKGCONFIG_LIBS@%$quartz_NONPKGCONFIG_LIBS%g;              s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$quartz_NONPKGCONFIG_EXTRA_LIBS%g;          s%@FEATURE_NONPKGCONFIG_CFLAGS@%$quartz_NONPKGCONFIG_CFLAGS%g;          " < "cairo-quartz-uninstalled.pc.tmp" > "cairo-quartz-uninstalled.pc" && rm -f "cairo-quartz-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-quartz-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-quartz-font.pc":F)              mv "src/cairo-quartz-font.pc" "src/cairo-quartz-font.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-quartz-font%g;             s%@FEATURE_NAME@%Quartz font backend%g;         s%@FEATURE_BASE@%$quartz_font_BASE%g;           s%@FEATURE_REQUIRES@%$quartz_font_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$quartz_font_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$quartz_font_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$quartz_font_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-quartz-font.pc.tmp" > "src/cairo-quartz-font.pc" && rm -f "src/cairo-quartz-font.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-quartz-font.pc" "$LINENO" 5
+        ;;
+    "cairo-quartz-font-uninstalled.pc":F)              mv "cairo-quartz-font-uninstalled.pc" "cairo-quartz-font-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-quartz-font%g;             s%@FEATURE_NAME@%Quartz font backend%g;         s%@FEATURE_BASE@%$quartz_font_BASE%g;           s%@FEATURE_REQUIRES@%$quartz_font_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$quartz_font_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$quartz_font_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$quartz_font_NONPKGCONFIG_CFLAGS%g;             " < "cairo-quartz-font-uninstalled.pc.tmp" > "cairo-quartz-font-uninstalled.pc" && rm -f "cairo-quartz-font-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-quartz-font-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-quartz-image.pc":F)             mv "src/cairo-quartz-image.pc" "src/cairo-quartz-image.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-quartz-image%g;            s%@FEATURE_NAME@%Quartz Image surface backend%g;                s%@FEATURE_BASE@%$quartz_image_BASE%g;          s%@FEATURE_REQUIRES@%$quartz_image_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$quartz_image_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$quartz_image_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$quartz_image_NONPKGCONFIG_CFLAGS%g;            " < "src/cairo-quartz-image.pc.tmp" > "src/cairo-quartz-image.pc" && rm -f "src/cairo-quartz-image.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-quartz-image.pc" "$LINENO" 5
+        ;;
+    "cairo-quartz-image-uninstalled.pc":F)             mv "cairo-quartz-image-uninstalled.pc" "cairo-quartz-image-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-quartz-image%g;            s%@FEATURE_NAME@%Quartz Image surface backend%g;                s%@FEATURE_BASE@%$quartz_image_BASE%g;          s%@FEATURE_REQUIRES@%$quartz_image_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$quartz_image_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$quartz_image_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$quartz_image_NONPKGCONFIG_CFLAGS%g;            " < "cairo-quartz-image-uninstalled.pc.tmp" > "cairo-quartz-image-uninstalled.pc" && rm -f "cairo-quartz-image-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-quartz-image-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-win32.pc":F)            mv "src/cairo-win32.pc" "src/cairo-win32.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-win32%g;           s%@FEATURE_NAME@%Microsoft Windows surface backend%g;           s%@FEATURE_BASE@%$win32_BASE%g;         s%@FEATURE_REQUIRES@%$win32_REQUIRES%g;         s%@FEATURE_NONPKGCONFIG_LIBS@%$win32_NONPKGCONFIG_LIBS%g;               s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$win32_NONPKGCONFIG_EXTRA_LIBS%g;           s%@FEATURE_NONPKGCONFIG_CFLAGS@%$win32_NONPKGCONFIG_CFLAGS%g;           " < "src/cairo-win32.pc.tmp" > "src/cairo-win32.pc" && rm -f "src/cairo-win32.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-win32.pc" "$LINENO" 5
+        ;;
+    "cairo-win32-uninstalled.pc":F)            mv "cairo-win32-uninstalled.pc" "cairo-win32-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-win32%g;           s%@FEATURE_NAME@%Microsoft Windows surface backend%g;           s%@FEATURE_BASE@%$win32_BASE%g;         s%@FEATURE_REQUIRES@%$win32_REQUIRES%g;         s%@FEATURE_NONPKGCONFIG_LIBS@%$win32_NONPKGCONFIG_LIBS%g;               s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$win32_NONPKGCONFIG_EXTRA_LIBS%g;           s%@FEATURE_NONPKGCONFIG_CFLAGS@%$win32_NONPKGCONFIG_CFLAGS%g;           " < "cairo-win32-uninstalled.pc.tmp" > "cairo-win32-uninstalled.pc" && rm -f "cairo-win32-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-win32-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-win32-font.pc":F)               mv "src/cairo-win32-font.pc" "src/cairo-win32-font.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-win32-font%g;              s%@FEATURE_NAME@%Microsoft Windows font backend%g;              s%@FEATURE_BASE@%$win32_font_BASE%g;            s%@FEATURE_REQUIRES@%$win32_font_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$win32_font_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$win32_font_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$win32_font_NONPKGCONFIG_CFLAGS%g;              " < "src/cairo-win32-font.pc.tmp" > "src/cairo-win32-font.pc" && rm -f "src/cairo-win32-font.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-win32-font.pc" "$LINENO" 5
+        ;;
+    "cairo-win32-font-uninstalled.pc":F)               mv "cairo-win32-font-uninstalled.pc" "cairo-win32-font-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-win32-font%g;              s%@FEATURE_NAME@%Microsoft Windows font backend%g;              s%@FEATURE_BASE@%$win32_font_BASE%g;            s%@FEATURE_REQUIRES@%$win32_font_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$win32_font_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$win32_font_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$win32_font_NONPKGCONFIG_CFLAGS%g;              " < "cairo-win32-font-uninstalled.pc.tmp" > "cairo-win32-font-uninstalled.pc" && rm -f "cairo-win32-font-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-win32-font-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-skia.pc":F)             mv "src/cairo-skia.pc" "src/cairo-skia.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-skia%g;            s%@FEATURE_NAME@%Skia surface backend%g;                s%@FEATURE_BASE@%$skia_BASE%g;          s%@FEATURE_REQUIRES@%$skia_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$skia_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$skia_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$skia_NONPKGCONFIG_CFLAGS%g;            " < "src/cairo-skia.pc.tmp" > "src/cairo-skia.pc" && rm -f "src/cairo-skia.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-skia.pc" "$LINENO" 5
+        ;;
+    "cairo-skia-uninstalled.pc":F)             mv "cairo-skia-uninstalled.pc" "cairo-skia-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-skia%g;            s%@FEATURE_NAME@%Skia surface backend%g;                s%@FEATURE_BASE@%$skia_BASE%g;          s%@FEATURE_REQUIRES@%$skia_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$skia_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$skia_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$skia_NONPKGCONFIG_CFLAGS%g;            " < "cairo-skia-uninstalled.pc.tmp" > "cairo-skia-uninstalled.pc" && rm -f "cairo-skia-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-skia-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-os2.pc":F)              mv "src/cairo-os2.pc" "src/cairo-os2.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-os2%g;             s%@FEATURE_NAME@%OS/2 surface backend%g;                s%@FEATURE_BASE@%$os2_BASE%g;           s%@FEATURE_REQUIRES@%$os2_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$os2_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$os2_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$os2_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-os2.pc.tmp" > "src/cairo-os2.pc" && rm -f "src/cairo-os2.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-os2.pc" "$LINENO" 5
+        ;;
+    "cairo-os2-uninstalled.pc":F)              mv "cairo-os2-uninstalled.pc" "cairo-os2-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-os2%g;             s%@FEATURE_NAME@%OS/2 surface backend%g;                s%@FEATURE_BASE@%$os2_BASE%g;           s%@FEATURE_REQUIRES@%$os2_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$os2_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$os2_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$os2_NONPKGCONFIG_CFLAGS%g;             " < "cairo-os2-uninstalled.pc.tmp" > "cairo-os2-uninstalled.pc" && rm -f "cairo-os2-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-os2-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-beos.pc":F)             mv "src/cairo-beos.pc" "src/cairo-beos.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-beos%g;            s%@FEATURE_NAME@%BeOS/Zeta surface backend%g;           s%@FEATURE_BASE@%$beos_BASE%g;          s%@FEATURE_REQUIRES@%$beos_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$beos_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$beos_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$beos_NONPKGCONFIG_CFLAGS%g;            " < "src/cairo-beos.pc.tmp" > "src/cairo-beos.pc" && rm -f "src/cairo-beos.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-beos.pc" "$LINENO" 5
+        ;;
+    "cairo-beos-uninstalled.pc":F)             mv "cairo-beos-uninstalled.pc" "cairo-beos-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-beos%g;            s%@FEATURE_NAME@%BeOS/Zeta surface backend%g;           s%@FEATURE_BASE@%$beos_BASE%g;          s%@FEATURE_REQUIRES@%$beos_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$beos_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$beos_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$beos_NONPKGCONFIG_CFLAGS%g;            " < "cairo-beos-uninstalled.pc.tmp" > "cairo-beos-uninstalled.pc" && rm -f "cairo-beos-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-beos-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-drm.pc":F)              mv "src/cairo-drm.pc" "src/cairo-drm.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-drm%g;             s%@FEATURE_NAME@%DRM surface backend%g;         s%@FEATURE_BASE@%$drm_BASE%g;           s%@FEATURE_REQUIRES@%$drm_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$drm_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$drm_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$drm_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-drm.pc.tmp" > "src/cairo-drm.pc" && rm -f "src/cairo-drm.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-drm.pc" "$LINENO" 5
+        ;;
+    "cairo-drm-uninstalled.pc":F)              mv "cairo-drm-uninstalled.pc" "cairo-drm-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-drm%g;             s%@FEATURE_NAME@%DRM surface backend%g;         s%@FEATURE_BASE@%$drm_BASE%g;           s%@FEATURE_REQUIRES@%$drm_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$drm_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$drm_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$drm_NONPKGCONFIG_CFLAGS%g;             " < "cairo-drm-uninstalled.pc.tmp" > "cairo-drm-uninstalled.pc" && rm -f "cairo-drm-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-drm-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-gallium.pc":F)          mv "src/cairo-gallium.pc" "src/cairo-gallium.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-gallium%g;         s%@FEATURE_NAME@%Gallium3D surface backend%g;           s%@FEATURE_BASE@%$gallium_BASE%g;               s%@FEATURE_REQUIRES@%$gallium_REQUIRES%g;               s%@FEATURE_NONPKGCONFIG_LIBS@%$gallium_NONPKGCONFIG_LIBS%g;             s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$gallium_NONPKGCONFIG_EXTRA_LIBS%g;         s%@FEATURE_NONPKGCONFIG_CFLAGS@%$gallium_NONPKGCONFIG_CFLAGS%g;         " < "src/cairo-gallium.pc.tmp" > "src/cairo-gallium.pc" && rm -f "src/cairo-gallium.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-gallium.pc" "$LINENO" 5
+        ;;
+    "cairo-gallium-uninstalled.pc":F)          mv "cairo-gallium-uninstalled.pc" "cairo-gallium-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-gallium%g;         s%@FEATURE_NAME@%Gallium3D surface backend%g;           s%@FEATURE_BASE@%$gallium_BASE%g;               s%@FEATURE_REQUIRES@%$gallium_REQUIRES%g;               s%@FEATURE_NONPKGCONFIG_LIBS@%$gallium_NONPKGCONFIG_LIBS%g;             s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$gallium_NONPKGCONFIG_EXTRA_LIBS%g;         s%@FEATURE_NONPKGCONFIG_CFLAGS@%$gallium_NONPKGCONFIG_CFLAGS%g;         " < "cairo-gallium-uninstalled.pc.tmp" > "cairo-gallium-uninstalled.pc" && rm -f "cairo-gallium-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-gallium-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-png.pc":F)              mv "src/cairo-png.pc" "src/cairo-png.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-png%g;             s%@FEATURE_NAME@%PNG functions%g;               s%@FEATURE_BASE@%$png_BASE%g;           s%@FEATURE_REQUIRES@%$png_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$png_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$png_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$png_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-png.pc.tmp" > "src/cairo-png.pc" && rm -f "src/cairo-png.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-png.pc" "$LINENO" 5
+        ;;
+    "cairo-png-uninstalled.pc":F)              mv "cairo-png-uninstalled.pc" "cairo-png-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-png%g;             s%@FEATURE_NAME@%PNG functions%g;               s%@FEATURE_BASE@%$png_BASE%g;           s%@FEATURE_REQUIRES@%$png_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$png_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$png_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$png_NONPKGCONFIG_CFLAGS%g;             " < "cairo-png-uninstalled.pc.tmp" > "cairo-png-uninstalled.pc" && rm -f "cairo-png-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-png-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-gl.pc":F)               mv "src/cairo-gl.pc" "src/cairo-gl.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-gl%g;              s%@FEATURE_NAME@%OpenGL surface backend%g;              s%@FEATURE_BASE@%$gl_BASE%g;            s%@FEATURE_REQUIRES@%$gl_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$gl_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$gl_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$gl_NONPKGCONFIG_CFLAGS%g;              " < "src/cairo-gl.pc.tmp" > "src/cairo-gl.pc" && rm -f "src/cairo-gl.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-gl.pc" "$LINENO" 5
+        ;;
+    "cairo-gl-uninstalled.pc":F)               mv "cairo-gl-uninstalled.pc" "cairo-gl-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-gl%g;              s%@FEATURE_NAME@%OpenGL surface backend%g;              s%@FEATURE_BASE@%$gl_BASE%g;            s%@FEATURE_REQUIRES@%$gl_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$gl_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$gl_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$gl_NONPKGCONFIG_CFLAGS%g;              " < "cairo-gl-uninstalled.pc.tmp" > "cairo-gl-uninstalled.pc" && rm -f "cairo-gl-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-gl-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-glesv2.pc":F)           mv "src/cairo-glesv2.pc" "src/cairo-glesv2.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-glesv2%g;          s%@FEATURE_NAME@%OpenGLESv2 surface backend%g;          s%@FEATURE_BASE@%$glesv2_BASE%g;                s%@FEATURE_REQUIRES@%$glesv2_REQUIRES%g;                s%@FEATURE_NONPKGCONFIG_LIBS@%$glesv2_NONPKGCONFIG_LIBS%g;              s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$glesv2_NONPKGCONFIG_EXTRA_LIBS%g;          s%@FEATURE_NONPKGCONFIG_CFLAGS@%$glesv2_NONPKGCONFIG_CFLAGS%g;          " < "src/cairo-glesv2.pc.tmp" > "src/cairo-glesv2.pc" && rm -f "src/cairo-glesv2.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-glesv2.pc" "$LINENO" 5
+        ;;
+    "cairo-glesv2-uninstalled.pc":F)           mv "cairo-glesv2-uninstalled.pc" "cairo-glesv2-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-glesv2%g;          s%@FEATURE_NAME@%OpenGLESv2 surface backend%g;          s%@FEATURE_BASE@%$glesv2_BASE%g;                s%@FEATURE_REQUIRES@%$glesv2_REQUIRES%g;                s%@FEATURE_NONPKGCONFIG_LIBS@%$glesv2_NONPKGCONFIG_LIBS%g;              s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$glesv2_NONPKGCONFIG_EXTRA_LIBS%g;          s%@FEATURE_NONPKGCONFIG_CFLAGS@%$glesv2_NONPKGCONFIG_CFLAGS%g;          " < "cairo-glesv2-uninstalled.pc.tmp" > "cairo-glesv2-uninstalled.pc" && rm -f "cairo-glesv2-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-glesv2-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-cogl.pc":F)             mv "src/cairo-cogl.pc" "src/cairo-cogl.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-cogl%g;            s%@FEATURE_NAME@%Cogl surface backend%g;                s%@FEATURE_BASE@%$cogl_BASE%g;          s%@FEATURE_REQUIRES@%$cogl_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$cogl_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$cogl_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$cogl_NONPKGCONFIG_CFLAGS%g;            " < "src/cairo-cogl.pc.tmp" > "src/cairo-cogl.pc" && rm -f "src/cairo-cogl.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-cogl.pc" "$LINENO" 5
+        ;;
+    "cairo-cogl-uninstalled.pc":F)             mv "cairo-cogl-uninstalled.pc" "cairo-cogl-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-cogl%g;            s%@FEATURE_NAME@%Cogl surface backend%g;                s%@FEATURE_BASE@%$cogl_BASE%g;          s%@FEATURE_REQUIRES@%$cogl_REQUIRES%g;          s%@FEATURE_NONPKGCONFIG_LIBS@%$cogl_NONPKGCONFIG_LIBS%g;                s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$cogl_NONPKGCONFIG_EXTRA_LIBS%g;            s%@FEATURE_NONPKGCONFIG_CFLAGS@%$cogl_NONPKGCONFIG_CFLAGS%g;            " < "cairo-cogl-uninstalled.pc.tmp" > "cairo-cogl-uninstalled.pc" && rm -f "cairo-cogl-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-cogl-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-directfb.pc":F)                 mv "src/cairo-directfb.pc" "src/cairo-directfb.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-directfb%g;                s%@FEATURE_NAME@%directfb surface backend%g;            s%@FEATURE_BASE@%$directfb_BASE%g;              s%@FEATURE_REQUIRES@%$directfb_REQUIRES%g;              s%@FEATURE_NONPKGCONFIG_LIBS@%$directfb_NONPKGCONFIG_LIBS%g;            s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$directfb_NONPKGCONFIG_EXTRA_LIBS%g;                s%@FEATURE_NONPKGCONFIG_CFLAGS@%$directfb_NONPKGCONFIG_CFLAGS%g;                " < "src/cairo-directfb.pc.tmp" > "src/cairo-directfb.pc" && rm -f "src/cairo-directfb.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-directfb.pc" "$LINENO" 5
+        ;;
+    "cairo-directfb-uninstalled.pc":F)                 mv "cairo-directfb-uninstalled.pc" "cairo-directfb-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-directfb%g;                s%@FEATURE_NAME@%directfb surface backend%g;            s%@FEATURE_BASE@%$directfb_BASE%g;              s%@FEATURE_REQUIRES@%$directfb_REQUIRES%g;              s%@FEATURE_NONPKGCONFIG_LIBS@%$directfb_NONPKGCONFIG_LIBS%g;            s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$directfb_NONPKGCONFIG_EXTRA_LIBS%g;                s%@FEATURE_NONPKGCONFIG_CFLAGS@%$directfb_NONPKGCONFIG_CFLAGS%g;                " < "cairo-directfb-uninstalled.pc.tmp" > "cairo-directfb-uninstalled.pc" && rm -f "cairo-directfb-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-directfb-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-vg.pc":F)               mv "src/cairo-vg.pc" "src/cairo-vg.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-vg%g;              s%@FEATURE_NAME@%OpenVG surface backend%g;              s%@FEATURE_BASE@%$vg_BASE%g;            s%@FEATURE_REQUIRES@%$vg_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$vg_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$vg_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$vg_NONPKGCONFIG_CFLAGS%g;              " < "src/cairo-vg.pc.tmp" > "src/cairo-vg.pc" && rm -f "src/cairo-vg.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-vg.pc" "$LINENO" 5
+        ;;
+    "cairo-vg-uninstalled.pc":F)               mv "cairo-vg-uninstalled.pc" "cairo-vg-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-vg%g;              s%@FEATURE_NAME@%OpenVG surface backend%g;              s%@FEATURE_BASE@%$vg_BASE%g;            s%@FEATURE_REQUIRES@%$vg_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$vg_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$vg_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$vg_NONPKGCONFIG_CFLAGS%g;              " < "cairo-vg-uninstalled.pc.tmp" > "cairo-vg-uninstalled.pc" && rm -f "cairo-vg-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-vg-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-egl.pc":F)              mv "src/cairo-egl.pc" "src/cairo-egl.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-egl%g;             s%@FEATURE_NAME@%EGL functions%g;               s%@FEATURE_BASE@%$egl_BASE%g;           s%@FEATURE_REQUIRES@%$egl_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$egl_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$egl_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$egl_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-egl.pc.tmp" > "src/cairo-egl.pc" && rm -f "src/cairo-egl.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-egl.pc" "$LINENO" 5
+        ;;
+    "cairo-egl-uninstalled.pc":F)              mv "cairo-egl-uninstalled.pc" "cairo-egl-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-egl%g;             s%@FEATURE_NAME@%EGL functions%g;               s%@FEATURE_BASE@%$egl_BASE%g;           s%@FEATURE_REQUIRES@%$egl_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$egl_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$egl_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$egl_NONPKGCONFIG_CFLAGS%g;             " < "cairo-egl-uninstalled.pc.tmp" > "cairo-egl-uninstalled.pc" && rm -f "cairo-egl-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-egl-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-glx.pc":F)              mv "src/cairo-glx.pc" "src/cairo-glx.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-glx%g;             s%@FEATURE_NAME@%GLX functions%g;               s%@FEATURE_BASE@%$glx_BASE%g;           s%@FEATURE_REQUIRES@%$glx_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$glx_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$glx_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$glx_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-glx.pc.tmp" > "src/cairo-glx.pc" && rm -f "src/cairo-glx.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-glx.pc" "$LINENO" 5
+        ;;
+    "cairo-glx-uninstalled.pc":F)              mv "cairo-glx-uninstalled.pc" "cairo-glx-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-glx%g;             s%@FEATURE_NAME@%GLX functions%g;               s%@FEATURE_BASE@%$glx_BASE%g;           s%@FEATURE_REQUIRES@%$glx_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$glx_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$glx_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$glx_NONPKGCONFIG_CFLAGS%g;             " < "cairo-glx-uninstalled.pc.tmp" > "cairo-glx-uninstalled.pc" && rm -f "cairo-glx-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-glx-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-wgl.pc":F)              mv "src/cairo-wgl.pc" "src/cairo-wgl.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-wgl%g;             s%@FEATURE_NAME@%WGL functions%g;               s%@FEATURE_BASE@%$wgl_BASE%g;           s%@FEATURE_REQUIRES@%$wgl_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$wgl_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$wgl_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$wgl_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-wgl.pc.tmp" > "src/cairo-wgl.pc" && rm -f "src/cairo-wgl.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-wgl.pc" "$LINENO" 5
+        ;;
+    "cairo-wgl-uninstalled.pc":F)              mv "cairo-wgl-uninstalled.pc" "cairo-wgl-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-wgl%g;             s%@FEATURE_NAME@%WGL functions%g;               s%@FEATURE_BASE@%$wgl_BASE%g;           s%@FEATURE_REQUIRES@%$wgl_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$wgl_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$wgl_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$wgl_NONPKGCONFIG_CFLAGS%g;             " < "cairo-wgl-uninstalled.pc.tmp" > "cairo-wgl-uninstalled.pc" && rm -f "cairo-wgl-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-wgl-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-script.pc":F)           mv "src/cairo-script.pc" "src/cairo-script.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-script%g;          s%@FEATURE_NAME@%script surface backend%g;              s%@FEATURE_BASE@%$script_BASE%g;                s%@FEATURE_REQUIRES@%$script_REQUIRES%g;                s%@FEATURE_NONPKGCONFIG_LIBS@%$script_NONPKGCONFIG_LIBS%g;              s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$script_NONPKGCONFIG_EXTRA_LIBS%g;          s%@FEATURE_NONPKGCONFIG_CFLAGS@%$script_NONPKGCONFIG_CFLAGS%g;          " < "src/cairo-script.pc.tmp" > "src/cairo-script.pc" && rm -f "src/cairo-script.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-script.pc" "$LINENO" 5
+        ;;
+    "cairo-script-uninstalled.pc":F)           mv "cairo-script-uninstalled.pc" "cairo-script-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-script%g;          s%@FEATURE_NAME@%script surface backend%g;              s%@FEATURE_BASE@%$script_BASE%g;                s%@FEATURE_REQUIRES@%$script_REQUIRES%g;                s%@FEATURE_NONPKGCONFIG_LIBS@%$script_NONPKGCONFIG_LIBS%g;              s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$script_NONPKGCONFIG_EXTRA_LIBS%g;          s%@FEATURE_NONPKGCONFIG_CFLAGS@%$script_NONPKGCONFIG_CFLAGS%g;          " < "cairo-script-uninstalled.pc.tmp" > "cairo-script-uninstalled.pc" && rm -f "cairo-script-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-script-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-ft.pc":F)               mv "src/cairo-ft.pc" "src/cairo-ft.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-ft%g;              s%@FEATURE_NAME@%FreeType font backend%g;               s%@FEATURE_BASE@%$ft_BASE%g;            s%@FEATURE_REQUIRES@%$ft_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$ft_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$ft_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$ft_NONPKGCONFIG_CFLAGS%g;              " < "src/cairo-ft.pc.tmp" > "src/cairo-ft.pc" && rm -f "src/cairo-ft.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-ft.pc" "$LINENO" 5
+        ;;
+    "cairo-ft-uninstalled.pc":F)               mv "cairo-ft-uninstalled.pc" "cairo-ft-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-ft%g;              s%@FEATURE_NAME@%FreeType font backend%g;               s%@FEATURE_BASE@%$ft_BASE%g;            s%@FEATURE_REQUIRES@%$ft_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$ft_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$ft_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$ft_NONPKGCONFIG_CFLAGS%g;              " < "cairo-ft-uninstalled.pc.tmp" > "cairo-ft-uninstalled.pc" && rm -f "cairo-ft-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-ft-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-fc.pc":F)               mv "src/cairo-fc.pc" "src/cairo-fc.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-fc%g;              s%@FEATURE_NAME@%Fontconfig font backend%g;             s%@FEATURE_BASE@%$fc_BASE%g;            s%@FEATURE_REQUIRES@%$fc_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$fc_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$fc_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$fc_NONPKGCONFIG_CFLAGS%g;              " < "src/cairo-fc.pc.tmp" > "src/cairo-fc.pc" && rm -f "src/cairo-fc.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-fc.pc" "$LINENO" 5
+        ;;
+    "cairo-fc-uninstalled.pc":F)               mv "cairo-fc-uninstalled.pc" "cairo-fc-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-fc%g;              s%@FEATURE_NAME@%Fontconfig font backend%g;             s%@FEATURE_BASE@%$fc_BASE%g;            s%@FEATURE_REQUIRES@%$fc_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$fc_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$fc_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$fc_NONPKGCONFIG_CFLAGS%g;              " < "cairo-fc-uninstalled.pc.tmp" > "cairo-fc-uninstalled.pc" && rm -f "cairo-fc-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-fc-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-ps.pc":F)               mv "src/cairo-ps.pc" "src/cairo-ps.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-ps%g;              s%@FEATURE_NAME@%PostScript surface backend%g;          s%@FEATURE_BASE@%$ps_BASE%g;            s%@FEATURE_REQUIRES@%$ps_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$ps_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$ps_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$ps_NONPKGCONFIG_CFLAGS%g;              " < "src/cairo-ps.pc.tmp" > "src/cairo-ps.pc" && rm -f "src/cairo-ps.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-ps.pc" "$LINENO" 5
+        ;;
+    "cairo-ps-uninstalled.pc":F)               mv "cairo-ps-uninstalled.pc" "cairo-ps-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-ps%g;              s%@FEATURE_NAME@%PostScript surface backend%g;          s%@FEATURE_BASE@%$ps_BASE%g;            s%@FEATURE_REQUIRES@%$ps_REQUIRES%g;            s%@FEATURE_NONPKGCONFIG_LIBS@%$ps_NONPKGCONFIG_LIBS%g;          s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$ps_NONPKGCONFIG_EXTRA_LIBS%g;              s%@FEATURE_NONPKGCONFIG_CFLAGS@%$ps_NONPKGCONFIG_CFLAGS%g;              " < "cairo-ps-uninstalled.pc.tmp" > "cairo-ps-uninstalled.pc" && rm -f "cairo-ps-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-ps-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-pdf.pc":F)              mv "src/cairo-pdf.pc" "src/cairo-pdf.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-pdf%g;             s%@FEATURE_NAME@%PDF surface backend%g;         s%@FEATURE_BASE@%$pdf_BASE%g;           s%@FEATURE_REQUIRES@%$pdf_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$pdf_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$pdf_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$pdf_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-pdf.pc.tmp" > "src/cairo-pdf.pc" && rm -f "src/cairo-pdf.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-pdf.pc" "$LINENO" 5
+        ;;
+    "cairo-pdf-uninstalled.pc":F)              mv "cairo-pdf-uninstalled.pc" "cairo-pdf-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-pdf%g;             s%@FEATURE_NAME@%PDF surface backend%g;         s%@FEATURE_BASE@%$pdf_BASE%g;           s%@FEATURE_REQUIRES@%$pdf_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$pdf_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$pdf_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$pdf_NONPKGCONFIG_CFLAGS%g;             " < "cairo-pdf-uninstalled.pc.tmp" > "cairo-pdf-uninstalled.pc" && rm -f "cairo-pdf-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-pdf-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-svg.pc":F)              mv "src/cairo-svg.pc" "src/cairo-svg.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-svg%g;             s%@FEATURE_NAME@%SVG surface backend%g;         s%@FEATURE_BASE@%$svg_BASE%g;           s%@FEATURE_REQUIRES@%$svg_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$svg_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$svg_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$svg_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-svg.pc.tmp" > "src/cairo-svg.pc" && rm -f "src/cairo-svg.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-svg.pc" "$LINENO" 5
+        ;;
+    "cairo-svg-uninstalled.pc":F)              mv "cairo-svg-uninstalled.pc" "cairo-svg-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-svg%g;             s%@FEATURE_NAME@%SVG surface backend%g;         s%@FEATURE_BASE@%$svg_BASE%g;           s%@FEATURE_REQUIRES@%$svg_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$svg_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$svg_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$svg_NONPKGCONFIG_CFLAGS%g;             " < "cairo-svg-uninstalled.pc.tmp" > "cairo-svg-uninstalled.pc" && rm -f "cairo-svg-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-svg-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-tee.pc":F)              mv "src/cairo-tee.pc" "src/cairo-tee.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-tee%g;             s%@FEATURE_NAME@%tee surface backend%g;         s%@FEATURE_BASE@%$tee_BASE%g;           s%@FEATURE_REQUIRES@%$tee_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$tee_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$tee_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$tee_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-tee.pc.tmp" > "src/cairo-tee.pc" && rm -f "src/cairo-tee.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-tee.pc" "$LINENO" 5
+        ;;
+    "cairo-tee-uninstalled.pc":F)              mv "cairo-tee-uninstalled.pc" "cairo-tee-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-tee%g;             s%@FEATURE_NAME@%tee surface backend%g;         s%@FEATURE_BASE@%$tee_BASE%g;           s%@FEATURE_REQUIRES@%$tee_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$tee_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$tee_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$tee_NONPKGCONFIG_CFLAGS%g;             " < "cairo-tee-uninstalled.pc.tmp" > "cairo-tee-uninstalled.pc" && rm -f "cairo-tee-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-tee-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-xml.pc":F)              mv "src/cairo-xml.pc" "src/cairo-xml.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xml%g;             s%@FEATURE_NAME@%xml surface backend%g;         s%@FEATURE_BASE@%$xml_BASE%g;           s%@FEATURE_REQUIRES@%$xml_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$xml_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xml_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xml_NONPKGCONFIG_CFLAGS%g;             " < "src/cairo-xml.pc.tmp" > "src/cairo-xml.pc" && rm -f "src/cairo-xml.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-xml.pc" "$LINENO" 5
+        ;;
+    "cairo-xml-uninstalled.pc":F)              mv "cairo-xml-uninstalled.pc" "cairo-xml-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-xml%g;             s%@FEATURE_NAME@%xml surface backend%g;         s%@FEATURE_BASE@%$xml_BASE%g;           s%@FEATURE_REQUIRES@%$xml_REQUIRES%g;           s%@FEATURE_NONPKGCONFIG_LIBS@%$xml_NONPKGCONFIG_LIBS%g;         s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$xml_NONPKGCONFIG_EXTRA_LIBS%g;             s%@FEATURE_NONPKGCONFIG_CFLAGS@%$xml_NONPKGCONFIG_CFLAGS%g;             " < "cairo-xml-uninstalled.pc.tmp" > "cairo-xml-uninstalled.pc" && rm -f "cairo-xml-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-xml-uninstalled.pc" "$LINENO" 5
+        ;;
+    "src/cairo-gobject.pc":F)          mv "src/cairo-gobject.pc" "src/cairo-gobject.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-gobject%g;         s%@FEATURE_NAME@%gobject functions%g;           s%@FEATURE_BASE@%$gobject_BASE%g;               s%@FEATURE_REQUIRES@%$gobject_REQUIRES%g;               s%@FEATURE_NONPKGCONFIG_LIBS@%$gobject_NONPKGCONFIG_LIBS%g;             s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$gobject_NONPKGCONFIG_EXTRA_LIBS%g;         s%@FEATURE_NONPKGCONFIG_CFLAGS@%$gobject_NONPKGCONFIG_CFLAGS%g;         " < "src/cairo-gobject.pc.tmp" > "src/cairo-gobject.pc" && rm -f "src/cairo-gobject.pc.tmp" ||
+               as_fn_error $? "failed to update src/cairo-gobject.pc" "$LINENO" 5
+        ;;
+    "cairo-gobject-uninstalled.pc":F)          mv "cairo-gobject-uninstalled.pc" "cairo-gobject-uninstalled.pc.tmp" &&
+               $SED "          s%@FEATURE_PC@%cairo-gobject%g;         s%@FEATURE_NAME@%gobject functions%g;           s%@FEATURE_BASE@%$gobject_BASE%g;               s%@FEATURE_REQUIRES@%$gobject_REQUIRES%g;               s%@FEATURE_NONPKGCONFIG_LIBS@%$gobject_NONPKGCONFIG_LIBS%g;             s%@FEATURE_NONPKGCONFIG_EXTRA_LIBS@%$gobject_NONPKGCONFIG_EXTRA_LIBS%g;         s%@FEATURE_NONPKGCONFIG_CFLAGS@%$gobject_NONPKGCONFIG_CFLAGS%g;         " < "cairo-gobject-uninstalled.pc.tmp" > "cairo-gobject-uninstalled.pc" && rm -f "cairo-gobject-uninstalled.pc.tmp" ||
+               as_fn_error $? "failed to update cairo-gobject-uninstalled.pc" "$LINENO" 5
+        ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+       V="$CAIRO_VERSION_MAJOR.$CAIRO_VERSION_MINOR.$CAIRO_VERSION_MICRO"
+       echo ""
+       echo "cairo (version $V [$CAIRO_RELEASE_STATUS]) will be compiled with:"
+       echo ""
+       echo "The following surface backends:"
+       echo "  Image:         yes (always builtin)"
+       echo "  Recording:     yes (always builtin)"
+       echo "  Observer:      yes (always builtin)"
+       echo "  Mime:          yes (always builtin)"
+       echo "  Tee:           $use_tee"
+       echo "  XML:           $use_xml"
+       echo "  Skia:          $use_skia"
+       echo "  Xlib:          $use_xlib"
+       echo "  Xlib Xrender:  $use_xlib_xrender"
+       echo "  Qt:            $use_qt"
+       echo "  Quartz:        $use_quartz"
+       echo "  Quartz-image:  $use_quartz_image"
+       echo "  XCB:           $use_xcb"
+       echo "  Win32:         $use_win32"
+       echo "  OS2:           $use_os2"
+       echo "  CairoScript:   $use_script"
+       echo "  PostScript:    $use_ps"
+       echo "  PDF:           $use_pdf"
+       echo "  SVG:           $use_svg"
+       echo "  OpenGL:        $use_gl"
+       echo "  OpenGL ES 2.0: $use_glesv2"
+       echo "  BeOS:          $use_beos"
+       echo "  DirectFB:      $use_directfb"
+       echo "  OpenVG:        $use_vg"
+       echo "  DRM:           $use_drm"
+       echo "  Cogl:          $use_cogl"
+       echo ""
+       echo "The following font backends:"
+       echo "  User:          yes (always builtin)"
+       echo "  FreeType:      $use_ft"
+       echo "  Fontconfig:    $use_fc"
+       echo "  Win32:         $use_win32_font"
+       echo "  Quartz:        $use_quartz_font"
+       echo ""
+       echo "The following functions:"
+       echo "  PNG functions:   $use_png"
+       echo "  GLX functions:   $use_glx"
+       echo "  WGL functions:   $use_wgl"
+       echo "  EGL functions:   $use_egl"
+       echo "  X11-xcb functions: $use_xlib_xcb"
+       echo "  XCB-shm functions: $use_xcb_shm"
+       echo ""
+       echo "The following features and utilities:"
+       echo "  cairo-trace:                $use_trace"
+       echo "  cairo-script-interpreter:   $use_interpreter"
+       echo ""
+       echo "And the following internal features:"
+       echo "  pthread:       $use_pthread"
+       echo "  gtk-doc:       $enable_gtk_doc"
+       echo "  gcov support:  $use_gcov"
+       echo "  symbol-lookup: $use_symbol_lookup"
+       echo "  test surfaces: $use_test_surfaces"
+       echo "  ps testing:    $test_ps"
+       echo "  pdf testing:   $test_pdf"
+       echo "  svg testing:   $test_svg"
+       if test x"$use_win32" = "xyes"; then
+               echo "  win32 printing testing:    $test_win32_printing"
+       fi
+       echo "$CAIRO_WARNING_MESSAGE"
+       echo ""
+
index f50e69e..df55cbc 100644 (file)
@@ -1,19 +1,25 @@
-AC_PREREQ(2.59)
+AC_PREREQ([2.63])
 CAIRO_PARSE_VERSION
 AC_INIT([cairo],
        [cairo_version_major.cairo_version_minor.cairo_version_micro],
-       [http://bugs.freedesktop.org/enter_bug.cgi?product=cairo])
+       [http://bugs.freedesktop.org/enter_bug.cgi?product=cairo],
+       [cairo],
+       [http://cairographics.org/])
 AC_CONFIG_AUX_DIR(build)
 AC_CONFIG_MACRO_DIR(build)
-AC_GNU_SOURCE
 AC_USE_SYSTEM_EXTENSIONS
 AC_CONFIG_SRCDIR(src/cairo.h)
 AC_CONFIG_HEADERS(config.h)
-AM_INIT_AUTOMAKE([1.9.6 gnu -Wall no-define])
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-AC_LIBTOOL_WIN32_DLL dnl Must be called before AC_PROG_LIBTOOL
-AC_PROG_LIBTOOL dnl ([1.4]) Don't remove!
-GTK_DOC_CHECK([1.6])
+
+AM_INIT_AUTOMAKE([1.11 foreign -Wall no-define no-dist-gzip dist-xz])
+AM_SILENT_RULES([yes])
+
+# Initialize libtool
+LT_PREREQ([2.2])
+LT_INIT([win32-dll])
+
+# Api documentation
+GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
 
 AC_SYS_LARGEFILE
 
@@ -52,6 +58,7 @@ AM_CONDITIONAL(CAIRO_HAS_DL, test "x$have_dl" = "xyes")
 if test "x$have_dlsym" = "xyes"; then
   AC_DEFINE([CAIRO_HAS_DLSYM], 1, [Define to 1 if dlsym is available])
 fi
+AM_CONDITIONAL(CAIRO_HAS_DLSYM, test "x$have_dlsym" = "xyes")
 
 dnl ===========================================================================
 
@@ -311,7 +318,7 @@ CAIRO_ENABLE_SURFACE_BACKEND(gl, OpenGL, no, [
 
 dnl ===========================================================================
 CAIRO_ENABLE_SURFACE_BACKEND(glesv2, OpenGLESv2, no, [
-  glesv2_REQUIRES="glesv2"
+  glesv2_REQUIRES="gles20"
   PKG_CHECK_MODULES(glesv2, $glesv2_REQUIRES,, [
          dnl Fallback to searching for headers
          AC_CHECK_HEADER(GLES2/gl2.h,, [use_glesv2="no (glesv2.pc nor OpenGL ES 2.0 headers not found)"])
@@ -328,6 +335,12 @@ CAIRO_ENABLE_SURFACE_BACKEND(glesv2, OpenGLESv2, no, [
 ])
 
 dnl ===========================================================================
+CAIRO_ENABLE_SURFACE_BACKEND(cogl, Cogl, no, [
+  cogl_REQUIRES="cogl-2.0-experimental"
+  PKG_CHECK_MODULES(cogl, $cogl_REQUIRES,, [use_cogl="no"])
+])
+
+dnl ===========================================================================
 
 CAIRO_ENABLE_SURFACE_BACKEND(directfb, directfb, no, [
   directfb_REQUIRES=directfb
@@ -488,7 +501,7 @@ if test "x$use_ft" = "xyes"; then
   AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
                      [FT_Bitmap_Size structure includes y_ppem field])
 
-  AC_CHECK_FUNCS(FT_GlyphSlot_Embolden FT_Load_Sfnt_Table FT_Library_SetLcdFilter)
+  AC_CHECK_FUNCS(FT_GlyphSlot_Embolden FT_GlyphSlot_Oblique FT_Load_Sfnt_Table FT_Library_SetLcdFilter)
 
   LIBS="$_save_libs"
   CFLAGS="$_save_cflags"
@@ -606,7 +619,7 @@ CAIRO_ENABLE(test_surfaces, test surfaces, no)
 dnl ===========================================================================
 
 CAIRO_ENABLE_SURFACE_BACKEND(image, image, always, [
-  pixman_REQUIRES="pixman-1 >= 0.21.0"
+  pixman_REQUIRES="pixman-1 >= 0.22.0"
   PKG_CHECK_MODULES(pixman, $pixman_REQUIRES, , [AC_MSG_RESULT(no)
   use_image="no (requires $pixman_REQUIRES http://cairographics.org/releases/)"])
   image_REQUIRES=$pixman_REQUIRES
index 54a322e..f878135 100644 (file)
+cairo (1.12.2-slp2+8) unstable; urgency=low
+
+  * Update latest DTS code
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+8
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Thu, 02 Aug 2012 14:59:36 +0900
+
+cairo (1.12.2-slp2+7) unstable; urgency=low
+
+  * Bug fixes and memory optimization
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+7
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Mon, 16 Jul 2012 15:11:38 +0900
+
+cairo (1.12.2-slp2+6) unstable; urgency=low
+
+  * Reupload package
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+6
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Wed, 11 Jul 2012 19:25:02 +0900
+
+cairo (1.12.2-slp2+5) unstable; urgency=low
+
+  * gl: Glyph and image cache surfaces must be released in _gl_finish()
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+5
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Tue, 10 Jul 2012 14:19:56 +0900
+
+cairo (1.12.2-slp2+4) unstable; urgency=low
+
+  * gl: Fix color differences at gradient boundaries
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+4
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Thu, 05 Jul 2012 10:10:35 +0900
+
+cairo (1.12.2-slp2+3) unstable; urgency=low
+
+  * Update cairo gles backend to latest
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+3
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Thu, 21 Jun 2012 12:02:27 +0900
+
+cairo (1.12.2-slp2+2) unstable; urgency=low
+
+  * Fix duplicate context release in msaa mask source operator
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+2
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Tue, 12 Jun 2012 17:03:58 +0900
+
+cairo (1.12.2-slp2+1) unstable; urgency=low
+
+  * Update cairo to 1.12.2 with cairogles optimizations
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.2-slp2+1
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Tue, 08 May 2012 16:26:19 +0900
+
+cairo (1.12.0-slp2+7) unstable; urgency=low
+
+  * Add missing cairo_gl_composite_flush for disabling lazy flushing
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.0-slp2+7
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Thu, 03 May 2012 20:03:18 +0900
+
+cairo (1.12.0-slp2+6) unstable; urgency=low
+
+  * Fix mono scan converter's crash probelm
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.0-slp2+6
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Thu, 26 Apr 2012 17:21:51 +0900
+
+cairo (1.12.0-slp2+5) unstable; urgency=low
+
+  * Revert autogen and configure to fix build error
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.0-slp2+5
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Thu, 26 Apr 2012 13:41:44 +0900
+
+cairo (1.12.0-slp2+4) unstable; urgency=low
+
+  * Update cairo gles backend to latest (commit id: 24857828243b)
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.0-slp2+4
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Wed, 25 Apr 2012 19:24:54 +0900
+
+cairo (1.12.0-slp2+3) unstable; urgency=low
+
+  * Fix memory address reference error in gl msaa compositor
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.0-slp2+3
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Mon, 23 Apr 2012 20:23:25 +0900
+
+cairo (1.12.0-slp2+2) unstable; urgency=low
+
+  * Modify cairo.pc to use gles20 package
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.0-slp2+2
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Thu, 12 Apr 2012 10:05:34 +0900
+
+cairo (1.12.0-slp2+1) unstable; urgency=low
+
+  * Upgrade cairo version to 1.12.0 with cairogles
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.12.0-slp2+1
+
+ -- Dongyeon Kim <dy5.kim@samsung.com>  Mon, 09 Apr 2012 12:12:04 +0900
+
+cairo (1.11.3-slp2+11) unstable; urgency=low
+
+  * Add packaging directory for OBS
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+11
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>  Wed, 14 Mar 2012 18:21:11 +0900
+
+cairo (1.11.3-slp2+10) unstable; urgency=low
+
+  * Remove SLP_FIX_DASHED_LINE_STROKE patch
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+10
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>  Wed, 28 Dec 2011 15:58:21 +0900
+
+cairo (1.11.3-slp2+9) unstable; urgency=low
+
+  * Mono scan converter : fix array size and equation of algorithm
+  * Git: slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+9
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Mon, 19 Dec 2011 13:40:25 +0900
+
 cairo (1.11.3-slp2+8) unstable; urgency=low
 
-  * Remove SLP keyword
-  * Git: unmodified/cairo.git
+  * Fix sometimes polygon isn't displayed well when clip has null path
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
   * Tag: cairo_1.11.3-slp2+8
 
- -- Seongwon Cho <seongwon1.cho@samsung.com>  Fri, 23 Dec 2011 11:26:04 +0900
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Thu, 08 Dec 2011 13:24:36 +0900
 
 cairo (1.11.3-slp2+7) unstable; urgency=low
 
-  * Initial version
-  * Git: unmodified/cairo.git
+  * Fix dashed line stroke issue
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
   * Tag: cairo_1.11.3-slp2+7
 
- -- Seongwon Cho <seongwon1.cho@samsung.com>  Thu, 15 Dec 2011 12:54:03 +0900
+ -- Deokjin Kim <deokjin81.kim@samsung.com>  Wed, 30 Nov 2011 15:23:59 +0900
+
+cairo (1.11.3-slp2+6) unstable; urgency=low
+
+  * Add cairo_ft_font_option_set_extra_flags() for synthetic bold
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+6
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>  Thu, 24 Nov 2011 16:27:58 +0900
+
+cairo (1.11.3-slp2+5) unstable; urgency=low
+
+  * image : Fix display bug regarding subsurface problem in recording surface
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+5
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Wed, 23 Nov 2011 09:26:47 +0900
+
+cairo (1.11.3-slp2+4) unstable; urgency=low
+
+  * image : Fix tessellator crash problem (CQ  H0100136146)
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+4
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Wed, 02 Nov 2011 15:12:57 +0900
+
+cairo (1.11.3-slp2+3) unstable; urgency=low
+
+  * image : Fix Twitter app's button broken problem (CQ H0100135401/H0100136153)
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+3
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Tue, 01 Nov 2011 21:30:06 +0900
+
+cairo (1.11.3-slp2+2) unstable; urgency=low
+
+  * image: Update cairo to upstream latest (solve CQ H0100134938, H0100134936)
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+2
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Thu, 13 Oct 2011 11:00:15 +0900
+
+cairo (1.11.3-slp2+1) unstable; urgency=low
+
+  * image: Upgrade version from 1.10.2 to 1.11.3
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.11.3-slp2+1
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Mon, 10 Oct 2011 11:09:12 +0900
+
+cairo (1.10.2-slp2+7) unstable; urgency=low
+
+  * image: Workaround for antialias of clip path in paint()
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.10.2-slp2+7
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>  Thu, 01 Sep 2011 11:10:09 +0900
+
+cairo (1.10.2-slp2+6) unstable; urgency=low
+
+  * Several bug fixes for clip and unbounded ops
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.10.2-slp2+6
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Wed, 06 Jul 2011 08:16:40 +0900
+
+cairo (1.10.2-slp2+5) unstable; urgency=low
+
+  * tessellator: Fixed to produce an output box with x1 <= x2 for single box
+    input
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.10.2-slp2+5
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Thu, 16 Jun 2011 09:50:09 +0900
+
+cairo (1.10.2-slp2+4) unstable; urgency=low
+
+  * Bug fix for _cairo_image_surface_fixup_unbounded_boxes
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.10.2-slp2+4
+
+ -- Seongwon Cho <seongwon1.cho@samsung.com>  Tue, 14 Jun 2011 13:43:43 +0900
+
+cairo (1.10.2-slp2+3) unstable; urgency=low
+
+  * Fix build break caused by xcb-shm
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.10.2-slp2+3
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>>  Fri, 20 May 2011 13:40:50 +0900
+
+cairo (1.10.2-slp2+2) unstable; urgency=low
+
+  * Fix build break caused by xcb-shm
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.10.2-slp2+2
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>>  Fri, 20 May 2011 12:13:06 +0900
+
+cairo (1.10.2-slp2+1) unstable; urgency=low
+
+  * Upgrade version from 1.8.8 to 1.10.2
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.10.2-slp2+1
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>>  Wed, 27 Apr 2011 18:44:24 +0900
+
+cairo (1.8.8-11slp2) unstable; urgency=low
+
+  * Reupload according to modification of freetype2
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.8.8-11slp2
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>>  Wed, 06 Apr 2011 17:32:04 +0900
+
+cairo (1.8.8-10slp2) unstable; urgency=low
+
+  * Apply '-mfpu=vfp -mfloat-abi=softfp'
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.8.8-10slp2
+
+ -- Boram Park <boram1288.park@samsung.com>>  Wed, 23 Mar 2011 12:09:09 +0900
+
+cairo (1.8.8-9slp2) unstable; urgency=low
+
+  * Don't err on non-invertible font matrix
+  * Git: 165.213.180.234:slp/unmodified/cairo.git
+  * Tag: cairo_1.8.8-9slp2
+
+ -- Boram Park <boram1288.park@samsung.com>>  Fri, 11 Feb 2011 14:13:45 +0900
+
+cairo (1.8.8-8slp2) unstable; urgency=low
+
+  * Version up to 1.8.8-8slp2
+  * Git: 165.213.180.234:/git/slp/unmodified/cairo
+  * Tag: cairo_1.8.8-8slp2
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>>  Thu, 18 Nov 2010 16:07:42 +0900
+
+cairo (1.8.8-7slp2) unstable; urgency=low
+
+  * Version up to 1.8.8-7slp2
+  * Git: 165.213.180.234:/git/slp/unmodified/cairo
+  * Tag: cairo_1.8.8-7slp2
+
+ -- Boram Park <boram1288.park@samsung.com>>  Thu, 18 Nov 2010 14:01:48 +0900
+
+cairo (1.8.8-6slp2) unstable; urgency=low
+
+  * Add "libpixman1.0-0" dependency.
+  * Remove libcairo2-doc
+
+ -- Boram Park <boram1288.park@samsung.com>>  Wed, 06 Oct 2010 16:22:09 +0900
+
+cairo (1.8.8-5slp2) unstable; urgency=low
+
+  * Changing version naming rule
+
+ -- Boram Park <boram1288.park@samsung.com>>  Wed, 24 Mar 2010 21:08:23 +0900
+
+cairo (1.8.8-4) unstable; urgency=low
+
+  * Modify debian/rules to add CFLAGS into building.
+
+ -- root <doyoun.kang@samsung.com>>  Wed, 13 Jan 2010 14:26:39 +0900
+
+cairo (1.8.8-3) unstable; urgency=low
+
+  [ Doyoun Kang ]
+  * Change debian/control and debian/rules files.
+
+  [ root ]
+  * i
+
+ -- root <doyoun.kang@samsung.com>>  Wed, 13 Jan 2010 14:26:37 +0900
+
+cairo (1.8.8-2) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Sebastian Dröge <slomo@debian.org>  Thu, 18 Jun 2009 08:59:17 +0200
+
+cairo (1.8.8-1) experimental; urgency=low
+
+  [ Loïc Minier ]
+  * Use "udeb" consistently to describe this flavor
+  * Rename CFLAGS to CFLAGS_MAIN for consistency
+  * Rename %-flavor-stamp targets to %-stamp-flavor
+  * Also strip dependency_libs in DEB_DIST_DIR
+  * Always lowercase the flavor name in vars
+  * Drop unused configure-main and udeb targets
+  * Drop dangerous configure target listed in .PHONY
+  * Drop build-main and build-udeb targets
+  * Make the build and configure rules implicit ones
+  * Define builddir using the current_flavor
+  * Split flavors installation into a install-% target
+  * Move debian/build-* and /dist-* to nicer places
+  * Misc cleanups
+  * Factor configure flags
+  * Fix --host and --build handling
+  * Remove useless cleanups
+  * Factor "touch" calls
+  * Save and restore config.guess and .sub
+  * Drop INSTALL_PROGRAM, not needed with dh_strip
+  * Factor CFLAGS; add -Wall
+  * Implement an optional optimized flavor
+
+  [ Sebastian Dröge ]
+  * New upstream bugfix release.
+  * Update Standards-Version to 3.8.2.
+  * Update sections of binary packages
+
+ -- Sebastian Dröge <slomo@debian.org>  Wed, 17 Jun 2009 16:47:55 +0200
+
+cairo (1.8.6-2) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Sebastian Dröge <slomo@debian.org>  Tue, 17 Feb 2009 09:56:44 +0100
+
+cairo (1.8.6-1) experimental; urgency=low
+
+  * New upstream bugfix release.
+
+ -- Sebastian Dröge <slomo@debian.org>  Tue, 16 Dec 2008 14:55:53 +0100
+
+cairo (1.8.4-1) experimental; urgency=low
+
+  * New upstream bugfix release.
+
+ -- Sebastian Dröge <slomo@debian.org>  Sat, 15 Nov 2008 08:46:56 +0100
+
+cairo (1.8.2-2) experimental; urgency=low
+
+  * ACK NMU and merge all changes, thanks Joss.
+
+ -- Sebastian Dröge <slomo@debian.org>  Wed, 05 Nov 2008 12:59:03 +0100
+
+cairo (1.6.4-6.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Remove the rpath stuff in /usr/lib/libcairo-directdb and only keep
+    it around for compatibility. Closes: #499662.
+    + Remove the rpath hack in the .pc file.
+    + Make the libcairo-directfb2{,dev} packages dummy, only keeping
+      symbolic links from the former locations.
+    + libcairo-directfb2-dev.postinst: do the symbolic link dance upon
+      upgrade.
+    + Update package descriptions accordingly.
+    + libcairo2.symbols: add cairo_directfb_surface_create.
+    + libcairo2-dev conflicts with libcairo-directfb2-dev
+      (<< 1.6.4-6.1).
+  * rules: completely cleanup the .la files from their dependency libs.
+    Closes: #491292.
+  * Add ~ to symbol versions to make backports possible.
+  * Fix doc-base section.
+  * Standards version is 3.8.0.
+
+ -- Josselin Mouette <joss@debian.org>  Mon, 13 Oct 2008 11:00:24 +0200
+
+cairo (1.8.2-1) experimental; urgency=low
+
+  * New upstream stable release:
+    + debian/control:
+      - Update (Build-)Depends.
+      - Fix section of libcairo2 from docs to libs.
+    + debian/watch:
+      - Update location for releases.
+    + debian/rules:
+      - Patch from Ubuntu package to update config.guess/sub again properly.
+      - Update shlibs to 1.8.0 because of new API.
+      - Remove src/cairo-features.h as it's generated by configure and breaks
+        the build if it's already there.
+    + debian/libcairo-directfb2.symbols,
+      debian/libcairo2.symbols:
+      - Updated symbols.
+  * debian/patches/02_no-private-symbol-export.dpatch:
+    + Re-added to not export some private symbols.
+
+ -- Sebastian Dröge <slomo@debian.org>  Wed, 05 Nov 2008 12:17:09 +0100
+
+cairo (1.7.4-1) experimental; urgency=low
+
+  * New upstream snapshot release
+  * Removed debian/patches/02_no-private-symbol-export.dpatch merged upstream
+  * Removed debian/patches/01_directfb-no-accel.dpatch
+    Hoping that this GIT commit makes it moot:
+    + commit 7fbda72137d8685718a8e8fe1d3af5b1d377521c
+      Date: Sun Aug 10 05:05:27 2008 -0700
+  * Known packaging errors:
+    - not copying new config.sub/config.guess for now
+
+ -- Dave Beckett <dajobe@debian.org>  Thu, 11 Sep 2008 23:03:15 -0700
+
+cairo (1.6.4-7) unstable; urgency=low
+
+  * debian/rules:
+    + Remove libtool .la dependency_libs (Closes: #491292)
+  * debian/control:
+    + Update to standards version 3.8.0
+    + Move libcairo2-doc to 'doc' section (Closes: #486174)
+  * debian/dpatch/*: Added ##DP descriptions (lintian)
+  * debian/libcairo2.symbols: Removed symbols with a debian revision (lintian)
+  * debian/libcairo2-doc.doc-base: Use section "Graphics" (lintian)
+
+ -- Dave Beckett <dajobe@debian.org>  Sun, 07 Sep 2008 15:33:00 -0700
+
+cairo (1.6.4-6) unstable; urgency=low
+
+  * debian/control:
+    + Let libcairo2-dev depend on libxcb-render-util0-dev (Closes: #486006).
+
+ -- Sebastian Dröge <slomo@debian.org>  Fri, 13 Jun 2008 11:55:50 +0200
+
+cairo (1.6.4-5) unstable; urgency=low
+
+  * debian/rules,
+    debian/control,
+    debian/libcairo2.symbols:
+    + Enable XCB backend now that XCB is in unstable (Closes: #474353).
+
+ -- Sebastian Dröge <slomo@debian.org>  Tue, 10 Jun 2008 07:46:49 +0200
+
+cairo (1.6.4-4) unstable; urgency=low
+
+  * debian/rules:
+    + Make sure that the debug package contains debug symbols for the
+      libcairo2 package and not for the directfb one (Closes: #484603).
+
+ -- Sebastian Dröge <slomo@debian.org>  Thu, 05 Jun 2008 12:35:35 +0200
+
+cairo (1.6.4-3) unstable; urgency=low
+
+  * debian/patches/02_no-private-symbol-export.dpatch,
+    debian/libcairo2.symbols,
+    debian/libcairo-directfb2.symbols,
+    debian/rules:
+    + Don't export private symbols and pass -c4 to
+      dh_makeshlibs (Closes: #481260).
+  * debian/control:
+    + Fix documentation path in the package description (Closes: #464116).
+  * debian/rules:
+    + Only build the arch-indep packages when build-indep is
+      invoked (Closes: #476499).
+
+ -- Sebastian Dröge <slomo@debian.org>  Wed, 28 May 2008 11:19:21 +0200
+
+cairo (1.6.4-2) unstable; urgency=low
+
+  * debian/patches/01_directfb-no-accel.dpatch:
+    + Disable rendering acceleration for the DirectFB backend as it
+      causes broken screen repainting with the Debian installer
+      and other GTK/DirectFB applications (Closes: #477331).
+
+ -- Sebastian Dröge <slomo@debian.org>  Tue, 13 May 2008 10:34:26 +0200
+
+cairo (1.6.4-1) unstable; urgency=low
+
+  * New upstream release:
+    + Works on remote Sun displays by adding support for
+      8 bit pseudocolors (Closes: #348109).
+    + Adds support for 32 bit visuals (Closes: #421266).
+    + Adds support for 655 xlib format (Closes: #413690).
+    + Fixes error when creating pdf charts (Closes: #474136).
+    + Fixes assertions in cairo_destroy (Closes: #423951).
+    + Fixes display errors with iceweasel 3.0 (Closes: #474395).
+    + debian/control:
+      - Update build dependencies and dependencies.
+      - Add myself as co-maintainer.
+      - Fix spelling error.
+    + debian/rules:
+      - Update shlibs to >= 1.6.0 because of API additions.
+    + debian/libcairo2.symbols,
+      debian/libcairo-directfb2.symbols:
+      - Add symbol files for the libraries.
+
+ -- Sebastian Dröge <slomo@debian.org>  Tue, 15 Apr 2008 20:07:29 +0200
+
+cairo (1.5.8-1) experimental; urgency=low
+
+  * New upstream release
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 30 Jan 2008 08:27:44 -0800
+
+cairo (1.5.6-1) experimental; urgency=low
+
+  * New upstream release
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 16 Jan 2008 19:14:02 -0800
+
+cairo (1.5.4-1) experimental; urgency=low
+
+  * Cairo snapshot packaging (Closes: #452736)
+    - NOTE: This is the *unstable* Cairo API and may change at any time before
+      the next stable release which will be called something like 1.6.0
+
+ -- Dave Beckett <dajobe@debian.org>  Mon, 24 Dec 2007 15:08:42 -0800
+
+cairo (1.4.12-2) unstable; urgency=low
+
+  * Apply fixes from upstream to fix PDF issues using
+    upstream cairo bug 8399 via dependent upstream bugs
+    - cairo bug 12284 (Early detection of a zero sized bitmap)
+      git commit d62f8861689d8b9a9a837043fb78813f0407abd4
+    - cairo bug 9846 (Ignore FT_Load_Glyph errors other than out-of-memory
+      Same for FT_Render_Glyph)
+      git commit 21ab44f11d3d20eead5d988c7a6cf48eebff08c7
+    (Closes: #428466, #435913, #439542, #440811, #442481)
+  * Apply fix from upstream
+    "PS: Ensure that xyshow operator has a pair of offsets for each glyph"
+    git commit 5e8f60531a09f357db38c4b646b1bbd29b97a891 (Closes: #453718)
+
+ -- Dave Beckett <dajobe@debian.org>  Sun, 16 Dec 2007 12:57:00 -0800
+
+cairo (1.4.12-1) unstable; urgency=low
+
+  * New upstream release
+    - fixes SIG PIPE crash (Closes: #454768)
+  * Acknowledge NMU - Thanks Nico
+  * Correct source package name
+  * Added debug package libcairo2-dbg (Closes: #422597, #429335, #446637)
+  * debian/control:
+    - Standards version 3.7.3
+    - Add homepage
+    - Use ${binary:Version} to replace deprecated ${Source-Version} in Depends
+    - libcairo2-doc package is now in Section doc
+  * debian/rules: fix cross build support (Closes: #451596)
+  * debian/libcairo2-doc.doc-base: fix lintian warning
+    doc-base-file-separator-extra-whitespaces
+  * Evaluated ubuntu patches to 1.4.10 and applied none:
+    - 02-cairo-1.4.8-lcd-filter-2.dpatch - changes Cairo public API
+    - 90_from_git_fix_not_available_glyph_handling.dpatch - from upstream
+    - 90_from_git_fix_zero_sized_bitmap_handling.dpatch - from upstream
+    - 91_malloc-overflow-fixes.dpatch - from upstream
+
+ -- Dave Beckett <dajobe@debian.org>  Tue, 11 Dec 2007 09:33:10 -0800
+
+libcairo (1.4.10-1.2) unstable; urgency=high
+
+   * Fix floating point regressions introduced by the previous NMU.
+     Do not blindly call malloc if the size is zero
+     (Closes: #454768,#454650,#454413).
+
+ -- Nico Golde <nion@debian.org>  Fri, 07 Dec 2007 20:33:11 +0100
+
+libcairo (1.4.10-1.1) unstable; urgency=high
+
+   * Non-maintainer upload by testing-security team.
+   * Fix multiple integer overflows leading to arbitrary code
+     execution (CVE-2007-5503; Closes: #453686).
+
+ -- Nico Golde <nion@debian.org>  Mon, 03 Dec 2007 17:20:59 +0100
+
+libcairo (1.4.10-1) unstable; urgency=low
+
+  * New upstream release
+    - fixes XError crash seen in openoffice.org (Closes: #430550)
+  * Removed patch 001-148-directfb.dpatch merged upstream
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 27 Jun 2007 18:20:10 -0700
+
+libcairo (1.4.8-1) unstable; urgency=low
+
+  * New upstream release
+    - fixes gnome bug http://bugzilla.gnome.org/show_bug.cgi?id=431990
+      that caused gnome-about to crash (Closes: #425058)
+  * Added patch 001-148-directfb.dpatch to make directfb build with 1.4.8
+  * Fix directfb udeb shlibs (Closes: #429672)
+    - remove udeb line from libcairo2 package shlibs
+    - libcairo-directfb2 package shlibs provide libcairo-directfb2(-udeb)
+  * Acknowledge NMU - thanks Don
+
+ -- Dave Beckett <dajobe@debian.org>  Thu, 21 Jun 2007 01:03:51 -0700
+
+libcairo (1.4.6-1.1) unstable; urgency=low
+
+   * NMU
+   * Apply patch from Adrian Johnson to fix segfault with PS_surface
+     (closes: #422388)
+
+ -- Don Armstrong <don@debian.org>  Mon, 28 May 2007 11:11:45 -0700
+
+libcairo (1.4.6-1) unstable; urgency=low
+
+  * New upstream release
+  * Add debian/compat, remove DH_COMPAT from debian/rules
+
+ -- Dave Beckett <dajobe@debian.org>  Tue, 1 May 2007 23:38:00 -0800
+
+libcairo (1.4.4-1) unstable; urgency=low
+
+  * New upstream release
+  * Remove different versioned shlibs dependency for one udeb
+    to get rid of duplicate dependencies (Closes: #418616)
+  * Switch shlibs API version to 1.4.0 since API calls were added
+  * PDF fonts fixed upstream (Closes: #406191)
+
+ -- Dave Beckett <dajobe@debian.org>  Fri, 13 Apr 2007 21:46:46 -0700
+
+libcairo (1.4.2-1) experimental; urgency=low
+
+  * New upstream release (Closes: #416024)
+  * debian/rules: Pass on CFLAGS (Closes: #399868)
+
+ -- Dave Beckett <dajobe@debian.org>  Tue, 27 Mar 2007 06:55:45 -0700
+
+libcairo (1.2.6-1) experimental; urgency=low
+
+  * New upstream release
+  * Removed patch 01-cairo_xlib_surface_add_glyph.patch now in upstream
+  * Require pkg-config 0.19
+
+ -- Dave Beckett <dajobe@debian.org>  Fri, 17 Nov 2006 20:42:08 -0800
+
+libcairo (1.2.4-4) unstable; urgency=medium
+
+  * Acknowledge NMU.
+  * Urgency medium since RC bugs are acknowledged.
+  * Patch 01-cairo_xlib_surface_add_glyph.patch added in
+    experimental confirmed fixes powerpc X byte copy crash
+    for bug #388116 which was closed by email after an NMU.
+  * Enable PDF and PS for the cairo+directfb build in unstable (Closes: #383297)
+  * Bump libcairo-directfb2's shlibs to >= 1.2.4-4 for the addition of
+    PDF and PS related symbols to the cairo+directfb lib. (Closes: #387289)
+  * Remove libcairo.la references to other .la files to aid future
+    removal of all .la files.
+
+ -- Dave Beckett <dajobe@debian.org>  Thu, 19 Oct 2006 22:41:56 -0700
+
+libcairo (1.2.4-3.2) experimental; urgency=low
+
+  * NMU
+  * Re-upload to get the changes from -2 in experimental, that is
+    building cairo+directfb with PS and PDF support (needed by
+    Gtk+2.10+directfb).
+  * Bump libcairo-directfb shlibs to >= 1.2.4-3.2 so that packages depending
+    on the new +directfb things get the right dep.
+
+ -- Marc 'HE' Brockschmidt <he@debian.org>  Wed, 18 Oct 2006 11:09:16 +0200
+
+libcairo (1.2.4-3.1) unstable; urgency=low
+
+  * NMU
+  * Upload with 01-cairo_xlib_surface_add_glyph.patch but without
+    the directfb changes from -2. The patch fixes the segfault caused
+    by a broken loop condition (c >= 0 works like, eh, always after
+    doing "unsigned int c"...). (Closes: #388116)
+
+ -- Marc 'HE' Brockschmidt <he@debian.org>  Sun, 15 Oct 2006 16:25:06 +0200
+
+libcairo (1.2.4-3) experimental; urgency=low
+
+  * Added patch 01-cairo_xlib_surface_add_glyph.patch from upstream git
+    attempting to fix 388116
+
+ -- Dave Beckett <dajobe@debian.org>  Sun,  8 Oct 2006 11:08:23 -0700
+
+libcairo (1.2.4-2) experimental; urgency=low
+
+  * Enable PDF and PS for the cairo+directfb build in order to
+    allow GTK 2.10+directfb to build (Closes: #383297)
+
+ -- Dave Beckett <dajobe@debian.org>  Sun,  3 Sep 2006 13:24:31 -0700
+
+libcairo (1.2.4-1) unstable; urgency=low
+
+  * New upstream release.
+  * Remove double call to dh_installdocs (Closes: #382594)
+  * Submit to override for libcairo2-doc, changing to section libs.
+
+ -- Dave Beckett <dajobe@debian.org>  Fri, 18 Aug 2006 18:11:00 -0700
+
+libcairo (1.2.2-1) unstable; urgency=medium
+
+  * New upstream release.
+  * This version again handles BGR X server visuals such as used by
+    Exceed and VNC  (Closes: #376858)
+  * Removed patches taken from upstream git:
+    -  cairo-bug-7494.patch
+    -  cairo-bug-7514.patch
+  * Build-Depend on xutils-dev and libxt-dev since the test for the
+    presence of X in the latest configure (as generated by autoconf 2.60)
+    uses xmkmf and checks for libxt-dev even though neither are used by
+    Cairo.
+
+ -- Dave Beckett <dajobe@debian.org>  Tue,  8 Aug 2006 23:59:01 -0700
+
+libcairo (1.2.0-5) unstable; urgency=medium
+
+  * Rebuild against directfb 0.9.25 which has changed library and udeb
+    package names from 0.9.24 that all earlier cairos were built against,
+    and which are now removed.  This should prevent Cairo from becoming
+    uninstallable due to this change.  Urgency medium due to this.
+
+ -- Dave Beckett <dajobe@debian.org>  Wed,  2 Aug 2006 22:04:17 -0700
+
+libcairo (1.2.0-4) unstable; urgency=medium
+
+  * Added patch cairo-bug-7494.patch (Closes: #378005)
+  * Added patch cairo-bug-7514.patch (Closes: #380064)
+
+ -- Dave Beckett <dajobe@debian.org>  Tue,  1 Aug 2006 22:29:04 -0700
+
+libcairo (1.2.0-3) unstable; urgency=low
+
+  * Add libsm-dev to Build-Depends and libcairo2-dev depends to pull in
+    libSM and libICE (Closes: #377259)
+  * Remove unused libxrender-dev Depends from libcairo-directfb2-dev
+
+ -- Dave Beckett <dajobe@debian.org>  Sun,  9 Jul 2006 16:36:10 -0700
+
+libcairo (1.2.0-2) unstable; urgency=low
+
+  * Remove libcairo2-dev depending on libdirectfb-dev (Closes: 376691)
+
+ -- Dave Beckett <dajobe@debian.org>  Tue,  4 Jul 2006 10:45:33 -0700
+
+libcairo (1.2.0-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Dave Beckett <dajobe@debian.org>  Sat,  1 Jul 2006 19:43:51 -0700
+
+libcairo (1.1.10-3) experimental; urgency=low
+
+  * First upload of 1.1.x series to debian experimental
+  * Remove patch 02-no-ft-glyphslot-embolden.patch (was for bug #325526)
+    and depend on a new enough libfreetype6 (2.1.10) which is already in
+    testing.
+  * Removed Build-Depend on libxml2 for creating SVG as that has been
+    rewritten.
+  * Added libcairo2 Conflicts and Replaces libcairo1 (Closes: #366755)
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 28 Jun 2006 19:04:10 -0700
+
+libcairo (1.1.10-2) experimental; urgency=low
+
+  * Add -Wl,-rpath,${libdir} to libcairo-directfb pkgconfig to make the
+    linker use the libcairo in the libdir
+  * Removed Provides: libcairo2 from libcairo-directfb2-udeb
+
+ -- Dave Beckett <dajobe@debian.org>  Sun, 25 Jun 2006 10:20:40 -0700
+
+libcairo (1.1.10-1) experimental; urgency=low
+
+  * New upstream release
+  * Renamed directfb packages to be libcairo-directfb2*
+  * Use dh_makeshlibs with --add-udeb to make udeb: lines appear in shlibs
+  * Depend on debhelper 5.0.22 to get a working dh_makeshlibs with --add-udeb
+
+ -- Dave Beckett <dajobe@debian.org>  Sat, 24 Jun 2006 10:03:02 -0700
+
+libcairo (1.1.8-1) experimental; urgency=low
+
+  * New upstream release
+  * Added libcairo2-directfb deb.
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 14 Jun 2006 11:47:00 -0700
+
+libcairo (1.1.6-1) experimental; urgency=low
+
+  * New upstream release
+  * Enable PNG, PDF and SVG backends (add Build-Depend: on libxml2)
+  * Added Cairo DirectFB udeb packages libcairo2-directfb-udeb and
+    libcairo2-directfb-dev (add Build-Depend: on libdirectfb-dev)
+  * libcairo2-dev and libcairo2-directfb-dev can both be installed together
+  * Stop using CDBS since it cannot handle the double configure and build
+    setup.
+  * Use dpatch for patching and Build-Depend: on it.
+
+ -- Dave Beckett <dajobe@debian.org>  Mon, 12 Jun 2006 12:57:38 -0700
+
+libcairo (1.0.4-2) unstable; urgency=low
+
+  * Rebuild against X11R7 to fix .la breakage xorg caused (Closes: #362237)
+
+ -- Dave Beckett <dajobe@debian.org>  Tue, 25 Apr 2006 22:00:36 -0700
+
+libcairo (1.0.4-1) unstable; urgency=low
+
+  * New upstream release
+  * Removed patches merged upstream:
+    - 01-INT_pixman.patch
+  * Debhelper 5
+
+ -- Dave Beckett <dajobe@debian.org>  Wed,  5 Apr 2006 17:44:12 -0700
+
+libcairo (1.0.2-4) unstable; urgency=low
+
+  * Rebuild against current build dependencies since something in the
+    build depends changed to make it stop working.  This may be the most
+    useless changelog entry ever.  (Closes: #347675)
+
+ -- Dave Beckett <dajobe@debian.org>  Thu, 12 Jan 2006 19:52:08 -0800
+
+libcairo (1.0.2-3) unstable; urgency=low
+
+  * Bump libcairo2 shlibs to 1.0.2-2 given all the freetype version changes.
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 30 Nov 2005 09:21:02 -0800
+
+libcairo (1.0.2-2) unstable; urgency=low
+
+  * Fix libcairo2-doc section to doc (Closes: #337515)
+  * Re-add patch 02-no-ft-glyphslot-embolden.patch to use only
+    freetype 2.1.7 symbols even though sid has freetype 2.1.10.
+    The latter has ABI changes beyond it's declared shlibs of 2.1.5
+    and is undergoing a large transition.
+    Require freetype 2.1.7+ again.  (Closes: #338817)
+  * Added patch 01-INT_pixman.patch from CVS to remove spurious INT_ items
+    that broke build with recent binutils (Closes: #340073)
+  * Require pkg-config >= 0.18 since cairo.pc uses Require.private:
+
+ -- Dave Beckett <dajobe@debian.org>  Fri, 25 Nov 2005 04:01:51 +0000
+
+libcairo (1.0.2-1) unstable; urgency=low
+
+  * New upstream release
+  * Removed patch 01-endianess-cairo-xlib-surface.patch previously taken
+    from upstream CVS.
+  * Removed patch 02-no-ft-glyphslot-embolden.patch to re-allow configure
+    to use FT_GlyphSlot_Embolden provided in freetype 2.1.10 which is now
+    in sid.
+  * Require freetype 2.1.10+
+
+ -- Dave Beckett <dajobe@debian.org>  Tue, 25 Oct 2005 18:45:57 +0100
+
+libcairo (1.0.0-3) unstable; urgency=low
+
+  * Added patch 02-no-ft-glyphslot-embolden.patch to disable use of
+    FT_GlyphSlot_Embolden in freetype, which was added after the
+    freetype version 2.1.7 currently in testing (closes: #325526)
+  * Require freetype 2.1.7+
+
+ -- Dave Beckett <dajobe@debian.org>  Tue, 13 Sep 2005 19:33:38 +0100
+
+libcairo (1.0.0-2) unstable; urgency=low
+
+  * Added patch 01-endianess-cairo-xlib-surface.patch from CVS to fix
+    endianess problem when running over remote X (Closes: #326920)
+  * Register cairo docs with doc-base (Closes: #325541)
+
+ -- Dave Beckett <dajobe@debian.org>  Tue,  6 Sep 2005 18:15:57 +0100
+
+libcairo (1.0.0-1) unstable; urgency=low
+
+  * New upstream release
+  * Removed glitz backend as currently experimental and unsupported
+  * debian/watch: update to use stable release area
+  * Removed patch cairo-0.9.2-cache-eviction-fix.patch merged upstream.
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 24 Aug 2005 18:14:23 +0100
+
+libcairo (0.9.2-2) unstable; urgency=low
+
+  * Add patch cairo-0.9.2-cache-eviction-fix.patch from Kristian Høgsberg
+    to make the freetype font cache evict correctly.
+
+ -- Dave Beckett <dajobe@debian.org>  Mon, 15 Aug 2005 19:48:43 +0100
+
+libcairo (0.9.2-1) unstable; urgency=low
+
+  * New upstream release
+  * First stable API release - remove patching sonames
+  * libcairo2, libcairo2-dev and libcairo2-doc replace all previous versions
+  * No longer Depends: on libpixman, now an internal library
+
+ -- Dave Beckett <dajobe@debian.org>  Sat, 13 Aug 2005 14:16:46 +0100
+
+libcairo (0.9.0-1) unstable; urgency=low
+
+  * New upstream release
+  * libcairo0.9.0 replaces libcairo0.6.0
+  * Functions were added so create new sonames and libraries
+
+ -- Dave Beckett <dajobe@debian.org>  Tue,  9 Aug 2005 08:21:50 +0100
+
+libcairo (0.6.0-1) unstable; urgency=low
+
+  * New upstream release
+  * libcairo0.6.0 replaces libcairo0.5.1
+  * Functions were added so create new sonames and libraries
+  * Require glitz 0.4.4 API and libpixman 0.1.5
+
+ -- Dave Beckett <dajobe@debian.org>  Fri, 29 Jul 2005 23:31:05 +0100
+
+libcairo (0.5.1-2) unstable; urgency=low
+
+  * Upload to unstable
+  * libcairo0.5.1 replaces older libcairo1
+  * libcairo0.5.1-dev already conflicted with libcairo1-dev so enable
+    shipping libcairo.so and delete patch 05-cairo.pc.in.patch as the
+    cairo.pc.in is ok again
+
+ -- Dave Beckett <dajobe@debian.org>  Sun, 10 Jul 2005 22:07:22 +0100
+
+libcairo (0.5.1-1) experimental; urgency=low
+
+  * New upstream release
+  * Revert to source package name libcairo
+  * Reflect ABI version into both library soname as libcairo-1debian0.5.1
+    and package name libcairo0.5.1 (Closes: #314776)
+  * libcairo0.5.1 no longer conflicts with libcairo1
+  * Added a libcairo0.5.1-doc package with the HTML documentation
+
+ -- Dave Beckett <dajobe@debian.org>  Wed, 22 Jun 2005 21:06:01 +0100
+
+cairo (0.5.0-2) unstable; urgency=low
+
+  * Fix the shlibs dependencies for libcairo0.5
+
+ -- Dave Beckett <dajobe@debian.org>  Thu,  9 Jun 2005 21:56:08 +0100
+
+cairo (0.5.0-1) unstable; urgency=low
+
+  * New upstream release (Closes: 311042)
+  * Change source package s/lib// and add API version to binary packages
+  * Enable glitz backend (Closes: 307573)
+
+ -- Dave Beckett <dajobe@debian.org>  Thu,  9 Jun 2005 20:51:11 +0100
+
+libcairo (0.4.0-1) unstable; urgency=low
+
+  * New upstream release
+  * API changes for fonts so shlib version is now 0.4.0
+  * Require libpixman 0.1.4
+
+ -- Dave Beckett <dajobe@debian.org>  Wed,  9 Mar 2005 19:39:44 +0000
+
+libcairo (0.3.0-1) unstable; urgency=low
+
+  * New upstream release. Closes: 284205
+  * Bumped shlibs version since new functions were added.
+  * Headers have moved to below /usr/include/cairo
+  * Require libpixman 0.1.3
+
+ -- Dave Beckett <dajobe@debian.org>  Sun,  6 Feb 2005 12:40:04 +0000
+
+libcairo (0.2.0-1) unstable; urgency=low
+
+  * New upstream release
+  * Bumped shlibs version since new functions were added.
+  * Require libpixman 0.1.2
+  * Still keep glitz disabled
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Mon,  8 Nov 2004 22:19:29 +0000
+
+libcairo (0.1.23-2) unstable; urgency=low
+
+  * Replace Build-Depend on xlibs-dev with libx11-dev
+  * Changed to LGPL license (in CVS 2004-08-02)
+  * Disable use of glitz explicitly
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Mon, 23 Aug 2004 22:25:16 +0100
+
+libcairo (0.1.23-1) unstable; urgency=low
+
+  * New upstream release. Closes: 248705
+  * Add PNG backend, require libpng12-dev
+  * Requires libpixman >= 0.1.1
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Sat, 29 May 2004 21:10:58 +0100
+
+libcairo (0.1.18-1) unstable; urgency=low
+
+  * New upstream release
+  * Remove xlib-surface-debian.patch, not needed for XFree86 4.3.0+
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Thu, 19 Feb 2004 23:08:25 +0000
+
+libcairo (0.1.17-4) unstable; urgency=low
+
+  * Initial version to debian archive. Closes: #205346
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Sun, 15 Feb 2004 21:45:47 +0000
+
+libcairo (0.1.17-3) unstable; urgency=low
+
+  * Setting me as the maintainer temporarily
+
+ -- Eduard Bloch <blade@debian.org>  Sat, 14 Feb 2004 16:49:18 +0100
+
+libcairo (0.1.17-2) unstable; urgency=low
+
+  * Add patch/xlib-surface-debian.patch to restore this to working for X.
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Sat, 24 Jan 2004 18:02:38 +0000
+
+libcairo (0.1.17-1) unstable; urgency=low
+
+  * New upstream release
+  * Replace libpixman/libic dependencies with libpixman
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Tue, 16 Dec 2003 17:49:55 +0000
+
+libcairo (0.1.16-1) unstable; urgency=low
+
+  * New upstream release
+  * Added libxrender-dev (>=0.6.0) requirement to match configure.in
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Mon,  8 Dec 2003 20:39:59 +0000
+
+libcairo (0.1.13-1) unstable; urgency=low
+
+  * New upstream release
+  * Remove patch for src/config.h - merged upstream.
+  * Return libfreetype6 minimum version to 2.1.0.
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Fri, 21 Nov 2003 20:05:38 +0000
+
+libcairo (0.1.12-3) unstable; urgency=low
+
+  * Pull patch from CVS to allow building with newer freetype using the
+    new include via defines mechanism now enforced in freetype 2.1.6
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Tue, 18 Nov 2003 20:15:08 +0000
+
+libcairo (0.1.12-2) unstable; urgency=low
+
+  * Remove dependency on libxft-dev, replaced with libfreetype6-dev and
+    libfontconfig1-dev
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Sat,  8 Nov 2003 18:44:19 +0000
+
+libcairo (0.1.12-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Fri,  7 Nov 2003 20:43:33 +0000
+
+libcairo (0.1.11-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Tue,  4 Nov 2003 15:10:14 +0000
+
+libcairo (0.1.10-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Tue,  4 Nov 2003 00:23:16 +0000
+
+libcairo (0.1.9-2) unstable; urgency=low
+
+  * Generate packages correctly named after the library major soname:
+    libcairo1, libcairo1-dev
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Thu, 30 Oct 2003 23:16:43 +0000
+
+libcairo (0.1.9-1) unstable; urgency=low
+
+  * New upstream release.
+  * Removed dependency on automake, autoconf, libtool
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Thu, 30 Oct 2003 21:37:25 +0000
+
+libcairo (0.1.8-1) unstable; urgency=low
+
+  * Initial package
+
+ -- Dave Beckett <Dave.Beckett@bristol.ac.uk>  Wed, 29 Oct 2003 23:20:26 +0000
+
index f2fd805..9f61558 100755 (executable)
@@ -1,8 +1,8 @@
 Source: cairo
 Section: libs
 Priority: optional
-Maintainer: Wonsik Jung <sidein@samsung.com>, Deokjin Kim <deokjin81.kim@samsung.com>, Seongwon Cho <seongwon1.cho@samsung.com>
-Build-Depends: debhelper (>= 5.0.22), autotools-dev, pkg-config (>= 0.19), libfontconfig1-dev, libfreetype6-dev (>= 2.1.10), libxrender-dev (>= 0.6.0), libx11-dev, libpng12-dev, libsm-dev, xutils-dev, libxt-dev, dpatch, libpixman-1-dev (>= 0.12.0), libxcb1-dev (>= 0.9.92), libxcb-render0-dev (>= 0.9.92), libxcb-render-util0-dev, libglib2.0-dev, libxcb-shm0-dev
+Maintainer: Wonsik Jung <sidein@samsung.com>, Deokjin Kim <deokjin81.kim@samsung.com>, Seongwon Cho <seongwon1.cho@samsung.com>, Dongyeon Kim <dy5.kim@samsung.com>
+Build-Depends: debhelper (>= 5.0.22), autotools-dev, pkg-config (>= 0.19), libfontconfig1-dev, libfreetype6-dev (>= 2.1.10), libxrender-dev (>= 0.6.0), libx11-dev, libpng12-dev, libsm-dev, xutils-dev, libxt-dev, dpatch, libpixman-1-dev (>= 0.12.0), libxcb1-dev (>= 0.9.92), libxcb-render0-dev (>= 0.9.92), libxcb-render-util0-dev, libglib2.0-dev, libxcb-shm0-dev, opengl-es-dev
 Standards-Version: 3.8.2
 
 Package: libcairo2-dev
@@ -11,7 +11,7 @@ Conflicts: libcairo-dev, libcairo0.5.1-dev, libcairo0.6.0-dev, libcairo0.9.0-dev
 Replaces: libcairo0.5.1-dev, libcairo0.6.0-dev, libcairo0.9.0-dev
 Section: libdevel
 Architecture: any
-Depends: libcairo2 (= ${binary:Version}), libfontconfig1-dev, libfreetype6-dev (>= 2.1.10), libxrender-dev (>= 0.6.0), libpng12-dev, libsm-dev, libpixman-1-dev (>= 0.12.0), libxcb1-dev, libxcb-render0-dev, libxcb-render-util0-dev, libxcb-shm0-dev
+Depends: libcairo2 (= ${binary:Version}), libfontconfig1-dev, libfreetype6-dev (>= 2.1.10), libxrender-dev (>= 0.6.0), libpng12-dev, libsm-dev, libpixman-1-dev (>= 0.12.0), libxcb1-dev, libxcb-render0-dev, libxcb-render-util0-dev, libxcb-shm0-dev, opengl-es-dev
 Description: Development files for the Cairo 2D graphics library
  Cairo is a multi-platform library providing anti-aliased
  vector-based rendering for multiple target backends.
index b166edb..4351a15 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/make -f
 
-DISTRIBUTION   = TIZEN
+DISTRIBUTION   = SLP
 
 # list of flavors we build; each gets a builddir, a configure pass (configure
 # args are defined below), a build pass, and an install pass
@@ -51,7 +51,7 @@ configure_flags += \
 --with-x \
 --x-includes=$(PREFIX)/include \
 --x-libraries=$(PREFIX)/lib \
---enable-static 
+--enable-static
 
 
 ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
@@ -61,12 +61,16 @@ endif
 ifeq (arm, $(findstring arm, $(DEB_HOST_GNU_TYPE)))
 CONFIGURE_OPTIONS += \
 --enable-svg=no 
+
+configure_flags += \
+--enable-egl=yes \
+--enable-glesv2=yes
 endif
 
 main_configure_flags += \
 $(configure_flags) 
 
-ifeq ($(DISTRIBUTION),TIZEN)
+ifeq ($(DISTRIBUTION),SLP)
 configure_flags += --enable-xcb
 endif
 
diff --git a/doc/.gitignore b/doc/.gitignore
new file mode 100644 (file)
index 0000000..23c1897
--- /dev/null
@@ -0,0 +1,3 @@
+Makefile
+Makefile.in
+*~
diff --git a/doc/public/.gitignore b/doc/public/.gitignore
new file mode 100644 (file)
index 0000000..493a241
--- /dev/null
@@ -0,0 +1,19 @@
+*.stamp
+Makefile
+Makefile.in
+cairo-decl-list.txt
+cairo-decl.txt
+cairo-docs.sgml
+cairo-undeclared.txt
+cairo-undocumented.txt
+cairo-unused.txt
+cairo.hierarchy
+cairo.interfaces
+cairo.prerequisites
+cairo.args
+cairo.signals
+html
+xml
+version.xml
+*~
+*.bak
index c2ffead..baf844c 100644 (file)
@@ -17,6 +17,7 @@
     <xi:include href="xml/cairo-region.xml"/>
     <xi:include href="xml/cairo-transforms.xml"/>
     <xi:include href="xml/cairo-text.xml"/>
+    <xi:include href="xml/cairo-raster-source.xml"/>
   </chapter>
   <chapter id="cairo-fonts">
     <title>Fonts</title>
     <xi:include href="xml/cairo-svg.xml"/>
     <xi:include href="xml/cairo-quartz.xml" />
     <!--xi:include href="xml/cairo-quartz-image.xml"/-->
-    <!--xi:include href="xml/cairo-xcb.xml"/-->
+    <xi:include href="xml/cairo-xcb.xml"/>
     <xi:include href="xml/cairo-xlib.xml"/>
+    <xi:include href="xml/cairo-xlib-xrender.xml"/>
+    <xi:include href="xml/cairo-script.xml"/>
   </chapter>
   <chapter id="cairo-support">
     <title>Utilities</title>
@@ -70,5 +73,8 @@
   <index id="index-1.10" role="1.10">
     <title>Index of new symbols in 1.10</title>
   </index>
+  <index id="index-1.12" role="1.12">
+    <title>Index of new symbols in 1.12</title>
+  </index>
   <xi:include href="language-bindings.xml"/>
 </book>
index 11439ae..c67da37 100644 (file)
@@ -7,6 +7,10 @@ cairo_ft_font_face_create_for_pattern
 cairo_ft_font_options_substitute
 cairo_ft_scaled_font_lock_face
 cairo_ft_scaled_font_unlock_face
+cairo_ft_synthesize_t
+cairo_ft_font_face_get_synthesize
+cairo_ft_font_face_set_synthesize
+cairo_ft_font_face_unset_synthesize
 </SECTION>
 
 <SECTION>
@@ -106,6 +110,7 @@ cairo_ps_surface_dsc_comment
 CAIRO_HAS_RECORDING_SURFACE
 cairo_recording_surface_create
 cairo_recording_surface_ink_extents
+cairo_recording_surface_get_extents
 </SECTION>
 
 <SECTION>
@@ -117,6 +122,19 @@ cairo_win32_surface_create_with_ddb
 cairo_win32_printing_surface_create
 cairo_win32_surface_get_dc
 cairo_win32_surface_get_image
+<SUBSECTION Private>
+SB_NONE
+SHADEBLENDCAPS
+WIN32_FONT_LOGICAL_SCALE
+cairo_win32_device_t
+cairo_win32_display_surface_t
+cairo_win32_printing_surface_t
+cairo_win32_surface_t
+to_win32_device
+to_win32_device_from_surface
+to_win32_display_surface
+to_win32_printing_surface
+to_win32_surface
 </SECTION>
 
 <SECTION>
@@ -144,6 +162,9 @@ cairo_xlib_surface_get_visual
 cairo_xlib_surface_get_width
 cairo_xlib_surface_get_height
 cairo_xlib_surface_get_depth
+cairo_xlib_device_debug_cap_xrender_version
+cairo_xlib_device_debug_get_precision
+cairo_xlib_device_debug_set_precision
 </SECTION>
 
 <SECTION>
@@ -154,6 +175,22 @@ cairo_xlib_surface_get_xrender_format
 </SECTION>
 
 <SECTION>
+<FILE>cairo-xcb</FILE>
+CAIRO_HAS_XCB_SURFACE
+CAIRO_HAS_XCB_SHM_FUNCTIONS
+cairo_xcb_surface_create
+cairo_xcb_surface_create_for_bitmap
+cairo_xcb_surface_create_with_xrender_format
+cairo_xcb_surface_set_size
+cairo_xcb_surface_set_drawable
+cairo_xcb_device_get_connection
+cairo_xcb_device_debug_cap_xrender_version
+cairo_xcb_device_debug_cap_xshm_version
+cairo_xcb_device_debug_get_precision
+cairo_xcb_device_debug_set_precision
+</SECTION>
+
+<SECTION>
 <FILE>cairo-svg</FILE>
 CAIRO_HAS_SVG_SURFACE
 cairo_svg_surface_create
@@ -161,7 +198,7 @@ cairo_svg_surface_create_for_stream
 cairo_svg_surface_restrict_to_version
 cairo_svg_version_t
 cairo_svg_get_versions
-cairo_svg_version_to_string 
+cairo_svg_version_to_string
 </SECTION>
 
 <SECTION>
@@ -183,6 +220,7 @@ cairo_device_release
 
 <SECTION>
 <FILE>cairo-surface</FILE>
+CAIRO_HAS_MIME_SURFACE
 CAIRO_MIME_TYPE_JP2
 CAIRO_MIME_TYPE_JPEG
 CAIRO_MIME_TYPE_PNG
@@ -191,6 +229,7 @@ CAIRO_MIME_TYPE_UNIQUE_ID
 cairo_surface_t
 cairo_content_t
 cairo_surface_create_similar
+cairo_surface_create_similar_image
 cairo_surface_create_for_rectangle
 cairo_surface_reference
 cairo_surface_destroy
@@ -216,6 +255,9 @@ cairo_surface_show_page
 cairo_surface_has_show_text_glyphs
 cairo_surface_set_mime_data
 cairo_surface_get_mime_data
+cairo_surface_supports_mime_type
+cairo_surface_map_to_image
+cairo_surface_unmap_image
 </SECTION>
 
 <SECTION>
@@ -310,6 +352,26 @@ cairo_pattern_get_user_data
 </SECTION>
 
 <SECTION>
+<FILE>cairo-raster-source</FILE>
+cairo_pattern_create_raster_source
+cairo_raster_source_pattern_set_callback_data
+cairo_raster_source_pattern_get_callback_data
+cairo_raster_source_pattern_set_acquire
+cairo_raster_source_pattern_get_acquire
+cairo_raster_source_pattern_set_snapshot
+cairo_raster_source_pattern_get_snapshot
+cairo_raster_source_pattern_set_copy
+cairo_raster_source_pattern_get_copy
+cairo_raster_source_pattern_set_finish
+cairo_raster_source_pattern_get_finish
+cairo_raster_source_acquire_func_t
+cairo_raster_source_release_func_t
+cairo_raster_source_snapshot_func_t
+cairo_raster_source_copy_func_t
+cairo_raster_source_finish_func_t
+</SECTION>
+
+<SECTION>
 <FILE>cairo-matrix</FILE>
 cairo_matrix_t
 cairo_matrix_init
@@ -618,3 +680,17 @@ cairo_status_string
 CAIRO_FONT_TYPE_ATSUI
 cairo_atsui_font_face_create_for_atsu_font_id
 </SECTION>
+
+<SECTION>
+<FILE>cairo-script</FILE>
+CAIRO_HAS_SCRIPT_SURFACE
+cairo_script_create
+cairo_script_create_for_stream
+cairo_script_from_recording_surface
+cairo_script_get_mode
+cairo_script_mode_t
+cairo_script_set_mode
+cairo_script_surface_create
+cairo_script_surface_create_for_target
+cairo_script_write_comment
+</SECTION>
index 581f324..648ca12 100755 (executable)
@@ -31,7 +31,7 @@ fi >&2
 if test -f "$DOC_MODULE-unused.txt"; then
        unused=`cat "$DOC_MODULE-unused.txt"`
        if test -n "$unused"; then
-               echo "*** ERROR: Unused documentated symbols:" 1>&2
+               echo "*** ERROR: Unused documented symbols:" 1>&2
                cat "$DOC_MODULE-unused.txt" 1>&2
                stat=1
        fi
diff --git a/doc/tutorial/slides/.gitignore b/doc/tutorial/slides/.gitignore
new file mode 100644 (file)
index 0000000..72a67a0
--- /dev/null
@@ -0,0 +1,7 @@
+tutorial-???.html
+tutorial-???.png
+tutorial-???.svg
+tutorial-index.xml
+tutorial.pdf
+index.html
+*~
diff --git a/doc/tutorial/src/.gitignore b/doc/tutorial/src/.gitignore
new file mode 100644 (file)
index 0000000..68af59e
--- /dev/null
@@ -0,0 +1,8 @@
+*-gtk
+*-pdf
+*-png
+*-xlib
+*.pdf
+*.png
+*.o
+*~
diff --git a/packaging/cairo.manifest b/packaging/cairo.manifest
new file mode 100644 (file)
index 0000000..017d22d
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
index fd41512..ee51a4b 100644 (file)
@@ -1,12 +1,13 @@
 #sbs-git:slp/unmodified/cairo cairo 1.11.3 076a40b95caaadbc4a05b92a1a1d7840427e05b7
 Name:       cairo
 Summary:    A vector graphics library
-Version:    1.11.3
-Release:    2
+Version:    1.12.2
+Release:    8
 Group:      System/Libraries
 License:    LGPLv2 or MPLv1.1
 URL:        http://www.cairographics.org
 Source0:    http://cairographics.org/releases/%{name}-%{version}.tar.gz
+Source1001: packaging/cairo.manifest 
 
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
@@ -24,8 +25,11 @@ BuildRequires:  pkgconfig(xcb)
 BuildRequires:  pkgconfig(xcb-render)
 BuildRequires:  pkgconfig(xcb-renderutil)
 BuildRequires:  pkgconfig(xcb-shm)
+BuildRequires:  pkgconfig(opengl-es-20)
 #BuildRequires:  pkgconfig(librsvg-2.0)
 BuildRequires:  binutils-devel
+BuildRequires:  which
+BuildRequires:  autoconf
 
 %description
 Cairo is a 2D graphics library with support for multiple output devices.
@@ -43,6 +47,7 @@ cairo development libraries and head files
 %setup -q -n %{name}-%{version}
 
 %build
+cp %{SOURCE1001} .
 NOCONFIGURE=1 ./autogen.sh
 %configure --disable-static \
     --disable-win32 \
@@ -51,7 +56,14 @@ NOCONFIGURE=1 ./autogen.sh
     --with-x \
     --x-includes=%{_includedir} \
     --x-libraries=%{_libdir} \
+    --disable-gtk-doc \
+%ifarch %ix86
     --enable-xcb
+%else
+    --enable-xcb \
+    --enable-egl=yes \
+    --enable-glesv2=yes
+%endif
 
 make %{?jobs:-j%jobs}
 
@@ -65,9 +77,11 @@ rm -rf $RPM_BUILD_ROOT/usr/share/gtk-doc
 %postun -p /sbin/ldconfig
 
 %files
+%manifest cairo.manifest
 %{_libdir}/libcairo*.so.*
 
 %files devel
+%manifest cairo.manifest
 %{_includedir}/*
 %{_libdir}/libcairo*.so
 %{_libdir}/pkgconfig/*
diff --git a/perf/.gitignore b/perf/.gitignore
new file mode 100644 (file)
index 0000000..02af7a9
--- /dev/null
@@ -0,0 +1,30 @@
+TAGS
+tags
+cairo-analyse-trace
+cairo-perf
+cairo-perf-micro
+cairo-perf-print
+cairo-perf-trace
+cairo-perf-chart
+cairo-perf-compare-backends
+cairo-perf-diff-files
+cairo-perf-graph-files
+cairo-traces
+valgrind-log
+callgrind.out.*
+index.html
+*.png
+*.perf
+*.o
+*.gcda
+*.gcno
+*.exe
+*.manifest
+*.obj
+*.ilk
+*.suo
+*.lib
+*.pdb
+*~
+.*.sw?
+*.data
diff --git a/perf/Makefile.in b/perf/Makefile.in
new file mode 100644 (file)
index 0000000..ea7dfda
--- /dev/null
@@ -0,0 +1,1216 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/build/Makefile.am.common \
+       $(top_srcdir)/perf/Makefile.sources COPYING
+EXTRA_PROGRAMS = cairo-analyse-trace$(EXEEXT) \
+       cairo-perf-micro$(EXEEXT) cairo-perf-trace$(EXEEXT) \
+       cairo-perf-diff-files$(EXEEXT) cairo-perf-print$(EXEEXT) \
+       cairo-perf-chart$(EXEEXT) cairo-perf-compare-backends$(EXEEXT) \
+       cairo-perf-graph-files$(EXEEXT)
+TESTS =
+check_PROGRAMS =
+noinst_PROGRAMS = cairo-analyse-trace$(EXEEXT) \
+       cairo-perf-trace$(EXEEXT) cairo-perf-micro$(EXEEXT)
+subdir = perf
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \
+       $(top_srcdir)/build/aclocal.compare.m4 \
+       $(top_srcdir)/build/aclocal.enable.m4 \
+       $(top_srcdir)/build/aclocal.float.m4 \
+       $(top_srcdir)/build/aclocal.makefile.m4 \
+       $(top_srcdir)/build/aclocal.pkg.m4 \
+       $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \
+       $(top_srcdir)/build/ltoptions.m4 \
+       $(top_srcdir)/build/ltsugar.m4 \
+       $(top_srcdir)/build/ltversion.m4 \
+       $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/cairo-version.h \
+       $(top_srcdir)/build/configure.ac.version \
+       $(top_srcdir)/build/configure.ac.tools \
+       $(top_srcdir)/build/configure.ac.features \
+       $(top_srcdir)/build/configure.ac.warnings \
+       $(top_srcdir)/build/configure.ac.system \
+       $(top_srcdir)/build/configure.ac.analysis \
+       $(top_srcdir)/build/configure.ac.noversion \
+       $(top_srcdir)/build/configure.ac.pthread \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+libcairoperf_la_LIBADD =
+am__objects_1 = cairo-perf.lo cairo-perf-report.lo cairo-stats.lo
+am__objects_2 = cairo-time.lo
+am__objects_3 =
+am_libcairoperf_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+       $(am__objects_3)
+libcairoperf_la_OBJECTS = $(am_libcairoperf_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+PROGRAMS = $(noinst_PROGRAMS)
+am__objects_4 = cairo-analyse-trace.$(OBJEXT)
+am__objects_5 = cairo-error.$(OBJEXT)
+am_cairo_analyse_trace_OBJECTS = $(am__objects_4) $(am__objects_5)
+cairo_analyse_trace_OBJECTS = $(am_cairo_analyse_trace_OBJECTS)
+am__objects_6 = cairo-perf-chart.$(OBJEXT)
+am_cairo_perf_chart_OBJECTS = $(am__objects_6)
+cairo_perf_chart_OBJECTS = $(am_cairo_perf_chart_OBJECTS)
+cairo_perf_chart_LDADD = $(LDADD)
+cairo_perf_chart_DEPENDENCIES = libcairoperf.la \
+       $(top_builddir)/boilerplate/libcairoboilerplate.la \
+       $(top_builddir)/src/libcairo.la
+am__objects_7 = cairo-perf-compare-backends.$(OBJEXT)
+am_cairo_perf_compare_backends_OBJECTS = $(am__objects_7)
+cairo_perf_compare_backends_OBJECTS =  \
+       $(am_cairo_perf_compare_backends_OBJECTS)
+cairo_perf_compare_backends_LDADD = $(LDADD)
+cairo_perf_compare_backends_DEPENDENCIES = libcairoperf.la \
+       $(top_builddir)/boilerplate/libcairoboilerplate.la \
+       $(top_builddir)/src/libcairo.la
+am__objects_8 = cairo-perf-diff-files.$(OBJEXT)
+am_cairo_perf_diff_files_OBJECTS = $(am__objects_8)
+cairo_perf_diff_files_OBJECTS = $(am_cairo_perf_diff_files_OBJECTS)
+cairo_perf_diff_files_LDADD = $(LDADD)
+cairo_perf_diff_files_DEPENDENCIES = libcairoperf.la \
+       $(top_builddir)/boilerplate/libcairoboilerplate.la \
+       $(top_builddir)/src/libcairo.la
+am__objects_9 =  \
+       cairo_perf_graph_files-cairo-perf-graph-files.$(OBJEXT) \
+       cairo_perf_graph_files-cairo-perf-graph-widget.$(OBJEXT)
+am_cairo_perf_graph_files_OBJECTS = $(am__objects_9) $(am__objects_3)
+cairo_perf_graph_files_OBJECTS = $(am_cairo_perf_graph_files_OBJECTS)
+cairo_perf_graph_files_DEPENDENCIES = $(LDADD)
+cairo_perf_graph_files_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__objects_10 = cairo-perf-micro.$(OBJEXT)
+am_cairo_perf_micro_OBJECTS = $(am__objects_10)
+cairo_perf_micro_OBJECTS = $(am_cairo_perf_micro_OBJECTS)
+am__objects_11 = cairo-perf-print.$(OBJEXT)
+am_cairo_perf_print_OBJECTS = $(am__objects_11)
+cairo_perf_print_OBJECTS = $(am_cairo_perf_print_OBJECTS)
+cairo_perf_print_LDADD = $(LDADD)
+cairo_perf_print_DEPENDENCIES = libcairoperf.la \
+       $(top_builddir)/boilerplate/libcairoboilerplate.la \
+       $(top_builddir)/src/libcairo.la
+am__objects_12 = cairo-perf-trace.$(OBJEXT)
+am__objects_13 = cairo-error.$(OBJEXT) cairo-hash.$(OBJEXT)
+am_cairo_perf_trace_OBJECTS = $(am__objects_12) $(am__objects_13)
+cairo_perf_trace_OBJECTS = $(am_cairo_perf_trace_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libcairoperf_la_SOURCES) $(cairo_analyse_trace_SOURCES) \
+       $(cairo_perf_chart_SOURCES) \
+       $(cairo_perf_compare_backends_SOURCES) \
+       $(cairo_perf_diff_files_SOURCES) \
+       $(cairo_perf_graph_files_SOURCES) $(cairo_perf_micro_SOURCES) \
+       $(cairo_perf_print_SOURCES) $(cairo_perf_trace_SOURCES)
+DIST_SOURCES = $(libcairoperf_la_SOURCES) \
+       $(cairo_analyse_trace_SOURCES) $(cairo_perf_chart_SOURCES) \
+       $(cairo_perf_compare_backends_SOURCES) \
+       $(cairo_perf_diff_files_SOURCES) \
+       $(cairo_perf_graph_files_SOURCES) $(cairo_perf_micro_SOURCES) \
+       $(cairo_perf_print_SOURCES) $(cairo_perf_trace_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LDFLAGS = @CAIRO_LDFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@
+CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@
+CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@
+CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@
+CAIRO_REQUIRES = @CAIRO_REQUIRES@
+CAIRO_TEST_MODE = @CAIRO_TEST_MODE@
+CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@
+CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@
+CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@
+CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@
+CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FIND = @FIND@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_CONFIG = @FREETYPE_CONFIG@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GS = @GS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@
+LIBRSVG_LIBS = @LIBRSVG_LIBS@
+LIBS = @LIBS@
+LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@
+LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LTP = @LTP@
+LTP_GENHTML = @LTP_GENHTML@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+POPPLER_CFLAGS = @POPPLER_CFLAGS@
+POPPLER_LIBS = @POPPLER_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SHLIB_EXT = @SHLIB_EXT@
+SHM_LIBS = @SHM_LIBS@
+SHTOOL = @SHTOOL@
+STRIP = @STRIP@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VERSION = @VERSION@
+XARGS = @XARGS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+cogl_CFLAGS = @cogl_CFLAGS@
+cogl_LIBS = @cogl_LIBS@
+datadir = @datadir@
+datarootdir = @datarootdir@
+directfb_CFLAGS = @directfb_CFLAGS@
+directfb_LIBS = @directfb_LIBS@
+docdir = @docdir@
+drm_CFLAGS = @drm_CFLAGS@
+drm_LIBS = @drm_LIBS@
+dvidir = @dvidir@
+egl_CFLAGS = @egl_CFLAGS@
+egl_LIBS = @egl_LIBS@
+exec_prefix = @exec_prefix@
+gallium_DIR = @gallium_DIR@
+gl_CFLAGS = @gl_CFLAGS@
+gl_LIBS = @gl_LIBS@
+glesv2_CFLAGS = @glesv2_CFLAGS@
+glesv2_LIBS = @glesv2_LIBS@
+glib_CFLAGS = @glib_CFLAGS@
+glib_LIBS = @glib_LIBS@
+gtk_CFLAGS = @gtk_CFLAGS@
+gtk_LIBS = @gtk_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mesa_DIR = @mesa_DIR@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pixman_CFLAGS = @pixman_CFLAGS@
+pixman_LIBS = @pixman_LIBS@
+png_CFLAGS = @png_CFLAGS@
+png_LIBS = @png_LIBS@
+png_REQUIRES = @png_REQUIRES@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pthread_CFLAGS = @pthread_CFLAGS@
+pthread_LIBS = @pthread_LIBS@
+qt_CFLAGS = @qt_CFLAGS@
+qt_LIBS = @qt_LIBS@
+real_pthread_CFLAGS = @real_pthread_CFLAGS@
+real_pthread_LIBS = @real_pthread_LIBS@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shm_LIBS = @shm_LIBS@
+skia_DIR = @skia_DIR@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+xcb_CFLAGS = @xcb_CFLAGS@
+xcb_LIBS = @xcb_LIBS@
+xcb_shm_CFLAGS = @xcb_shm_CFLAGS@
+xcb_shm_LIBS = @xcb_shm_LIBS@
+xlib_CFLAGS = @xlib_CFLAGS@
+xlib_LIBS = @xlib_LIBS@
+xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@
+xlib_xcb_LIBS = @xlib_xcb_LIBS@
+xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@
+xlib_xrender_LIBS = @xlib_xrender_LIBS@
+BUILT_SOURCES = 
+CLEANFILES = *.i *.s *.gch $(EXTRA_LTLIBRARIES) $(EXTRA_PROGRAMS) \
+       $(check_PROGRAMS) valgrind-log callgrind.out.* index.html
+DISTCLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = cairo-perf-diff COPYING Makefile.win32
+EXTRA_LTLIBRARIES = libcairoperf.la
+MAINTAINERCLEANFILES = Makefile.in
+libcairoperf_sources = \
+       cairo-perf.c            \
+       cairo-perf-report.c     \
+       cairo-stats.c           \
+       $(NULL)
+
+libcairoperf_external_sources = ../src/cairo-time.c
+libcairoperf_headers = \
+       cairo-perf.h   \
+       cairo-stats.h  \
+       $(NULL)
+
+cairo_analyse_trace_sources = cairo-analyse-trace.c
+cairo_analyse_trace_external_sources = ../src/cairo-error.c
+cairo_perf_trace_sources = cairo-perf-trace.c
+cairo_perf_trace_external_sources = \
+       ../src/cairo-error.c \
+       ../src/cairo-hash.c \
+       $(NULL)
+
+cairo_perf_micro_sources = cairo-perf-micro.c
+cairo_perf_diff_files_sources = cairo-perf-diff-files.c
+cairo_perf_print_sources = cairo-perf-print.c
+cairo_perf_chart_sources = cairo-perf-chart.c
+cairo_perf_compare_backends_sources = cairo-perf-compare-backends.c
+cairo_perf_graph_files_sources = \
+       cairo-perf-graph-files.c        \
+       cairo-perf-graph-widget.c       \
+       $(NULL)
+
+cairo_perf_graph_files_headers = cairo-perf-graph.h
+AM_CPPFLAGS = \
+       -I$(srcdir)                             \
+       -I$(top_srcdir)/boilerplate             \
+       -I$(top_srcdir)/src                     \
+       -I$(top_srcdir)/util/cairo-missing      \
+       -I$(top_srcdir)/util/cairo-script       \
+       -I$(top_builddir)/src                   \
+       $(CAIRO_CFLAGS)
+
+AM_LDFLAGS = $(CAIRO_LDFLAGS)
+SUBDIRS = micro
+LDADD = libcairoperf.la \
+       $(top_builddir)/boilerplate/libcairoboilerplate.la \
+       $(top_builddir)/src/libcairo.la
+
+cairo_perf_micro_SOURCES = $(cairo_perf_micro_sources)
+cairo_perf_micro_LDADD = \
+       $(top_builddir)/perf/micro/libcairo-perf-micro.la \
+       $(LDADD)
+
+cairo_perf_micro_DEPENDENCIES = \
+       $(top_builddir)/perf/micro/libcairo-perf-micro.la \
+       $(LDADD)
+
+libcairoperf_la_SOURCES = \
+       $(libcairoperf_sources) \
+       $(libcairoperf_external_sources) \
+       $(libcairoperf_headers) \
+       $(NULL)
+
+cairo_analyse_trace_SOURCES = \
+       $(cairo_analyse_trace_sources)  \
+       $(cairo_analyse_trace_external_sources)
+
+cairo_analyse_trace_LDADD = \
+       $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
+       $(top_builddir)/util/cairo-missing/libcairo-missing.la \
+       $(LDADD)
+
+cairo_analyse_trace_DEPENDENCIES = \
+       $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
+       $(top_builddir)/util/cairo-missing/libcairo-missing.la \
+       $(LDADD)
+
+cairo_perf_trace_SOURCES = \
+       $(cairo_perf_trace_sources)     \
+       $(cairo_perf_trace_external_sources)
+
+cairo_perf_trace_LDADD = \
+       $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
+       $(top_builddir)/util/cairo-missing/libcairo-missing.la \
+       $(LDADD)
+
+cairo_perf_trace_DEPENDENCIES = \
+       $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
+       $(top_builddir)/util/cairo-missing/libcairo-missing.la \
+       $(LDADD)
+
+cairo_perf_diff_files_SOURCES = $(cairo_perf_diff_files_sources)
+cairo_perf_print_SOURCES = $(cairo_perf_print_sources)
+cairo_perf_chart_SOURCES = $(cairo_perf_chart_sources)
+cairo_perf_compare_backends_SOURCES = $(cairo_perf_compare_backends_sources)
+cairo_perf_graph_files_SOURCES = \
+       $(cairo_perf_graph_files_sources)       \
+       $(cairo_perf_graph_files_headers)
+
+cairo_perf_graph_files_CFLAGS = @gtk_CFLAGS@
+cairo_perf_graph_files_LDADD = @gtk_LIBS@ $(LDADD)
+
+# 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)
+ITERS = $(CAIRO_PERF_ITERATIONS)
+CAIRO_PERF_ENVIRONMENT = CAIRO_PERF_ITERATIONS="$(ITERS)" CAIRO_TEST_TARGET="$(TARGETS)" CAIRO_TEST_TARGET_EXCLUDE="$(TARGETS_EXCLUDE)"
+EXTRA_VALGRIND_FLAGS = $(CAIRO_EXTRA_VALGRIND_FLAGS)
+VALGRIND_MEMCHECK_FLAGS = \
+       --tool=memcheck \
+       --suppressions=$(top_srcdir)/test/.valgrind-suppressions \
+       --leak-check=yes --show-reachable=yes
+
+VALGRIND_CALLGRIND_FLAGS = \
+       --tool=callgrind
+
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/build/Makefile.am.common $(top_srcdir)/perf/Makefile.sources $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign perf/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign perf/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+libcairoperf.la: $(libcairoperf_la_OBJECTS) $(libcairoperf_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libcairoperf_la_OBJECTS) $(libcairoperf_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+cairo-analyse-trace$(EXEEXT): $(cairo_analyse_trace_OBJECTS) $(cairo_analyse_trace_DEPENDENCIES) 
+       @rm -f cairo-analyse-trace$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(cairo_analyse_trace_OBJECTS) $(cairo_analyse_trace_LDADD) $(LIBS)
+cairo-perf-chart$(EXEEXT): $(cairo_perf_chart_OBJECTS) $(cairo_perf_chart_DEPENDENCIES) 
+       @rm -f cairo-perf-chart$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(cairo_perf_chart_OBJECTS) $(cairo_perf_chart_LDADD) $(LIBS)
+cairo-perf-compare-backends$(EXEEXT): $(cairo_perf_compare_backends_OBJECTS) $(cairo_perf_compare_backends_DEPENDENCIES) 
+       @rm -f cairo-perf-compare-backends$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(cairo_perf_compare_backends_OBJECTS) $(cairo_perf_compare_backends_LDADD) $(LIBS)
+cairo-perf-diff-files$(EXEEXT): $(cairo_perf_diff_files_OBJECTS) $(cairo_perf_diff_files_DEPENDENCIES) 
+       @rm -f cairo-perf-diff-files$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(cairo_perf_diff_files_OBJECTS) $(cairo_perf_diff_files_LDADD) $(LIBS)
+cairo-perf-graph-files$(EXEEXT): $(cairo_perf_graph_files_OBJECTS) $(cairo_perf_graph_files_DEPENDENCIES) 
+       @rm -f cairo-perf-graph-files$(EXEEXT)
+       $(AM_V_CCLD)$(cairo_perf_graph_files_LINK) $(cairo_perf_graph_files_OBJECTS) $(cairo_perf_graph_files_LDADD) $(LIBS)
+cairo-perf-micro$(EXEEXT): $(cairo_perf_micro_OBJECTS) $(cairo_perf_micro_DEPENDENCIES) 
+       @rm -f cairo-perf-micro$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(cairo_perf_micro_OBJECTS) $(cairo_perf_micro_LDADD) $(LIBS)
+cairo-perf-print$(EXEEXT): $(cairo_perf_print_OBJECTS) $(cairo_perf_print_DEPENDENCIES) 
+       @rm -f cairo-perf-print$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(cairo_perf_print_OBJECTS) $(cairo_perf_print_LDADD) $(LIBS)
+cairo-perf-trace$(EXEEXT): $(cairo_perf_trace_OBJECTS) $(cairo_perf_trace_DEPENDENCIES) 
+       @rm -f cairo-perf-trace$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(cairo_perf_trace_OBJECTS) $(cairo_perf_trace_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-analyse-trace.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-hash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-chart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-compare-backends.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-diff-files.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-micro.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-print.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-report.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-trace.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-stats.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-time.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-files.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-widget.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+cairo-time.lo: ../src/cairo-time.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cairo-time.lo -MD -MP -MF $(DEPDIR)/cairo-time.Tpo -c -o cairo-time.lo `test -f '../src/cairo-time.c' || echo '$(srcdir)/'`../src/cairo-time.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo-time.Tpo $(DEPDIR)/cairo-time.Plo
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='../src/cairo-time.c' object='cairo-time.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cairo-time.lo `test -f '../src/cairo-time.c' || echo '$(srcdir)/'`../src/cairo-time.c
+
+cairo-error.o: ../src/cairo-error.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cairo-error.o -MD -MP -MF $(DEPDIR)/cairo-error.Tpo -c -o cairo-error.o `test -f '../src/cairo-error.c' || echo '$(srcdir)/'`../src/cairo-error.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo-error.Tpo $(DEPDIR)/cairo-error.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='../src/cairo-error.c' object='cairo-error.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cairo-error.o `test -f '../src/cairo-error.c' || echo '$(srcdir)/'`../src/cairo-error.c
+
+cairo-error.obj: ../src/cairo-error.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cairo-error.obj -MD -MP -MF $(DEPDIR)/cairo-error.Tpo -c -o cairo-error.obj `if test -f '../src/cairo-error.c'; then $(CYGPATH_W) '../src/cairo-error.c'; else $(CYGPATH_W) '$(srcdir)/../src/cairo-error.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo-error.Tpo $(DEPDIR)/cairo-error.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='../src/cairo-error.c' object='cairo-error.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cairo-error.obj `if test -f '../src/cairo-error.c'; then $(CYGPATH_W) '../src/cairo-error.c'; else $(CYGPATH_W) '$(srcdir)/../src/cairo-error.c'; fi`
+
+cairo_perf_graph_files-cairo-perf-graph-files.o: cairo-perf-graph-files.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -MT cairo_perf_graph_files-cairo-perf-graph-files.o -MD -MP -MF $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-files.Tpo -c -o cairo_perf_graph_files-cairo-perf-graph-files.o `test -f 'cairo-perf-graph-files.c' || echo '$(srcdir)/'`cairo-perf-graph-files.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-files.Tpo $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-files.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cairo-perf-graph-files.c' object='cairo_perf_graph_files-cairo-perf-graph-files.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -c -o cairo_perf_graph_files-cairo-perf-graph-files.o `test -f 'cairo-perf-graph-files.c' || echo '$(srcdir)/'`cairo-perf-graph-files.c
+
+cairo_perf_graph_files-cairo-perf-graph-files.obj: cairo-perf-graph-files.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -MT cairo_perf_graph_files-cairo-perf-graph-files.obj -MD -MP -MF $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-files.Tpo -c -o cairo_perf_graph_files-cairo-perf-graph-files.obj `if test -f 'cairo-perf-graph-files.c'; then $(CYGPATH_W) 'cairo-perf-graph-files.c'; else $(CYGPATH_W) '$(srcdir)/cairo-perf-graph-files.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-files.Tpo $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-files.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cairo-perf-graph-files.c' object='cairo_perf_graph_files-cairo-perf-graph-files.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -c -o cairo_perf_graph_files-cairo-perf-graph-files.obj `if test -f 'cairo-perf-graph-files.c'; then $(CYGPATH_W) 'cairo-perf-graph-files.c'; else $(CYGPATH_W) '$(srcdir)/cairo-perf-graph-files.c'; fi`
+
+cairo_perf_graph_files-cairo-perf-graph-widget.o: cairo-perf-graph-widget.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -MT cairo_perf_graph_files-cairo-perf-graph-widget.o -MD -MP -MF $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-widget.Tpo -c -o cairo_perf_graph_files-cairo-perf-graph-widget.o `test -f 'cairo-perf-graph-widget.c' || echo '$(srcdir)/'`cairo-perf-graph-widget.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-widget.Tpo $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-widget.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cairo-perf-graph-widget.c' object='cairo_perf_graph_files-cairo-perf-graph-widget.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -c -o cairo_perf_graph_files-cairo-perf-graph-widget.o `test -f 'cairo-perf-graph-widget.c' || echo '$(srcdir)/'`cairo-perf-graph-widget.c
+
+cairo_perf_graph_files-cairo-perf-graph-widget.obj: cairo-perf-graph-widget.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -MT cairo_perf_graph_files-cairo-perf-graph-widget.obj -MD -MP -MF $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-widget.Tpo -c -o cairo_perf_graph_files-cairo-perf-graph-widget.obj `if test -f 'cairo-perf-graph-widget.c'; then $(CYGPATH_W) 'cairo-perf-graph-widget.c'; else $(CYGPATH_W) '$(srcdir)/cairo-perf-graph-widget.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-widget.Tpo $(DEPDIR)/cairo_perf_graph_files-cairo-perf-graph-widget.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cairo-perf-graph-widget.c' object='cairo_perf_graph_files-cairo-perf-graph-widget.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_perf_graph_files_CFLAGS) $(CFLAGS) -c -o cairo_perf_graph_files-cairo-perf-graph-widget.obj `if test -f 'cairo-perf-graph-widget.c'; then $(CYGPATH_W) 'cairo-perf-graph-widget.c'; else $(CYGPATH_W) '$(srcdir)/cairo-perf-graph-widget.c'; fi`
+
+cairo-hash.o: ../src/cairo-hash.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cairo-hash.o -MD -MP -MF $(DEPDIR)/cairo-hash.Tpo -c -o cairo-hash.o `test -f '../src/cairo-hash.c' || echo '$(srcdir)/'`../src/cairo-hash.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo-hash.Tpo $(DEPDIR)/cairo-hash.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='../src/cairo-hash.c' object='cairo-hash.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cairo-hash.o `test -f '../src/cairo-hash.c' || echo '$(srcdir)/'`../src/cairo-hash.c
+
+cairo-hash.obj: ../src/cairo-hash.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cairo-hash.obj -MD -MP -MF $(DEPDIR)/cairo-hash.Tpo -c -o cairo-hash.obj `if test -f '../src/cairo-hash.c'; then $(CYGPATH_W) '../src/cairo-hash.c'; else $(CYGPATH_W) '$(srcdir)/../src/cairo-hash.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/cairo-hash.Tpo $(DEPDIR)/cairo-hash.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='../src/cairo-hash.c' object='cairo-hash.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cairo-hash.obj `if test -f '../src/cairo-hash.c'; then $(CYGPATH_W) '../src/cairo-hash.c'; else $(CYGPATH_W) '$(srcdir)/../src/cairo-hash.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       $(am__tty_colors); \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=XPASS; \
+             ;; \
+             *) \
+               col=$$grn; res=PASS; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               col=$$lgn; res=XFAIL; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=FAIL; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             col=$$blu; res=SKIP; \
+           fi; \
+           echo "$${col}$$res$${std}: $$tst"; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         if test "$$failed" -eq 0; then \
+           echo "$$grn$$dashes"; \
+         else \
+           echo "$$red$$dashes"; \
+         fi; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes$$std"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am: html-local
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+       check-am ctags-recursive install install-am install-strip \
+       tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstPROGRAMS ctags ctags-recursive distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am html-local info \
+       info-am install install-am install-data install-data-am \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-html install-html-am install-info install-info-am \
+       install-man install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am
+
+
+# Install rules to rebuild the libraries and add explicit dependencies
+$(top_builddir)/perf/micro/libcairo-perf-micro.la:
+       cd $(top_builddir)/perf/micro && $(MAKE) $(AM_MAKEFLAGS) libcairo-perf-micro.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)/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
+
+perf: cairo-perf-micro$(EXEEXT) cairo-perf-trace$(EXEEXT)
+       -$(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-micro$(EXEEXT)
+       -$(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-trace$(EXEEXT)
+
+html-local: index.html
+
+perf-tag.html : cairo-perf-micro${EXEEXT}
+       $(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-diff -t -h $@ `git describe --abbrev=0` HEAD
+perf-commit.html : cairo-perf-micro${EXEEXT}
+       $(CAIRO_PERF_ENVIRONMENT) ./cairo-perf-diff -t -h $@ HEAD
+
+# Summarise changes in index.html, with details in links
+index.html: perf-tag.html perf-commit.html
+       echo "<html><head><title>Performance Changes</title></head><body>Against <a href=\"perf-tag.html\">"`git describe --abbrev=0`"</a><br><a href=\"perf-commit.html\">Latest commit</a></body>" > $@
+
+perf-valgrind:
+       $(MAKE) $(AM_MAKEFLAGS) perf \
+           $(top_builddir)/libtool --mode=execute \
+           valgrind $(VALGRIND_MEMCHECK_FLAGS) $(EXTRA_VALGRIND_FLAGS)' \
+           | tee valgrind-log
+
+perf-callgrind:
+       $(MAKE) $(AM_MAKEFLAGS) perf \
+           $(top_builddir)/libtool --mode=execute \
+           valgrind $(VALGRIND_CALLGRIND_FLAGS) $(EXTRA_VALGRIND_FLAGS)'
+
+.PHONY: perf perf-valgrind perf-callgrind
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
index 42a6148..beca927 100644 (file)
@@ -92,7 +92,7 @@ cairo-perf-diff:
 
 As a convenience, this common desire to measure a single commit is
 supported by passing a single revision to cairo-perf-diff, in which
-case it will compare it to the immediately preceeding commit. So for
+case it will compare it to the immediately preceding commit. So for
 example:
 
     # Measure the impact of the latest commit
@@ -117,7 +117,7 @@ what has been cached:
 
 And finally, the -f mode is most useful in conjunction with the --
 option to cairo-perf-diff which allows you to pass options to the
-underlying cairo-perf runs. This allows you to restrict the additonal
+underlying cairo-perf runs. This allows you to restrict the additional
 test runs to a limited subset of the tests.
 
 For example, a frequently used trick is to first generate a chart with
index ac2a4e7..9941486 100644 (file)
@@ -256,18 +256,17 @@ static void
 usage (const char *argv0)
 {
     fprintf (stderr,
-"Usage: %s [-l] [-r] [-v] [-i iterations] [test-names ... | traces ...]\n"
-"       %s -l\n"
+"Usage: %s [-l] [-i iterations] [-x exclude-file] [test-names ... | traces ...]\n"
 "\n"
-"Run the cairo performance test suite over the given tests (all by default)\n"
+"Run the cairo trace analysis suite over the given tests (all by default)\n"
 "The command-line arguments are interpreted as follows:\n"
 "\n"
-"  -v  verbose\n"
-"  -x   exclude; specify a file to read a list of traces to exclude\n"
+"  -i  iterations; specify the number of iterations per test case\n"
 "  -l  list only; just list selected test case names without executing\n"
+"  -x  exclude; specify a file to read a list of traces to exclude\n"
 "\n"
 "If test names are given they are used as sub-string matches so a command\n"
-"such as \"cairo-perf-trace firefox\" can be used to run all firefox traces.\n"
+"such as \"%s firefox\" can be used to run all firefox traces.\n"
 "Alternatively, you can specify a list of filenames to execute.\n",
             argv0, argv0);
 }
@@ -330,7 +329,7 @@ parse_options (cairo_perf_t *perf,
     perf->num_exclude_names = 0;
 
     while (1) {
-       c = _cairo_getopt (argc, argv, "i:x:lrvc");
+       c = _cairo_getopt (argc, argv, "i:lx:");
        if (c == -1)
            break;
 
@@ -419,7 +418,6 @@ cairo_perf_trace (cairo_perf_t                         *perf,
                                   1, 1,
                                   1, 1,
                                   CAIRO_BOILERPLATE_MODE_PERF,
-                                  0,
                                   &args.closure);
     args.surface =
            cairo_surface_create_observer (real,
index 70ff353..df0bd88 100644 (file)
@@ -54,7 +54,7 @@ struct color {
 };
 
 #define FONT_SIZE 12
-#define PAD (FONT_SIZE/2+1)
+#define PAD (4)
 
 #define MAX(a,b) ((a) > (b) ? (a) : (b))
 
@@ -108,13 +108,13 @@ trim_outliers (double *values,
     qsort (values, num_values,
           sizeof (double), _double_cmp);
 
-    q1         = values[1*num_values / 4];
-    q3         = values[3*num_values / 4];
+    q1         = values[1*num_values / 6];
+    q3         = values[5*num_values / 6];
 
     iqr = q3 - q1;
 
-    outlier_min = q1 - 1.5 * iqr;
-    outlier_max = q3 + 1.5 * iqr;
+    outlier_min = q1 - 3 * iqr;
+    outlier_max = q3 + 3 * iqr;
 
     i = 0;
     while (i < num_values && values[i] < outlier_min)
@@ -140,6 +140,8 @@ find_ranges (struct chart *chart)
     double test_time;
     int seen_non_null;
     int num_tests = 0;
+    double slow_sum = 0, fast_sum = 0, sum;
+    int slow_count = 0, fast_count = 0;
     int i;
 
     num_values = 0;
@@ -201,17 +203,25 @@ find_ranges (struct chart *chart)
                    test_time = report_time;
 
                if (chart->relative) {
-                   double v = to_factor (test_time / report_time);
-                   if (num_values == size_values) {
-                       size_values *= 2;
-                       values = xrealloc (values,
-                                          size_values * sizeof (double));
+                   if (test_time != report_time) {
+                       double v = to_factor (test_time / report_time);
+                       if (num_values == size_values) {
+                           size_values *= 2;
+                           values = xrealloc (values,
+                                              size_values * sizeof (double));
+                       }
+                       values[num_values++] = v;
+                       if (v < min)
+                           min = v;
+                       if (v > max)
+                           max = v;
+                       if (v > 0)
+                           fast_sum += v/100, fast_count++;
+                       else
+                           slow_sum += v/100, slow_count++;
+                       sum += v/100;
+                       printf ("%s %d: %f\n", min_test->name, num_values, v);
                    }
-                   values[num_values++] = v;
-                   if (v < min)
-                       min = v;
-                   if (v > max)
-                       max = v;
                } else {
                    if (report_time < min)
                        min = report_time;
@@ -230,6 +240,9 @@ find_ranges (struct chart *chart)
 
     free (values);
     free (tests);
+
+    printf ("%d: slow[%d] average: %f, fast[%d] average: %f, %f\n",
+           num_values, slow_count, slow_sum / slow_count, fast_count, fast_sum / fast_count, sum / num_values);
 }
 
 #define SET_COLOR(C, R, G, B) (C)->red = (R), (C)->green = (G), (C)->blue = (B)
@@ -284,6 +297,28 @@ static void set_report_color (struct chart *chart, int report)
     cairo_set_source_rgb (chart->cr, color.red, color.green, color.blue);
 }
 
+static void set_report_gradient (struct chart *chart, int report,
+                                double x, double y, double w, double h)
+{
+    struct color color;
+    cairo_pattern_t *p;
+
+    hsv_to_rgb (6. / chart->num_reports * report, .7, .7, &color);
+
+    p = cairo_pattern_create_linear (x, 0, x+w, 0);
+    cairo_pattern_add_color_stop_rgba (p, 0.0,
+                                      color.red, color.green, color.blue,
+                                      .50);
+    cairo_pattern_add_color_stop_rgba (p, 0.5,
+                                      color.red, color.green, color.blue,
+                                      .50);
+    cairo_pattern_add_color_stop_rgba (p, 1.0,
+                                      color.red, color.green, color.blue,
+                                      1.0);
+    cairo_set_source (chart->cr, p);
+    cairo_pattern_destroy (p);
+}
+
 static void
 test_background (struct chart *c,
                 int           test)
@@ -314,11 +349,8 @@ add_chart (struct chart *c,
     if (fabs (value) < 0.1)
        return;
 
-    set_report_color (c, report);
-
     if (c->relative) {
        cairo_text_extents_t extents;
-       cairo_bool_t show_label;
        char buf[80];
        double y;
 
@@ -327,17 +359,31 @@ add_chart (struct chart *c,
        dx = c->width / (double) (c->num_tests * c->num_reports);
        x = dx * (c->num_reports * test + report - .5);
 
+       set_report_gradient (c, report,
+                            floor (x), c->height / 2.,
+                            floor (x + dx) - floor (x),
+                            ceil (-dy*value - c->height/2.) + c->height/2.);
+
        cairo_rectangle (c->cr,
                         floor (x), c->height / 2.,
                         floor (x + dx) - floor (x),
                         ceil (-dy*value - c->height/2.) + c->height/2.);
-       cairo_fill (c->cr);
+       cairo_fill_preserve (c->cr);
+       cairo_save (c->cr);
+       cairo_clip_preserve (c->cr);
+       set_report_color (c, report);
+       cairo_stroke (c->cr);
+       cairo_restore (c->cr);
+
+       /* Skip the label if the difference between the two is less than 0.1% */
+       if (fabs (value) < 0.1)
+               return;
 
        cairo_save (c->cr);
        cairo_set_font_size (c->cr, dx - 2);
 
        if (value < 0) {
-           sprintf (buf, "%.1f", value/100 - 1);
+           sprintf (buf, "%.1f", -value/100 + 1);
        } else {
            sprintf (buf, "%.1f", value/100 + 1);
        }
@@ -351,32 +397,47 @@ add_chart (struct chart *c,
            y = c->height/2;
        }
 
+       if (y < 0) {
+           if (y > -extents.width - 6)
+                   y -= extents.width + 6;
+       } else {
+           if (y < extents.width + 6)
+                   y += extents.width + 6;
+       }
+
        cairo_translate (c->cr,
                         floor (x) + (floor (x + dx) - floor (x))/2,
                         floor (y) + c->height/2.);
        cairo_rotate (c->cr, -M_PI/2);
        if (y < 0) {
            cairo_move_to (c->cr, -extents.x_bearing -extents.width - 4, -extents.y_bearing/2);
-           show_label = y < -extents.width - 6;
        } else {
            cairo_move_to (c->cr, 2, -extents.y_bearing/2);
-           show_label = y > extents.width + 6;
        }
 
        cairo_set_source_rgb (c->cr, .95, .95, .95);
-       if (show_label)
-           cairo_show_text (c->cr, buf);
+       cairo_show_text (c->cr, buf);
        cairo_restore (c->cr);
     } else {
        dy = (c->height - PAD) / c->max_value;
        dx = c->width / (double) (c->num_tests * (c->num_reports+1));
        x = dx * ((c->num_reports+1) * test + report + .5);
 
+       set_report_gradient (c, report,
+                        floor (x), c->height,
+                        floor (x + dx) - floor (x),
+                        floor (c->height - dy*value) - c->height);
+
        cairo_rectangle (c->cr,
                         floor (x), c->height,
                         floor (x + dx) - floor (x),
                         floor (c->height - dy*value) - c->height);
-       cairo_fill (c->cr);
+       cairo_fill_preserve (c->cr);
+       cairo_save (c->cr);
+       cairo_clip_preserve (c->cr);
+       set_report_color (c, report);
+       cairo_stroke (c->cr);
+       cairo_restore (c->cr);
     }
 }
 
@@ -390,19 +451,29 @@ add_label (struct chart *c,
 
     cairo_save (c->cr);
     dx = c->width / (double) c->num_tests;
-    if (dx / 2 - PAD < 6)
+    if (dx / 2 - PAD < 4)
        return;
     cairo_set_font_size (c->cr, dx / 2 - PAD);
     cairo_text_extents (c->cr, label, &extents);
 
+    cairo_set_source_rgb (c->cr, .5, .5, .5);
+
     x = (test + .5) * dx;
-    cairo_translate (c->cr, x, PAD / 2);
+    cairo_save (c->cr);
+    cairo_translate (c->cr, x, c->height - PAD / 2);
     cairo_rotate (c->cr, -M_PI/2);
+    cairo_move_to (c->cr, 0, -extents.y_bearing/2);
+    cairo_show_text (c->cr, label);
+    cairo_restore (c->cr);
 
-    cairo_set_source_rgb (c->cr, .5, .5, .5);
+    cairo_save (c->cr);
+    cairo_translate (c->cr, x, PAD / 2);
+    cairo_rotate (c->cr, -M_PI/2);
     cairo_move_to (c->cr, -extents.width, -extents.y_bearing/2);
     cairo_show_text (c->cr, label);
     cairo_restore (c->cr);
+
+    cairo_restore (c->cr);
 }
 
 static void
@@ -464,10 +535,10 @@ done:
        cairo_text_extents (c->cr, buf, &extents);
 
        cairo_set_source_rgba (c->cr, .75, 0, 0, .95);
-       cairo_move_to (c->cr, -extents.x_bearing, floor (y) - (extents.height/2 + extents.y_bearing) + .5);
+       cairo_move_to (c->cr, 1-extents.x_bearing, floor (y) - (extents.height/2 + extents.y_bearing) + .5);
        cairo_show_text (c->cr, buf);
 
-       cairo_move_to (c->cr, c->width-extents.width+extents.x_bearing, floor (y) - (extents.height/2 + extents.y_bearing) + .5);
+       cairo_move_to (c->cr, c->width-extents.width-1, floor (y) - (extents.height/2 + extents.y_bearing) + .5);
        cairo_show_text (c->cr, buf);
 
        cairo_set_source_rgba (c->cr, .75, 0, 0, .5);
@@ -525,17 +596,17 @@ done:
        cairo_text_extents (c->cr, buf, &extents);
 
        cairo_set_source_rgba (c->cr, .75, 0, 0, .95);
-       cairo_move_to (c->cr, -extents.x_bearing, floor (mid + y) - (extents.height/2 + extents.y_bearing)+ .5);
+       cairo_move_to (c->cr, 1-extents.x_bearing, floor (mid + y) - (extents.height/2 + extents.y_bearing) + .5);
        cairo_show_text (c->cr, buf);
 
-       cairo_move_to (c->cr, c->width-extents.width+extents.x_bearing, floor (mid + y) - (extents.height/2 + extents.y_bearing)+ .5);
+       cairo_move_to (c->cr, c->width-extents.width-1, floor (mid + y) - (extents.height/2 + extents.y_bearing) + .5);
        cairo_show_text (c->cr, buf);
 
        cairo_set_source_rgba (c->cr, 0, .75, 0, .95);
-       cairo_move_to (c->cr, -extents.x_bearing, ceil (mid - y) - (extents.height/2 + extents.y_bearing)+ .5);
+       cairo_move_to (c->cr, 1-extents.x_bearing, ceil (mid - y) - (extents.height/2 + extents.y_bearing) + .5);
        cairo_show_text (c->cr, buf);
 
-       cairo_move_to (c->cr, c->width-extents.width+extents.x_bearing, ceil (mid - y) - (extents.height/2 + extents.y_bearing)+ .5);
+       cairo_move_to (c->cr, c->width-extents.width-1, ceil (mid - y) - (extents.height/2 + extents.y_bearing) + .5);
        cairo_show_text (c->cr, buf);
 
        /* trim the dashes to no obscure the labels */
@@ -544,7 +615,7 @@ done:
                       ceil (extents.width + extents.x_bearing + 2),
                       floor (mid + y) + .5);
        cairo_line_to (c->cr,
-                      floor (c->width - (extents.width + extents.x_bearing + 2)),
+                      floor (c->width - (extents.width + 2)),
                       floor (mid + y) + .5);
        cairo_stroke (c->cr);
 
@@ -553,7 +624,7 @@ done:
                       ceil (extents.width + extents.x_bearing + 2),
                       ceil (mid - y) + .5);
        cairo_line_to (c->cr,
-                      floor (c->width - (extents.width + extents.x_bearing + 2)),
+                      floor (c->width - (extents.width + 2)),
                       ceil (mid - y) + .5);
        cairo_stroke (c->cr);
 
@@ -840,7 +911,7 @@ main (int     argc,
            chart.names[chart.num_reports] = argv[i] + 7;
        } else {
            cairo_perf_report_load (&chart.reports[chart.num_reports++],
-                                   argv[i],
+                                   argv[i], i,
                                    test_report_cmp_name);
        }
     }
index 0ac4b7c..1fd99e4 100644 (file)
@@ -576,7 +576,7 @@ main (int   argc,
 
     reports = xmalloc ((argc-1) * sizeof (cairo_perf_report_t));
     for (i = 1; i < argc; i++ )
-       cairo_perf_report_load (&reports[i-1], argv[i], NULL);
+       cairo_perf_report_load (&reports[i-1], argv[i], i, NULL);
 
     cases = test_cases_from_reports (reports, argc-1);
 
index 61ed55f..d6b52c4 100644 (file)
@@ -169,7 +169,7 @@ cairo_perf_run (cairo_perf_t           *perf,
                cairo_count_func_t  count_func)
 {
     static cairo_bool_t first_run = TRUE;
-    unsigned int i, similar, has_similar;
+    unsigned int i, similar, similar_iters;
     cairo_time_t *times;
     cairo_stats_t stats = {0.0, 0.0};
     int low_std_dev_count;
@@ -217,8 +217,12 @@ cairo_perf_run (cairo_perf_t          *perf,
        free (filename);
     }
 
-    has_similar = cairo_perf_has_similar (perf);
-    for (similar = 0; similar <= has_similar; similar++) {
+    if (cairo_perf_has_similar (perf))
+       similar_iters = 2;
+    else
+       similar_iters = 1;
+
+    for (similar = 0; similar < similar_iters; similar++) {
        unsigned loops;
 
        if (perf->summary) {
@@ -315,19 +319,19 @@ static void
 usage (const char *argv0)
 {
     fprintf (stderr,
-"Usage: %s [-l] [-r] [-v] [-i iterations] [test-names ...]\n"
-"       %s -l\n"
+"Usage: %s [-flrv] [-i iterations] [test-names ...]\n"
 "\n"
 "Run the cairo performance test suite over the given tests (all by default)\n"
 "The command-line arguments are interpreted as follows:\n"
 "\n"
-"  -r  raw; display each time measurement instead of summary statistics\n"
-"  -v  verbose; in raw mode also show the summaries\n"
+"  -f  fast; faster, less accurate\n"
 "  -i  iterations; specify the number of iterations per test case\n"
 "  -l  list only; just list selected test case names without executing\n"
+"  -r  raw; display each time measurement instead of summary statistics\n"
+"  -v  verbose; in raw mode also show the summaries\n"
 "\n"
 "If test names are given they are used as sub-string matches so a command\n"
-"such as \"cairo-perf text\" can be used to run all text test cases.\n",
+"such as \"%s text\" can be used to run all text test cases.\n",
             argv0, argv0);
 }
 
@@ -361,11 +365,16 @@ parse_options (cairo_perf_t *perf,
     perf->summary = stdout;
 
     while (1) {
-       c = _cairo_getopt (argc, argv, "i:lrvf");
+       c = _cairo_getopt (argc, argv, "fi:lrv");
        if (c == -1)
            break;
 
        switch (c) {
+       case 'f':
+           perf->fast_and_sloppy = TRUE;
+           if (ms == NULL)
+               perf->ms_per_iteration = CAIRO_PERF_ITERATION_MS_FAST;
+           break;
        case 'i':
            perf->exact_iterations = TRUE;
            perf->iterations = strtoul (optarg, &end, 10);
@@ -382,11 +391,6 @@ parse_options (cairo_perf_t *perf,
            perf->raw = TRUE;
            perf->summary = NULL;
            break;
-       case 'f':
-           perf->fast_and_sloppy = TRUE;
-           if (ms == NULL)
-               perf->ms_per_iteration = CAIRO_PERF_ITERATION_MS_FAST;
-           break;
        case 'v':
            verbose = 1;
            break;
@@ -508,7 +512,6 @@ main (int   argc,
                                                    perf.size, perf.size,
                                                    perf.size, perf.size,
                                                    CAIRO_BOILERPLATE_MODE_PERF,
-                                                   0,
                                                    &closure);
                if (surface == NULL) {
                    fprintf (stderr,
index 146f79b..16a3ff4 100644 (file)
@@ -65,7 +65,7 @@ main (int       argc,
     for (i = 1; i < argc; i++ ) {
        cairo_perf_report_t report;
 
-       cairo_perf_report_load (&report, argv[i], NULL);
+       cairo_perf_report_load (&report, argv[i], i, NULL);
        report_print (&report);
     }
 
index 8df78c6..38bdc0c 100644 (file)
@@ -388,11 +388,9 @@ cairo_perf_report_load (cairo_perf_report_t *report,
     if (name == NULL)
        name = "stdin";
 
-    configuration = xmalloc (strlen (name) * sizeof (char) + 1);
-    strcpy (configuration, name);
+    configuration = xstrdup (name);
     baseName = basename (configuration);
-    report->configuration = xmalloc (strlen (baseName) * sizeof (char) + 1);
-    strcpy (report->configuration, baseName);
+    report->configuration = xstrdup (baseName);
     free (configuration);
 
     dot = strrchr (report->configuration, '.');
index 8e637a7..bd0cb07 100644 (file)
@@ -354,21 +354,22 @@ static void
 usage (const char *argv0)
 {
     fprintf (stderr,
-"Usage: %s [-l] [-r] [-v] [-i iterations] [test-names ... | traces ...]\n"
-"       %s -l\n"
+"Usage: %s [-clrsv] [-i iterations] [-t tile-size] [-x exclude-file] [test-names ... | traces ...]\n"
 "\n"
 "Run the cairo performance test suite over the given tests (all by default)\n"
 "The command-line arguments are interpreted as follows:\n"
 "\n"
+"  -c  use surface cache; keep a cache of surfaces to be reused\n"
+"  -i  iterations; specify the number of iterations per test case\n"
+"  -l  list only; just list selected test case names without executing\n"
 "  -r  raw; display each time measurement instead of summary statistics\n"
 "  -s  sync; only sum the elapsed time of the indiviual operations\n"
+"  -t  tile size; draw to tiled surfaces\n"
 "  -v  verbose; in raw mode also show the summaries\n"
-"  -i  iterations; specify the number of iterations per test case\n"
-"  -x   exclude; specify a file to read a list of traces to exclude\n"
-"  -l  list only; just list selected test case names without executing\n"
+"  -x  exclude; specify a file to read a list of traces to exclude\n"
 "\n"
 "If test names are given they are used as sub-string matches so a command\n"
-"such as \"cairo-perf-trace firefox\" can be used to run all firefox traces.\n"
+"such as \"%s firefox\" can be used to run all firefox traces.\n"
 "Alternatively, you can specify a list of filenames to execute.\n",
             argv0, argv0);
 }
@@ -445,11 +446,14 @@ parse_options (cairo_perf_t *perf,
     perf->num_exclude_names = 0;
 
     while (1) {
-       c = _cairo_getopt (argc, argv, "t:i:x:lsrvc");
+       c = _cairo_getopt (argc, argv, "ci:lrst:vx:");
        if (c == -1)
            break;
 
        switch (c) {
+       case 'c':
+           use_surface_cache = 1;
+           break;
        case 'i':
            perf->exact_iterations = TRUE;
            perf->iterations = strtoul (optarg, &end, 10);
@@ -459,14 +463,6 @@ parse_options (cairo_perf_t *perf,
                exit (1);
            }
            break;
-       case 't':
-           perf->tile_size = strtoul (optarg, &end, 10);
-           if (*end != '\0') {
-               fprintf (stderr, "Invalid argument for -t (not an integer): %s\n",
-                        optarg);
-               exit (1);
-           }
-           break;
        case 'l':
            perf->list_only = TRUE;
            break;
@@ -477,12 +473,17 @@ parse_options (cairo_perf_t *perf,
        case 's':
            perf->observe = TRUE;
            break;
+       case 't':
+           perf->tile_size = strtoul (optarg, &end, 10);
+           if (*end != '\0') {
+               fprintf (stderr, "Invalid argument for -t (not an integer): %s\n",
+                        optarg);
+               exit (1);
+           }
+           break;
        case 'v':
            verbose = 1;
            break;
-       case 'c':
-           use_surface_cache = 1;
-           break;
        case 'x':
            if (! read_excludes (perf, optarg)) {
                fprintf (stderr, "Invalid argument for -x (not readable file): %s\n",
@@ -698,7 +699,6 @@ cairo_perf_trace (cairo_perf_t                         *perf,
                                               1, 1,
                                               1, 1,
                                               CAIRO_BOILERPLATE_MODE_PERF,
-                                              0,
                                               &args.closure);
        if (perf->observe) {
            cairo_surface_t *obs;
index 7f2ff5b..f049d6d 100644 (file)
 #include <sched.h>
 #endif
 
+/* XXX: add thread-aware for gl backend */
+#if CAIRO_HAS_GL_SURFACE || CAIRO_HAS_GLESV2_SURFACE
+#include <cairo-gl.h>
+#endif
+void cairo_perf_set_thread_aware (cairo_t *cr, cairo_bool_t thread_aware)
+{
+#if CAIRO_HAS_GL_SURFACE || CAIRO_HAS_GLESV2_SURFACE
+    cairo_device_t *device = cairo_surface_get_device (cairo_get_target (cr));
+    if (cairo_device_get_type (device) == CAIRO_DEVICE_TYPE_GL)
+       cairo_gl_device_set_thread_aware (device, thread_aware);
+#endif
+}
+
 
 /* timers */
 static cairo_time_t timer;
index feab74b..5145821 100644 (file)
@@ -40,6 +40,9 @@ typedef struct _cairo_stats {
     int iterations;
 } cairo_stats_t;
 
+/* XXX: add support for thread_aware for gl backend */
+void cairo_perf_set_thread_aware (cairo_t *cr, cairo_bool_t thread_aware);
+
 /* timers */
 
 void
index 1e25aef..44ed038 100644 (file)
@@ -32,7 +32,7 @@ _cairo_stats_compute (cairo_stats_t *stats,
                      cairo_time_t  *values,
                      int            num_values)
 {
-    cairo_time_t sum, mean, delta, q1, q3, iqr;
+    cairo_time_t sum, mean, q1, q3, iqr;
     cairo_time_t outlier_min, outlier_max;
     int i, min_valid, num_valid;
     double s;
diff --git a/perf/micro/Makefile.in b/perf/micro/Makefile.in
new file mode 100644 (file)
index 0000000..30f3cb9
--- /dev/null
@@ -0,0 +1,844 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/build/Makefile.am.common \
+       $(top_srcdir)/perf/micro/Makefile.sources
+EXTRA_PROGRAMS =
+TESTS =
+check_PROGRAMS =
+subdir = perf/micro
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \
+       $(top_srcdir)/build/aclocal.compare.m4 \
+       $(top_srcdir)/build/aclocal.enable.m4 \
+       $(top_srcdir)/build/aclocal.float.m4 \
+       $(top_srcdir)/build/aclocal.makefile.m4 \
+       $(top_srcdir)/build/aclocal.pkg.m4 \
+       $(top_srcdir)/build/gtk-doc.m4 $(top_srcdir)/build/libtool.m4 \
+       $(top_srcdir)/build/ltoptions.m4 \
+       $(top_srcdir)/build/ltsugar.m4 \
+       $(top_srcdir)/build/ltversion.m4 \
+       $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/cairo-version.h \
+       $(top_srcdir)/build/configure.ac.version \
+       $(top_srcdir)/build/configure.ac.tools \
+       $(top_srcdir)/build/configure.ac.features \
+       $(top_srcdir)/build/configure.ac.warnings \
+       $(top_srcdir)/build/configure.ac.system \
+       $(top_srcdir)/build/configure.ac.analysis \
+       $(top_srcdir)/build/configure.ac.noversion \
+       $(top_srcdir)/build/configure.ac.pthread \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcairo_perf_micro_la_LIBADD =
+am__objects_1 = cairo-perf-cover.lo box-outline.lo \
+       composite-checker.lo disjoint.lo fill.lo hatching.lo \
+       hash-table.lo line.lo a1-line.lo long-lines.lo mosaic.lo \
+       paint.lo paint-with-alpha.lo mask.lo pattern_create_radial.lo \
+       rectangles.lo rounded-rectangles.lo stroke.lo subimage_copy.lo \
+       tessellate.lo text.lo tiger.lo glyphs.lo twin.lo \
+       unaligned-clip.lo wave.lo world-map.lo zrusin.lo \
+       long-dashed-lines.lo dragon.lo pythagoras-tree.lo \
+       intersections.lo many-strokes.lo wide-strokes.lo many-fills.lo \
+       wide-fills.lo many-curves.lo curve.lo a1-curve.lo spiral.lo \
+       pixel.lo sierpinski.lo fill-clip.lo
+am__objects_2 =
+am_libcairo_perf_micro_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+libcairo_perf_micro_la_OBJECTS = $(am_libcairo_perf_micro_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libcairo_perf_micro_la_SOURCES)
+DIST_SOURCES = $(libcairo_perf_micro_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAIROBOILERPLATE_LIBS = @CAIROBOILERPLATE_LIBS@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LDFLAGS = @CAIRO_LDFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_LIBTOOL_VERSION_INFO = @CAIRO_LIBTOOL_VERSION_INFO@
+CAIRO_NONPKGCONFIG_CFLAGS = @CAIRO_NONPKGCONFIG_CFLAGS@
+CAIRO_NONPKGCONFIG_LIBS = @CAIRO_NONPKGCONFIG_LIBS@
+CAIRO_RELEASE_STATUS = @CAIRO_RELEASE_STATUS@
+CAIRO_REQUIRES = @CAIRO_REQUIRES@
+CAIRO_TEST_MODE = @CAIRO_TEST_MODE@
+CAIRO_TEST_UNDEFINED_LDFLAGS = @CAIRO_TEST_UNDEFINED_LDFLAGS@
+CAIRO_VERSION_MAJOR = @CAIRO_VERSION_MAJOR@
+CAIRO_VERSION_MICRO = @CAIRO_VERSION_MICRO@
+CAIRO_VERSION_MINOR = @CAIRO_VERSION_MINOR@
+CAIRO_VERSION_SONUM = @CAIRO_VERSION_SONUM@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FIND = @FIND@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_CONFIG = @FREETYPE_CONFIG@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GS = @GS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@
+LIBRSVG_LIBS = @LIBRSVG_LIBS@
+LIBS = @LIBS@
+LIBSPECTRE_CFLAGS = @LIBSPECTRE_CFLAGS@
+LIBSPECTRE_LIBS = @LIBSPECTRE_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LTP = @LTP@
+LTP_GENHTML = @LTP_GENHTML@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
+PKG_CONFIG = @PKG_CONFIG@
+POPPLER_CFLAGS = @POPPLER_CFLAGS@
+POPPLER_LIBS = @POPPLER_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SHLIB_EXT = @SHLIB_EXT@
+SHM_LIBS = @SHM_LIBS@
+SHTOOL = @SHTOOL@
+STRIP = @STRIP@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VERSION = @VERSION@
+XARGS = @XARGS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+cogl_CFLAGS = @cogl_CFLAGS@
+cogl_LIBS = @cogl_LIBS@
+datadir = @datadir@
+datarootdir = @datarootdir@
+directfb_CFLAGS = @directfb_CFLAGS@
+directfb_LIBS = @directfb_LIBS@
+docdir = @docdir@
+drm_CFLAGS = @drm_CFLAGS@
+drm_LIBS = @drm_LIBS@
+dvidir = @dvidir@
+egl_CFLAGS = @egl_CFLAGS@
+egl_LIBS = @egl_LIBS@
+exec_prefix = @exec_prefix@
+gallium_DIR = @gallium_DIR@
+gl_CFLAGS = @gl_CFLAGS@
+gl_LIBS = @gl_LIBS@
+glesv2_CFLAGS = @glesv2_CFLAGS@
+glesv2_LIBS = @glesv2_LIBS@
+glib_CFLAGS = @glib_CFLAGS@
+glib_LIBS = @glib_LIBS@
+gtk_CFLAGS = @gtk_CFLAGS@
+gtk_LIBS = @gtk_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mesa_DIR = @mesa_DIR@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pixman_CFLAGS = @pixman_CFLAGS@
+pixman_LIBS = @pixman_LIBS@
+png_CFLAGS = @png_CFLAGS@
+png_LIBS = @png_LIBS@
+png_REQUIRES = @png_REQUIRES@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pthread_CFLAGS = @pthread_CFLAGS@
+pthread_LIBS = @pthread_LIBS@
+qt_CFLAGS = @qt_CFLAGS@
+qt_LIBS = @qt_LIBS@
+real_pthread_CFLAGS = @real_pthread_CFLAGS@
+real_pthread_LIBS = @real_pthread_LIBS@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shm_LIBS = @shm_LIBS@
+skia_DIR = @skia_DIR@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+xcb_CFLAGS = @xcb_CFLAGS@
+xcb_LIBS = @xcb_LIBS@
+xcb_shm_CFLAGS = @xcb_shm_CFLAGS@
+xcb_shm_LIBS = @xcb_shm_LIBS@
+xlib_CFLAGS = @xlib_CFLAGS@
+xlib_LIBS = @xlib_LIBS@
+xlib_xcb_CFLAGS = @xlib_xcb_CFLAGS@
+xlib_xcb_LIBS = @xlib_xcb_LIBS@
+xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@
+xlib_xrender_LIBS = @xlib_xrender_LIBS@
+BUILT_SOURCES = 
+CLEANFILES = *.i *.s *.gch $(EXTRA_LTLIBRARIES) $(EXTRA_PROGRAMS) \
+       $(check_PROGRAMS)
+DISTCLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = 
+EXTRA_LTLIBRARIES = 
+MAINTAINERCLEANFILES = Makefile.in
+libcairo_perf_micro_sources = \
+       cairo-perf-cover.c      \
+       box-outline.c           \
+       composite-checker.c     \
+       disjoint.c              \
+       fill.c                  \
+       hatching.c              \
+       hash-table.c            \
+       line.c                  \
+       a1-line.c               \
+       long-lines.c            \
+       mosaic.c                \
+       paint.c                 \
+       paint-with-alpha.c      \
+       mask.c                  \
+       pattern_create_radial.c \
+       rectangles.c            \
+       rounded-rectangles.c    \
+       stroke.c                \
+       subimage_copy.c         \
+       tessellate.c            \
+       text.c                  \
+       tiger.c                 \
+       glyphs.c                \
+       twin.c                  \
+       unaligned-clip.c        \
+       wave.c                  \
+       world-map.c             \
+       zrusin.c                \
+       long-dashed-lines.c     \
+       dragon.c                \
+       pythagoras-tree.c       \
+       intersections.c         \
+       many-strokes.c          \
+       wide-strokes.c          \
+       many-fills.c            \
+       wide-fills.c            \
+       many-curves.c           \
+       curve.c                 \
+       a1-curve.c              \
+       spiral.c                \
+       pixel.c                 \
+       sierpinski.c            \
+       fill-clip.c             \
+       $(NULL)
+
+libcairo_perf_micro_headers = \
+       mosaic.h                \
+       world-map.h             \
+       zrusin-another.h        \
+       $(NULL)
+
+noinst_LTLIBRARIES = libcairo-perf-micro.la
+libcairo_perf_micro_la_SOURCES = \
+       $(libcairo_perf_micro_sources)  \
+       $(libcairo_perf_micro_headers)
+
+AM_CPPFLAGS = \
+       -I$(srcdir)                     \
+       -I$(top_srcdir)/boilerplate     \
+       -I$(top_srcdir)/src             \
+       -I$(top_srcdir)/perf            \
+       -I$(top_builddir)/src           \
+       $(CAIRO_CFLAGS)
+
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/build/Makefile.am.common $(top_srcdir)/perf/micro/Makefile.sources $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign perf/micro/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign perf/micro/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libcairo-perf-micro.la: $(libcairo_perf_micro_la_OBJECTS) $(libcairo_perf_micro_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libcairo_perf_micro_la_OBJECTS) $(libcairo_perf_micro_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/a1-curve.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/a1-line.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/box-outline.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-perf-cover.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/composite-checker.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disjoint.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dragon.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fill-clip.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fill.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glyphs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-table.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hatching.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intersections.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/line.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/long-dashed-lines.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/long-lines.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/many-curves.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/many-fills.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/many-strokes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mask.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mosaic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paint-with-alpha.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paint.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pattern_create_radial.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pythagoras-tree.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rectangles.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rounded-rectangles.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sierpinski.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spiral.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stroke.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subimage_copy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tessellate.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiger.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unaligned-clip.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wave.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wide-fills.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wide-strokes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/world-map.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zrusin.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       $(am__tty_colors); \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=XPASS; \
+             ;; \
+             *) \
+               col=$$grn; res=PASS; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               col=$$lgn; res=XFAIL; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=FAIL; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             col=$$blu; res=SKIP; \
+           fi; \
+           echo "$${col}$$res$${std}: $$tst"; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         if test "$$failed" -eq 0; then \
+           echo "$$grn$$dashes"; \
+         else \
+           echo "$$red$$dashes"; \
+         fi; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes$$std"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
index 594c46d..5fbaf24 100644 (file)
@@ -45,7 +45,11 @@ do_curve_stroke (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 2.);
     cairo_perf_timer_start ();
 
+    cairo_perf_set_thread_aware (cr, FALSE);
+
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        double x1 = uniform_random (0, width);
        double x2 = uniform_random (0, width);
        double x3 = uniform_random (0, width);
@@ -67,8 +71,12 @@ do_curve_fill (cairo_t *cr, int width, int height, int loops)
 {
     state = 0xc0ffee;
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
+
        double x0 = uniform_random (0, width);
        double x1 = uniform_random (0, width);
        double x2 = uniform_random (0, width);
index ae86602..98fd17d 100644 (file)
@@ -35,9 +35,13 @@ horizontal (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, width, h);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -69,9 +73,13 @@ nearly_horizontal (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, width, h+1);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -104,9 +112,13 @@ vertical (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, w, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -138,9 +150,13 @@ nearly_vertical (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, w+1, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -171,9 +187,13 @@ diagonal (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, width, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index 1e654eb..6c2a382 100644 (file)
@@ -53,9 +53,13 @@ box_outline_stroke (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgb (cr, 1, 0, 0); /* red */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -77,9 +81,13 @@ box_outline_alpha_stroke (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgba (cr, 1, 0, 0, .5); /* red */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -102,9 +110,13 @@ box_outline_aa_stroke (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgb (cr, 1, 0, 0); /* red */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -129,9 +141,13 @@ box_outline_fill (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgb (cr, 0, 1, 0); /* green */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -156,9 +172,13 @@ box_outline_alpha_fill (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgba (cr, 0, 1, 0, .5); /* green */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -184,9 +204,13 @@ box_outline_aa_fill (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgb (cr, 0, 1, 0); /* green */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index d6d17ab..ac745f2 100644 (file)
@@ -58,8 +58,11 @@ do_composite_checker (cairo_t *cr,
     double yscale = height / (double) SRC_SIZE;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        /* Fill the surface with our background. */
        cairo_identity_matrix (cr);
        cairo_set_source (cr, checkerboard);
index 3b5a163..5bb2d20 100644 (file)
@@ -44,8 +44,11 @@ do_curve_stroke (cairo_t *cr, int width, int height, int loops)
     state = 0xc0ffee;
     cairo_set_line_width (cr, 2.);
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        double x1 = uniform_random (0, width);
        double x2 = uniform_random (0, width);
        double x3 = uniform_random (0, width);
@@ -67,8 +70,11 @@ do_curve_fill (cairo_t *cr, int width, int height, int loops)
 {
     state = 0xc0ffee;
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        double x0 = uniform_random (0, width);
        double x1 = uniform_random (0, width);
        double x2 = uniform_random (0, width);
index 623eb6f..d62c87a 100644 (file)
@@ -71,13 +71,17 @@ draw (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgb (cr, 1, 0, 0);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
     while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_save (cr);
        clip (cr, width, height);
        path (cr, width, height);
        cairo_fill (cr);
        cairo_restore (cr);
     }
+
     cairo_perf_timer_stop ();
 
     cairo_restore (cr);
index e215eac..7036599 100644 (file)
@@ -104,8 +104,11 @@ do_dragon (cairo_t *cr, int width, int height, int loops)
     r = .5 * MIN (width, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        pattern = cairo_pattern_create_radial (cx, cy, 0., cx, cy, r);
        cairo_pattern_add_color_stop_rgb (pattern, 0., .0, .0, .0);
        cairo_pattern_add_color_stop_rgb (pattern, 0.25, .5, .4, .4);
@@ -169,8 +172,11 @@ do_dragon_solid (cairo_t *cr, int width, int height, int loops)
     cx = cy = .5 * MAX (width, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_paint (cr);
 
index 2d014ac..149445c 100644 (file)
@@ -37,8 +37,11 @@ clip_paint (cairo_t *cr, int width, int height, int loops)
     int y = height/4, h = height/2;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_reset_clip (cr);
        cairo_rectangle (cr, x, y, w, h);
        cairo_clip (cr);
@@ -57,8 +60,11 @@ rect_fill (cairo_t *cr, int width, int height, int loops)
     int y = height/4, h = height/2;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_rectangle (cr, x, y, w, h);
        cairo_fill (cr);
     }
@@ -95,8 +101,11 @@ direct (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        pixman_fill ((uint32_t *)data, stride / sizeof(uint32_t), bpp,
                     x, y, w, h,
                     -1);
index d356c26..7f24702 100644 (file)
@@ -34,9 +34,13 @@ do_fill (cairo_t *cr, int width, int height, int loops)
               0, 2 * M_PI);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -73,9 +77,13 @@ do_fill_annuli (cairo_t *cr, int width, int height, int loops)
               2 * M_PI, 0);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -96,9 +104,13 @@ do_fill_eo_noaa (cairo_t *cr, int width, int height, int loops)
               0, 2 * M_PI);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index 5f088b2..ebabd9a 100644 (file)
@@ -71,8 +71,11 @@ do_glyphs (double font_size,
                                     &extents);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        y = 0;
        do {
            x = 0;
index d162917..a08f3ef 100644 (file)
@@ -81,8 +81,11 @@ do_hash_table (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE); 
        m.xx += 1.0;
 
        /* Generate ITER new scaled fonts per loop */
index b51acec..006ca57 100644 (file)
@@ -95,6 +95,7 @@ draw (cairo_t *cr,
     prepare (cr);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
     while (loops--) {
        cairo_save (cr);
        transform (cr, width, height);
@@ -102,6 +103,9 @@ draw (cairo_t *cr,
        op (cr);
        cairo_restore (cr);
     }
+
+    cairo_perf_set_thread_aware (cr, TRUE);
+
     cairo_perf_timer_stop ();
 
     cairo_restore (cr);
index 57931fa..c4dded0 100644 (file)
@@ -68,8 +68,12 @@ draw_random (cairo_t *cr, cairo_fill_rule_t fill_rule,
     cairo_close_path (cr);
 
     cairo_perf_timer_start ();
-    while (loops--)
+    cairo_perf_set_thread_aware (cr, FALSE);
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
         cairo_fill_preserve (cr);
+    }
     cairo_perf_timer_stop ();
 
     cairo_restore (cr);
@@ -110,8 +114,13 @@ draw_random_curve (cairo_t *cr, cairo_fill_rule_t fill_rule,
     cairo_close_path (cr);
 
     cairo_perf_timer_start ();
-    while (loops--)
+    cairo_perf_set_thread_aware (cr, FALSE);
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
         cairo_fill_preserve (cr);
+    }
+
     cairo_perf_timer_stop ();
 
     cairo_restore (cr);
index 3ed5f8d..44dedf2 100644 (file)
@@ -35,9 +35,13 @@ horizontal (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, width, h);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -69,9 +73,13 @@ nearly_horizontal (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, width, h+1);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -104,9 +112,13 @@ vertical (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, w, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -138,9 +150,13 @@ nearly_vertical (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, w+1, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -171,9 +187,13 @@ diagonal (cairo_t *cr, int width, int height, int loops)
     cairo_line_to (cr, width, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index ba66a4a..d7a60d3 100644 (file)
@@ -50,9 +50,13 @@ do_long_dashed_lines (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index a0d134c..632ed9b 100644 (file)
@@ -71,8 +71,11 @@ do_long_lines (cairo_t *cr, int width, int height, int loops, long_lines_crop_t
     dy = outer_height / NUM_LINES;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        for (i = 0; i <= NUM_LINES; i++) {
            cairo_move_to (cr, 0, 0);
            cairo_line_to (cr, x, min_y);
index f985d34..acdf202 100644 (file)
@@ -56,9 +56,13 @@ do_many_curves_stroked (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -107,9 +111,13 @@ do_many_curves_filled (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index 9d3fd64..421771d 100644 (file)
@@ -58,9 +58,13 @@ do_many_fills_ha (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -82,9 +86,13 @@ do_many_fills_h (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -106,9 +114,13 @@ do_many_fills_va (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -130,9 +142,13 @@ do_many_fills_v (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -159,9 +175,13 @@ do_many_fills (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index 9aeb393..1067088 100644 (file)
@@ -53,9 +53,13 @@ do_many_strokes_ha (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 1.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -79,9 +83,13 @@ do_many_strokes_h (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 1.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -105,9 +113,13 @@ do_many_strokes_va (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 1.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -131,9 +143,13 @@ do_many_strokes_v (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 1.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -158,9 +174,13 @@ do_many_strokes (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 1.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index 11a3ba7..f3215f3 100644 (file)
@@ -35,9 +35,13 @@ do_mask_solid (cairo_t *cr, int width, int height, int loops)
     mask = cairo_pattern_create_rgba (0, 0, 0, .5);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -83,9 +87,13 @@ do_mask_image (cairo_t *cr, int width, int height, int loops)
     cairo_surface_destroy (surface);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -110,9 +118,13 @@ do_mask_image_half (cairo_t *cr, int width, int height, int loops)
     cairo_pattern_set_matrix (mask, &matrix);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -137,9 +149,13 @@ do_mask_image_double (cairo_t *cr, int width, int height, int loops)
     cairo_pattern_set_matrix (mask, &matrix);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -162,9 +178,13 @@ do_mask_similar (cairo_t *cr, int width, int height, int loops)
     cairo_surface_destroy (surface);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -190,9 +210,13 @@ do_mask_similar_half (cairo_t *cr, int width, int height, int loops)
     cairo_pattern_set_matrix (mask, &matrix);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -218,9 +242,13 @@ do_mask_similar_double (cairo_t *cr, int width, int height, int loops)
     cairo_pattern_set_matrix (mask, &matrix);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -239,9 +267,13 @@ do_mask_linear (cairo_t *cr, int width, int height, int loops)
     cairo_pattern_add_color_stop_rgba (mask, 0.0, 0, 0, 0, 1.0); /* 100% */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -261,9 +293,13 @@ do_mask_radial (cairo_t *cr, int width, int height, int loops)
     cairo_pattern_add_color_stop_rgba (mask, 0.0, 0, 0, 0, 1.0); /* 100% */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_mask (cr, mask);
+    }
 
     cairo_perf_timer_stop ();
 
index ed30ae5..7da7dbf 100644 (file)
@@ -118,7 +118,10 @@ mosaic_perform(cairo_t *cr, unsigned flags, int width, int height, int loops)
      * tessellating them as dictated by the flags.  */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        mosaic_region_iter_init (&iter, flags & MOSAIC_CURVE_TO);
        while (mosaic_next_path (cr, &iter)) {
            if (flags & MOSAIC_FILL) {
@@ -131,6 +134,7 @@ mosaic_perform(cairo_t *cr, unsigned flags, int width, int height, int loops)
            }
        }
     }
+
     cairo_perf_timer_stop ();
 
     return cairo_perf_timer_elapsed ();
index 047e35c..b0f35fb 100644 (file)
@@ -29,9 +29,13 @@ static cairo_time_t
 do_paint_with_alpha (cairo_t *cr, int width, int height, int loops)
 {
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_paint_with_alpha (cr, 0.5);
+    }
 
     cairo_perf_timer_stop ();
 
index 2a59a45..87b0096 100644 (file)
@@ -29,9 +29,13 @@ static cairo_time_t
 do_paint (cairo_t *cr, int width, int height, int loops)
 {
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_paint (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index f236ef5..bbb766f 100644 (file)
@@ -59,11 +59,15 @@ static cairo_time_t
 do_pattern_create_radial (cairo_t *cr, int width, int height, int loops)
 {
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
        cairo_pattern_t *pattern;
        int i;
 
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
+
        for (i = 0; i < RADIALS_COUNT; i++) {
            pattern =
                cairo_pattern_create_radial (radials[i].cx0, radials[i].cy0,
index 9d3ca11..3bb1506 100644 (file)
@@ -64,8 +64,11 @@ do_pythagoras_tree (cairo_t *cr, int width, int height, int loops)
     double size = 128;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE); 
        cairo_save (cr);
        cairo_translate (cr, 0, height);
        cairo_scale (cr, 1, -1);
index 9228a4e..d936cdb 100644 (file)
@@ -45,8 +45,11 @@ do_rectangles (cairo_t *cr, int width, int height, int loops)
     int i;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        for (i = 0; i < RECTANGLE_COUNT; i++) {
            cairo_rectangle (cr, rects[i].x, rects[i].y,
                             rects[i].width, rects[i].height);
@@ -65,8 +68,11 @@ do_rectangles_once (cairo_t *cr, int width, int height, int loops)
     int i;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        for (i = 0; i < RECTANGLE_COUNT; i++) {
            cairo_rectangle (cr, rects[i].x, rects[i].y,
                             rects[i].width, rects[i].height);
@@ -84,8 +90,11 @@ static cairo_time_t
 do_rectangle (cairo_t *cr, int width, int height, int loops)
 {
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_rectangle (cr, 0, 0, width, height);
        cairo_fill (cr);
     }
index 1e432dd..b71021a 100644 (file)
@@ -64,8 +64,11 @@ static cairo_time_t
 do_rectangle (cairo_t *cr, int width, int height, int loops)
 {
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        rounded_rectangle (cr, 0, 0, width, height, 3.0);
        cairo_fill (cr);
     }
@@ -81,8 +84,11 @@ do_rectangles (cairo_t *cr, int width, int height, int loops)
     int i;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        for (i = 0; i < RECTANGLE_COUNT; i++) {
            rounded_rectangle (cr,
                               rects[i].x, rects[i].y,
@@ -103,8 +109,11 @@ do_rectangles_once (cairo_t *cr, int width, int height, int loops)
     int i;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        for (i = 0; i < RECTANGLE_COUNT; i++) {
            rounded_rectangle (cr,
                               rects[i].x, rects[i].y,
index c6f5fad..1231c2b 100644 (file)
@@ -62,8 +62,11 @@ draw (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 1.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_save (cr);
        T (cr, t_width);
 
index 87dbcb5..f266066 100644 (file)
@@ -97,8 +97,13 @@ draw_spiral (cairo_t *cr,
     cairo_close_path (cr);
 
     cairo_perf_timer_start ();
-    while (loops--)
+    cairo_perf_set_thread_aware (cr, FALSE);
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
         cairo_fill_preserve (cr);
+    }
+
     cairo_perf_timer_stop ();
 
     cairo_restore (cr);
@@ -133,8 +138,13 @@ draw_spiral_box (cairo_t *cr,
     }
 
     cairo_perf_timer_start ();
-    while (loops--)
+    cairo_perf_set_thread_aware (cr, FALSE);
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
         cairo_fill_preserve (cr);
+    }
+
     cairo_perf_timer_stop ();
 
     cairo_restore (cr);
@@ -188,8 +198,13 @@ draw_spiral_stroke (cairo_t *cr,
     }
 
     cairo_perf_timer_start ();
-    while (loops--)
+    cairo_perf_set_thread_aware (cr, FALSE);
+    while (loops--) {
+       if (loops == 0)
+           cairo_perf_set_thread_aware (cr, TRUE);
         cairo_stroke_preserve (cr);
+    }
+
     cairo_perf_timer_stop ();
 
     cairo_restore (cr);
index 4b29547..194074b 100644 (file)
@@ -37,9 +37,13 @@ do_stroke (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, width/5.0);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -75,9 +79,13 @@ do_strokes (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 2.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index e749c06..a828a0b 100644 (file)
@@ -41,9 +41,13 @@ do_subimage_copy (cairo_t *cr, int width, int height, int loops)
     cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index b6277fe..f6c836a 100644 (file)
@@ -107,14 +107,18 @@ do_tessellate (cairo_t *cr, int num_points, int loops)
        cairo_line_to (cr, points[i].x, points[i].y);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     /* We'd like to measure just tessellation without
      * rasterization. For now, we can do that with cairo_in_fill. But
      * we'll have to be careful since cairo_in_fill might eventually
      * be optimized to have an implementation that doesn't necessarily
      * include tessellation. */
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_in_fill (cr, 50, 50);
+    }
 
     cairo_perf_timer_stop ();
 
index cdb3199..da0ccc7 100644 (file)
@@ -36,8 +36,11 @@ do_text (cairo_t *cr, int width, int height, int loops)
     cairo_set_font_size (cr, 9);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        do {
            cairo_move_to (cr, 0, j++ * 10);
            cairo_show_text (cr, text + i);
index 9e7a941..613f6e0 100644 (file)
@@ -38,8 +38,11 @@ do_tiger (cairo_t *cr, int width, int height, int loops)
     unsigned int i;
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_identity_matrix (cr);
 
        cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
index 99433bd..1f7fd6c 100644 (file)
@@ -22,8 +22,11 @@ do_twin (cairo_t *cr,
                            CAIRO_FONT_WEIGHT_NORMAL);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        h = 2;
        for (i = 8; i < 48; i >= 24 ? i+=3 : i++) {
            cairo_set_font_size (cr, i);
index 41e327f..a5da5c6 100644 (file)
@@ -32,8 +32,11 @@ static cairo_time_t
 do_unaligned_clip (cairo_t *cr, int width, int height, int loops)
 {
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_save (cr);
 
        /* First a triangular clip that obviously isn't along device-pixel
@@ -55,6 +58,7 @@ do_unaligned_clip (cairo_t *cr, int width, int height, int loops)
 
        cairo_restore (cr);
     }
+
     cairo_perf_timer_stop ();
 
     return cairo_perf_timer_elapsed ();
index f6e6f74..f8e9783 100644 (file)
@@ -66,8 +66,11 @@ do_wave (cairo_t *cr, int width, int height, int loops)
     wave = generate_random_waveform (cr, width, height);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        /* paint outline (and contents) */
        cairo_set_source_rgb (cr, 1, 0, 0);
        cairo_mask_surface (cr, wave, 0, 0);
index 0747e6e..4ae8a0e 100644 (file)
@@ -58,9 +58,13 @@ do_wide_fills_ha (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -82,9 +86,13 @@ do_wide_fills_h (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -106,9 +114,13 @@ do_wide_fills_va (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -130,9 +142,13 @@ do_wide_fills_v (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -159,9 +175,13 @@ do_wide_fills (cairo_t *cr, int width, int height, int loops)
     }
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index 1413091..a122894 100644 (file)
@@ -53,9 +53,13 @@ do_wide_strokes_ha (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 5.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -79,9 +83,13 @@ do_wide_strokes_h (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 5.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -105,9 +113,13 @@ do_wide_strokes_va (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 5.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -131,9 +143,13 @@ do_wide_strokes_v (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 5.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -158,9 +174,13 @@ do_wide_strokes (cairo_t *cr, int width, int height, int loops)
     cairo_set_line_width (cr, 5.);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_stroke_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
index ff22eeb..c240c3b 100644 (file)
@@ -62,8 +62,11 @@ do_world_map (cairo_t *cr, int width, int height, int loops, int mode)
     cairo_set_line_width (cr, 0.2);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_set_source_rgb (cr, .68, .85, .90); /* lightblue */
        cairo_rectangle (cr, 0, 0, 800, 400);
        cairo_fill (cr);
index 7d8b004..aeb9b7a 100644 (file)
@@ -50,14 +50,18 @@ zrusin_another_tessellate (cairo_t *cr, int width, int height, int loops)
     zrusin_another_path (cr);
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
     /* We'd like to measure just tessellation without
      * rasterization. For now, we can do that with cairo_in_fill. But
      * we'll have to be careful since cairo_in_fill might eventually
      * be optimized to have an implementation that doesn't necessarily
      * include tessellation. */
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_in_fill (cr, 50, 50);
+    }
 
     cairo_perf_timer_stop ();
 
@@ -73,9 +77,13 @@ zrusin_another_fill (cairo_t *cr, int width, int height, int loops)
     cairo_set_source_rgb (cr, 0.0, 0.0, 0.8); /* blue */
 
     cairo_perf_timer_start ();
+    cairo_perf_set_thread_aware (cr, FALSE);
 
-    while (loops--)
+    while (loops--) {
+       if (loops == 0)
+               cairo_perf_set_thread_aware (cr, TRUE);
        cairo_fill_preserve (cr);
+    }
 
     cairo_perf_timer_stop ();
 
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644 (file)
index 0000000..fd53c86
--- /dev/null
@@ -0,0 +1,33 @@
+.deps
+.libs
+Makefile
+Makefile.in
+Makefile.am.features
+#Makefile.win32.features
+*.gcda
+*.gcno
+*.la
+*.lo
+*.loT
+*.pc
+cairo-features.h
+cairo-supported-features.h
+cairo.def
+*.i
+*.s
+*.o
+*.obj
+*.pdb
+*.dll
+*.manifest
+*.ilk
+*.exp
+*.lib
+*~
+.*.sw?
+TAGS
+tags
+check-has-hidden-symbols.i
+check-link
+check-skiplist
+headers-standalone
index ef01abb..acf0a82 100644 (file)
@@ -89,7 +89,7 @@ TESTS_ENVIRONMENT = \
        $(NULL)
 TESTS_SH = \
        check-def.sh \
-       check-doc-syntax.sh\
+       check-doc-syntax.sh \
        check-headers.sh \
        check-plt.sh \
        check-preprocessor-syntax.sh \
@@ -100,7 +100,7 @@ else
 TESTS += check-link$(EXEEXT)
 endif
 
-EXTRA_DIST += $(TESTS_SH) check-has-hidden-symbols.c
+EXTRA_DIST += $(TESTS_SH) check-has-hidden-symbols.c check-doc-syntax.awk
 check_PROGRAMS += check-link
 check_link_LDADD = libcairo.la
 
index 2320f29..0bf9cd9 100644 (file)
@@ -57,17 +57,21 @@ cairo_private = \
        cairo-array-private.h \
        cairo-atomic-private.h \
        cairo-backend-private.h \
-       cairo-box-private.h \
+       cairo-box-inline.h \
        cairo-boxes-private.h \
        cairo-cache-private.h \
+       cairo-clip-inline.h \
        cairo-clip-private.h \
-       cairo-combsort-private.h \
+       cairo-combsort-inline.h \
        cairo-compiler-private.h \
        cairo-compositor-private.h \
+       cairo-contour-inline.h \
        cairo-contour-private.h \
        cairo-composite-rectangles-private.h \
+       cairo-damage-private.h \
        cairo-default-context-private.h \
        cairo-device-private.h \
+       cairo-error-inline.h \
        cairo-error-private.h \
        cairo-fixed-private.h \
        cairo-fixed-type-private.h \
@@ -78,7 +82,9 @@ cairo_private = \
        cairo-gstate-private.h \
        cairo-hash-private.h \
        cairo-image-info-private.h \
+       cairo-image-surface-inline.h \
        cairo-image-surface-private.h \
+       cairo-list-inline.h \
        cairo-list-private.h \
        cairo-malloc-private.h \
        cairo-mutex-impl-private.h \
@@ -90,8 +96,10 @@ cairo_private = \
        cairo-paginated-surface-private.h \
        cairo-path-fixed-private.h \
        cairo-path-private.h \
+       cairo-pattern-inline.h \
        cairo-pattern-private.h \
        cairo-private.h \
+       cairo-recording-surface-inline.h \
        cairo-recording-surface-private.h \
        cairo-reference-count-private.h \
        cairo-region-private.h \
@@ -101,13 +109,17 @@ cairo_private = \
        cairo-spans-private.h \
        cairo-spans-compositor-private.h \
        cairo-stroke-dash-private.h \
+       cairo-surface-inline.h \
        cairo-surface-private.h \
        cairo-surface-backend-private.h \
        cairo-surface-clipper-private.h \
        cairo-surface-fallback-private.h \
+       cairo-surface-observer-inline.h \
        cairo-surface-observer-private.h \
        cairo-surface-offset-private.h \
+       cairo-surface-subsurface-inline.h \
        cairo-surface-subsurface-private.h \
+       cairo-surface-snapshot-inline.h \
        cairo-surface-snapshot-private.h \
        cairo-surface-wrapper-private.h \
        cairo-time-private.h \
@@ -142,6 +154,7 @@ cairo_sources = \
        cairo-composite-rectangles.c \
        cairo-compositor.c \
        cairo-contour.c \
+       cairo-damage.c \
        cairo-debug.c \
        cairo-default-context.c \
        cairo-device.c \
@@ -165,7 +178,6 @@ cairo_sources = \
        cairo-matrix.c \
        cairo-mask-compositor.c \
        cairo-mesh-pattern-rasterizer.c \
-       cairo-mime-surface.c \
        cairo-misc.c \
        cairo-mono-scan-converter.c \
        cairo-mutex.c \
@@ -187,12 +199,14 @@ cairo_sources = \
        cairo-polygon.c \
        cairo-polygon-intersect.c \
        cairo-polygon-reduce.c \
+       cairo-raster-source-pattern.c \
        cairo-recording-surface.c \
        cairo-rectangle.c \
        cairo-rectangular-scan-converter.c \
        cairo-region.c \
        cairo-rtree.c \
        cairo-scaled-font.c \
+       cairo-shape-mask-compositor.c \
        cairo-slope.c \
        cairo-spans.c \
        cairo-spans-compositor.c \
@@ -207,7 +221,6 @@ cairo_sources = \
        cairo-surface-snapshot.c \
        cairo-surface-subsurface.c \
        cairo-surface-wrapper.c \
-       cairo-system.c \
        cairo-time.c \
        cairo-tor-scan-converter.c \
        cairo-tor22-scan-converter.c \
@@ -332,12 +345,22 @@ cairo_quartz_image_sources = cairo-quartz-image-surface.c
 cairo_quartz_font_sources = cairo-quartz-font.c
 
 cairo_win32_headers = cairo-win32.h
-cairo_win32_private = cairo-win32-private.h
-cairo_win32_sources = cairo-win32-surface.c cairo-win32-printing-surface.c
-
-cairo_win32_font_sources = cairo-win32-font.c
+cairo_win32_private = win32/cairo-win32-private.h
+cairo_win32_sources = \
+       win32/cairo-win32-debug.c \
+       win32/cairo-win32-device.c \
+       win32/cairo-win32-gdi-compositor.c \
+       win32/cairo-win32-system.c \
+       win32/cairo-win32-surface.c \
+       win32/cairo-win32-display-surface.c \
+       win32/cairo-win32-printing-surface.c \
+       $(NULL)
+cairo_win32_font_sources = \
+       win32/cairo-win32-font.c \
+       $(NULL)
 
 cairo_skia_headers = cairo-skia.h
+cairo_skia_private = skia/cairo-skia-private.h
 cairo_skia_cxx_sources = \
        skia/cairo-skia-context.cpp \
        skia/cairo-skia-surface.cpp \
@@ -366,8 +389,11 @@ cairo_gl_sources = cairo-gl-composite.c \
                   cairo-gl-info.c \
                   cairo-gl-operand.c \
                   cairo-gl-shaders.c \
+                  cairo-gl-hairline-stroke.c \
+                  cairo-gl-msaa-compositor.c \
                   cairo-gl-spans-compositor.c \
                   cairo-gl-traps-compositor.c \
+                  cairo-gl-source.c \
                   cairo-gl-surface.c
 
 cairo_glesv2_headers = $(cairo_gl_headers)
@@ -427,3 +453,13 @@ cairo_xml_sources = cairo-xml-surface.c
 
 cairo_vg_headers = cairo-vg.h
 cairo_vg_sources = cairo-vg-surface.c
+
+cairo_cogl_headers = cairo-cogl.h
+cairo_cogl_private = cairo-cogl-private.h \
+                    cairo-cogl-gradient-private.h \
+                    cairo-cogl-context-private.h \
+                    cairo-cogl-utils-private.h
+cairo_cogl_sources = cairo-cogl-surface.c \
+                    cairo-cogl-gradient.c \
+                    cairo-cogl-context.c \
+                    cairo-cogl-utils.c
index 4b90d64..2274f4a 100644 (file)
@@ -325,6 +325,22 @@ ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)
 enabled_cairo_pkgconf += cairo-glesv2.pc
 endif
 
+unsupported_cairo_headers += $(cairo_cogl_headers)
+all_cairo_headers += $(cairo_cogl_headers)
+all_cairo_private += $(cairo_cogl_private)
+all_cairo_cxx_sources += $(cairo_cogl_cxx_sources)
+all_cairo_sources += $(cairo_cogl_sources)
+ifeq ($(CAIRO_HAS_COGL_SURFACE),1)
+enabled_cairo_headers += $(cairo_cogl_headers)
+enabled_cairo_private += $(cairo_cogl_private)
+enabled_cairo_cxx_sources += $(cairo_cogl_cxx_sources)
+enabled_cairo_sources += $(cairo_cogl_sources)
+endif
+all_cairo_pkgconf += cairo-cogl.pc
+ifeq ($(CAIRO_HAS_COGL_SURFACE),1)
+enabled_cairo_pkgconf += cairo-cogl.pc
+endif
+
 unsupported_cairo_headers += $(cairo_directfb_headers)
 all_cairo_headers += $(cairo_directfb_headers)
 all_cairo_private += $(cairo_directfb_private)
index d9edcd7..8516094 100644 (file)
 #include "cairoint.h"
 
 #include "cairo-analysis-surface-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
 #include "cairo-paginated-private.h"
-#include "cairo-recording-surface-private.h"
-#include "cairo-surface-snapshot-private.h"
-#include "cairo-surface-subsurface-private.h"
+#include "cairo-recording-surface-inline.h"
+#include "cairo-surface-snapshot-inline.h"
+#include "cairo-surface-subsurface-inline.h"
 #include "cairo-region-private.h"
 
 typedef struct {
@@ -170,11 +171,7 @@ _analyze_recording_surface_pattern (cairo_analysis_surface_t *surface,
     cairo_matrix_multiply (&tmp->ctm, &p2d, &surface->ctm);
     tmp->has_ctm = ! _cairo_matrix_is_identity (&tmp->ctm);
 
-    if (_cairo_surface_is_snapshot (source))
-       source = _cairo_surface_snapshot_get_target (source);
-    if (_cairo_surface_is_subsurface (source))
-       source = _cairo_surface_subsurface_get_target (source);
-
+    source = _cairo_surface_get_source (source, NULL);
     status = _cairo_recording_surface_replay_and_create_regions (source,
                                                                 &tmp->base);
     analysis_status = tmp->has_unsupported ? CAIRO_INT_STATUS_IMAGE_FALLBACK : CAIRO_INT_STATUS_SUCCESS;
@@ -219,6 +216,14 @@ _add_operation (cairo_analysis_surface_t *surface,
        if (_cairo_matrix_is_integer_translation (&surface->ctm, &tx, &ty)) {
            rect->x += tx;
            rect->y += ty;
+
+           tx = _cairo_fixed_from_int (tx);
+           bbox.p1.x += tx;
+           bbox.p2.x += tx;
+
+           ty = _cairo_fixed_from_int (ty);
+           bbox.p1.y += ty;
+           bbox.p2.y += ty;
        } else {
            _cairo_matrix_transform_bounding_box_fixed (&surface->ctm,
                                                        &bbox, NULL);
@@ -247,16 +252,8 @@ _add_operation (cairo_analysis_surface_t *surface,
     if (surface->first_op) {
        surface->first_op = FALSE;
        surface->page_bbox = bbox;
-    } else {
-       if (bbox.p1.x < surface->page_bbox.p1.x)
-           surface->page_bbox.p1.x = bbox.p1.x;
-       if (bbox.p1.y < surface->page_bbox.p1.y)
-           surface->page_bbox.p1.y = bbox.p1.y;
-       if (bbox.p2.x > surface->page_bbox.p2.x)
-           surface->page_bbox.p2.x = bbox.p2.x;
-       if (bbox.p2.y > surface->page_bbox.p2.y)
-           surface->page_bbox.p2.y = bbox.p2.y;
-    }
+    } else
+       _cairo_box_add_box(&surface->page_bbox, &bbox);
 
     /* If the operation is completely enclosed within the fallback
      * region there is no benefit in emitting a native operation as
@@ -411,8 +408,7 @@ _cairo_analysis_surface_mask (void                  *abstract_surface,
 
        if (source->type == CAIRO_PATTERN_TYPE_SURFACE) {
            cairo_surface_t *src_surface = ((cairo_surface_pattern_t *)source)->surface;
-           if (_cairo_surface_is_snapshot (src_surface))
-               src_surface = _cairo_surface_snapshot_get_target (src_surface);
+           src_surface = _cairo_surface_get_source (src_surface, NULL);
            if (_cairo_surface_is_recording (src_surface)) {
                backend_source_status =
                    _analyze_recording_surface_pattern (surface, source);
@@ -423,8 +419,7 @@ _cairo_analysis_surface_mask (void                  *abstract_surface,
 
        if (mask->type == CAIRO_PATTERN_TYPE_SURFACE) {
            cairo_surface_t *mask_surface = ((cairo_surface_pattern_t *)mask)->surface;
-           if (_cairo_surface_is_snapshot (mask_surface))
-               mask_surface = _cairo_surface_snapshot_get_target (mask_surface);
+           mask_surface = _cairo_surface_get_source (mask_surface, NULL);
            if (_cairo_surface_is_recording (mask_surface)) {
                backend_mask_status =
                    _analyze_recording_surface_pattern (surface, mask);
@@ -702,6 +697,7 @@ static const cairo_surface_backend_t cairo_analysis_surface_backend = {
     NULL, /* map_to_image */
     NULL, /* unmap */
 
+    NULL, /* source */
     NULL, /* acquire_source_image */
     NULL, /* release_source_image */
     NULL, /* snapshot */
@@ -895,6 +891,7 @@ static const cairo_surface_backend_t cairo_null_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image*/
 
+    NULL, /* source */
     NULL, /* acquire_source_image */
     NULL, /* release_source_image */
     NULL, /* snapshot */
index c997e5c..5cbd112 100644 (file)
@@ -133,13 +133,13 @@ _arc_segments_needed (double            angle,
 
    for some value of h.
 
-   "Approximation of circular arcs by cubic poynomials", Michael
+   "Approximation of circular arcs by cubic polynomials", Michael
    Goldapp, Computer Aided Geometric Design 8 (1991) 227-238, provides
    various values of h along with error analysis for each.
 
    From that paper, a very practical value of h is:
 
-       h = 4/3 * tan(angle/4)
+       h = 4/3 * R * tan(angle/4)
 
    This value does not give the spline with minimal error, but it does
    provide a very good approximation, (6th-order convergence), and the
@@ -217,27 +217,32 @@ _cairo_arc_in_direction (cairo_t    *cr,
     } else if (angle_max != angle_min) {
        cairo_matrix_t ctm;
        int i, segments;
-       double angle, angle_step;
+       double step;
 
        cairo_get_matrix (cr, &ctm);
        segments = _arc_segments_needed (angle_max - angle_min,
                                         radius, &ctm,
                                         cairo_get_tolerance (cr));
-       angle_step = (angle_max - angle_min) / (double) segments;
+       step = (angle_max - angle_min) / segments;
+       segments -= 1;
 
-       if (dir == CAIRO_DIRECTION_FORWARD) {
-           angle = angle_min;
-       } else {
-           angle = angle_max;
-           angle_step = - angle_step;
+       if (dir == CAIRO_DIRECTION_REVERSE) {
+           double t;
+
+           t = angle_min;
+           angle_min = angle_max;
+           angle_max = t;
+
+           step = -step;
        }
 
-       for (i = 0; i < segments; i++, angle += angle_step) {
-           _cairo_arc_segment (cr, xc, yc,
-                               radius,
-                               angle,
-                               angle + angle_step);
+       for (i = 0; i < segments; i++, angle_min += step) {
+           _cairo_arc_segment (cr, xc, yc, radius,
+                               angle_min, angle_min + step);
        }
+
+       _cairo_arc_segment (cr, xc, yc, radius,
+                           angle_min, angle_max);
     } else {
        cairo_line_to (cr,
                       xc + radius * cos (angle_min),
@@ -246,7 +251,7 @@ _cairo_arc_in_direction (cairo_t      *cr,
 }
 
 /**
- * _cairo_arc_path
+ * _cairo_arc_path:
  * @cr: a cairo context
  * @xc: X position of the center of the arc
  * @yc: Y position of the center of the arc
index 3585bee..b69d425 100644 (file)
@@ -40,7 +40,7 @@
 
 #include "cairo-boxes-private.h"
 #include "cairo-error-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 #include "cairo-list-private.h"
 #include "cairo-traps-private.h"
 
@@ -828,14 +828,12 @@ _cairo_bentley_ottmann_tessellate_boxes (const cairo_boxes_t *in,
 
                rectangles[j].right.x = box[i].p2.x;
                rectangles[j].right.dir = -1;
-           } else if (box[i].p1.x > box[i].p2.x) {
+           } else {
                rectangles[j].right.x = box[i].p1.x;
                rectangles[j].right.dir = 1;
 
                rectangles[j].left.x = box[i].p2.x;
                rectangles[j].left.dir = -1;
-           } else {
-               continue;
            }
 
            rectangles[j].left.right = NULL;
index 1edeeb5..7c0be69 100644 (file)
@@ -39,7 +39,7 @@
 #include "cairoint.h"
 
 #include "cairo-boxes-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 #include "cairo-error-private.h"
 #include "cairo-traps-private.h"
 
index f30449e..38fe463 100644 (file)
@@ -40,7 +40,7 @@
 
 #include "cairo-error-private.h"
 #include "cairo-freelist-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 #include "cairo-traps-private.h"
 
 #define DEBUG_PRINT_STATE 0
@@ -570,6 +570,13 @@ _cairo_bo_sweep_line_compare_edges (cairo_bo_sweep_line_t  *sweep_line,
 
     /* compare the edges if not identical */
     if (! _line_equal (&a->edge.line, &b->edge.line)) {
+       if (MAX (a->edge.line.p1.x, a->edge.line.p2.x) <
+           MIN (b->edge.line.p1.x, b->edge.line.p2.x))
+           return -1;
+       else if (MIN (a->edge.line.p1.x, a->edge.line.p2.x) >
+                MAX (b->edge.line.p1.x, b->edge.line.p2.x))
+           return 1;
+
        cmp = edges_compare_x_for_y (a, b, sweep_line->current_y);
        if (cmp)
            return cmp;
@@ -1078,6 +1085,10 @@ _cairo_bo_event_queue_insert_if_intersect_below_current_y (cairo_bo_event_queue_
 {
     cairo_bo_point32_t intersection;
 
+    if (MAX (left->edge.line.p1.x, left->edge.line.p2.x) <=
+       MIN (right->edge.line.p1.x, right->edge.line.p2.x))
+       return CAIRO_STATUS_SUCCESS;
+
     if (_line_equal (&left->edge.line, &right->edge.line))
        return CAIRO_STATUS_SUCCESS;
 
index 2e0f42c..c976416 100644 (file)
@@ -41,6 +41,7 @@
 #include "cairo-beos.h"
 
 #include "cairo-error-private.h"
+#include "cairo-image-surface-inline.h"
 
 #include <new>
 
@@ -61,7 +62,7 @@
  *
  * The BeOS surface is used to render cairo graphics to BeOS views 
  * and bitmaps.
- */
+ **/
 
 #define CAIRO_INT_STATUS_SUCCESS (cairo_int_status_t)(CAIRO_STATUS_SUCCESS)
 
@@ -318,7 +319,7 @@ _cairo_beos_surface_set_clip_region (cairo_beos_surface_t *surface,
        cairo_rectangle_int_t rect;
 
        cairo_region_get_rectangle (region, i, &rect);
-       // Have to substract one, because for pixman, the second coordinate
+       // Have to subtract one, because for pixman, the second coordinate
        // lies outside the rectangle.
        bregion.Include (_cairo_rectangle_to_brect (&rect));
     }
@@ -947,6 +948,8 @@ _cairo_beos_surface_create_internal (BView*   view,
  * The caller must ensure that the view does not get deleted before the surface.
  * If the view is attached to a bitmap rather than an on-screen window, use
  * cairo_beos_surface_create_for_bitmap() instead of this function.
+ *
+ * Since: TBD
  **/
 cairo_surface_t *
 cairo_beos_surface_create (BView* view)
@@ -970,6 +973,8 @@ cairo_beos_surface_create (BView* view)
  *
  * For now, only views that draw to the entire area of bmp are supported.
  * The view must already be attached to the bitmap.
+ *
+ * Since: TBD
  **/
 cairo_surface_t *
 cairo_beos_surface_create_for_bitmap (BView*   view,
index bcebcfb..515305b 100644 (file)
@@ -43,9 +43,9 @@
 #include "cairoint.h"
 
 #include "cairo-error-private.h"
-#include "cairo-list-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-freelist-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 
 #include <setjmp.h>
 
@@ -238,12 +238,12 @@ line_compute_intersection_x_for_y (const cairo_line_t *line,
  *   X = A_x + (Y - A_y) * A_dx / A_dy
  *
  * So the inequality we wish to test is:
- *   A_x + (Y - A_y) * A_dx / A_dy ??B_x + (Y - B_y) * B_dx / B_dy,
- * where ??is our inequality operator.
+ *   A_x + (Y - A_y) * A_dx / A_dy âˆ˜ B_x + (Y - B_y) * B_dx / B_dy,
+ * where âˆ˜ is our inequality operator.
  *
  * By construction, we know that A_dy and B_dy (and (Y - A_y), (Y - B_y)) are
  * all positive, so we can rearrange it thus without causing a sign change:
- *   A_dy * B_dy * (A_x - B_x) ??(Y - B_y) * B_dx * A_dy
+ *   A_dy * B_dy * (A_x - B_x) âˆ˜ (Y - B_y) * B_dx * A_dy
  *                                 - (Y - A_y) * A_dx * B_dy
  *
  * Given the assumption that all the deltas fit within 32 bits, we can compute
@@ -325,22 +325,22 @@ edges_compare_x_for_y_general (const cairo_edge_t *a,
     case HAVE_NONE:
        return 0;
     case HAVE_DX:
-       /* A_dy * B_dy * (A_x - B_x) ??0 */
+       /* A_dy * B_dy * (A_x - B_x) âˆ˜ 0 */
        return dx; /* ady * bdy is positive definite */
     case HAVE_ADX:
-       /* 0 ?? - (Y - A_y) * A_dx * B_dy */
+       /* 0 âˆ˜  - (Y - A_y) * A_dx * B_dy */
        return adx; /* bdy * (y - a->top.y) is positive definite */
     case HAVE_BDX:
-       /* 0 ??(Y - B_y) * B_dx * A_dy */
+       /* 0 âˆ˜ (Y - B_y) * B_dx * A_dy */
        return -bdx; /* ady * (y - b->top.y) is positive definite */
     case HAVE_ADX_BDX:
-       /*  0 ??(Y - B_y) * B_dx * A_dy - (Y - A_y) * A_dx * B_dy */
+       /*  0 âˆ˜ (Y - B_y) * B_dx * A_dy - (Y - A_y) * A_dx * B_dy */
        if ((adx ^ bdx) < 0) {
            return adx;
        } else if (a->line.p1.y == b->line.p1.y) { /* common origin */
            cairo_int64_t adx_bdy, bdx_ady;
 
-           /* ??A_dx * B_dy ??B_dx * A_dy */
+           /* âˆ´ A_dx * B_dy âˆ˜ B_dx * A_dy */
 
            adx_bdy = _cairo_int32x32_64_mul (adx, bdy);
            bdx_ady = _cairo_int32x32_64_mul (bdx, ady);
@@ -349,7 +349,7 @@ edges_compare_x_for_y_general (const cairo_edge_t *a,
        } else
            return _cairo_int128_cmp (A, B);
     case HAVE_DX_ADX:
-       /* A_dy * (A_x - B_x) ??- (Y - A_y) * A_dx */
+       /* A_dy * (A_x - B_x) âˆ˜ - (Y - A_y) * A_dx */
        if ((-adx ^ dx) < 0) {
            return dx;
        } else {
@@ -361,7 +361,7 @@ edges_compare_x_for_y_general (const cairo_edge_t *a,
            return _cairo_int64_cmp (ady_dx, dy_adx);
        }
     case HAVE_DX_BDX:
-       /* B_dy * (A_x - B_x) ??(Y - B_y) * B_dx */
+       /* B_dy * (A_x - B_x) âˆ˜ (Y - B_y) * B_dx */
        if ((bdx ^ dx) < 0) {
            return dx;
        } else {
@@ -389,12 +389,12 @@ edges_compare_x_for_y_general (const cairo_edge_t *a,
  *   X = A_x + (Y - A_y) * A_dx / A_dy
  *
  * So the inequality we wish to test is:
- *   A_x + (Y - A_y) * A_dx / A_dy ??X
- * where ??is our inequality operator.
+ *   A_x + (Y - A_y) * A_dx / A_dy âˆ˜ X
+ * where âˆ˜ is our inequality operator.
  *
  * By construction, we know that A_dy (and (Y - A_y)) are
  * all positive, so we can rearrange it thus without causing a sign change:
- *   (Y - A_y) * A_dx ??(X - A_x) * A_dy
+ *   (Y - A_y) * A_dx âˆ˜ (X - A_x) * A_dy
  *
  * Given the assumption that all the deltas fit within 32 bits, we can compute
  * this comparison directly using 64 bit arithmetic.
@@ -586,7 +586,7 @@ intersect_lines (const edge_t *a, const edge_t *b,
       *
       *   X = ax + t * adx = bx + s * bdx;
       *   Y = ay + t * ady = by + s * bdy;
-      *   ??t * (ady*bdx - bdy*adx) = bdx * (by - ay) + bdy * (ax - bx)
+      *   âˆ´ t * (ady*bdx - bdy*adx) = bdx * (by - ay) + bdy * (ax - bx)
       *   => t * L = R
       *
       * Therefore we can reject any intersection (under the criteria for
@@ -2128,42 +2128,6 @@ botor_add_edge (cairo_botor_scan_converter_t *self,
     return CAIRO_STATUS_SUCCESS;
 }
 
-static cairo_status_t
-_cairo_botor_scan_converter_add_edge (void             *converter,
-                                     const cairo_point_t *p1,
-                                     const cairo_point_t *p2,
-                                     int top, int bottom,
-                                     int dir)
-{
-    cairo_botor_scan_converter_t *self = converter;
-    cairo_edge_t edge;
-
-    edge.line.p1 = *p1;
-    edge.line.p2 = *p2;
-    edge.top = top;
-    edge.bottom = bottom;
-    edge.dir = dir;
-
-    return botor_add_edge (self, &edge);
-}
-
-static cairo_status_t
-_cairo_botor_scan_converter_add_polygon (void          *converter,
-                                        const cairo_polygon_t *polygon)
-{
-    cairo_botor_scan_converter_t *self = converter;
-    cairo_status_t status;
-    int i;
-
-    for (i = 0; i < polygon->num_edges; i++) {
-       status = botor_add_edge (self, &polygon->edges[i]);
-       if (unlikely (status))
-           return status;
-    }
-
-    return CAIRO_STATUS_SUCCESS;
-}
-
 static void
 _cairo_botor_scan_converter_destroy (void *converter)
 {
diff --git a/src/cairo-box-inline.h b/src/cairo-box-inline.h
new file mode 100644 (file)
index 0000000..d6b9941
--- /dev/null
@@ -0,0 +1,121 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2010 Andrea Canciani
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * Contributor(s):
+ *     Andrea Canciani <ranma42@gmail.com>
+ */
+
+#ifndef CAIRO_BOX_H
+#define CAIRO_BOX_H
+
+#include "cairo-types-private.h"
+#include "cairo-compiler-private.h"
+#include "cairo-fixed-private.h"
+
+static inline void
+_cairo_box_set (cairo_box_t *box,
+               const cairo_point_t *p1,
+               const cairo_point_t *p2)
+{
+    box->p1 = *p1;
+    box->p2 = *p2;
+}
+
+static inline void
+_cairo_box_from_integers (cairo_box_t *box, int x, int y, int w, int h)
+{
+    box->p1.x = _cairo_fixed_from_int (x);
+    box->p1.y = _cairo_fixed_from_int (y);
+    box->p2.x = _cairo_fixed_from_int (x + w);
+    box->p2.y = _cairo_fixed_from_int (y + h);
+}
+
+/* assumes box->p1 is top-left, p2 bottom-right */
+static inline void
+_cairo_box_add_point (cairo_box_t *box,
+                     const cairo_point_t *point)
+{
+    if (point->x < box->p1.x)
+       box->p1.x = point->x;
+    else if (point->x > box->p2.x)
+       box->p2.x = point->x;
+
+    if (point->y < box->p1.y)
+       box->p1.y = point->y;
+    else if (point->y > box->p2.y)
+       box->p2.y = point->y;
+}
+
+static inline void
+_cairo_box_add_box (cairo_box_t *box,
+                   const cairo_box_t *add)
+{
+    if (add->p1.x < box->p1.x)
+       box->p1.x = add->p1.x;
+    if (add->p2.x > box->p2.x)
+       box->p2.x = add->p2.x;
+
+    if (add->p1.y < box->p1.y)
+       box->p1.y = add->p1.y;
+    if (add->p2.y > box->p2.y)
+       box->p2.y = add->p2.y;
+}
+
+/* assumes box->p1 is top-left, p2 bottom-right */
+static inline cairo_bool_t
+_cairo_box_contains_point (const cairo_box_t *box,
+                          const cairo_point_t *point)
+{
+    return box->p1.x <= point->x  && point->x <= box->p2.x &&
+       box->p1.y <= point->y  && point->y <= box->p2.y;
+}
+
+static inline cairo_bool_t
+_cairo_box_is_pixel_aligned (const cairo_box_t *box)
+{
+#if CAIRO_FIXED_FRAC_BITS <= 8 && 0
+    return ((box->p1.x & CAIRO_FIXED_FRAC_MASK) << 24 |
+           (box->p1.y & CAIRO_FIXED_FRAC_MASK) << 16 |
+           (box->p2.x & CAIRO_FIXED_FRAC_MASK) << 8 |
+           (box->p2.y & CAIRO_FIXED_FRAC_MASK) << 0) == 0;
+#else /* GCC on i7 prefers this variant (bizarrely according to the profiler) */
+    cairo_fixed_t f;
+
+    f = 0;
+    f |= box->p1.x & CAIRO_FIXED_FRAC_MASK;
+    f |= box->p1.y & CAIRO_FIXED_FRAC_MASK;
+    f |= box->p2.x & CAIRO_FIXED_FRAC_MASK;
+    f |= box->p2.y & CAIRO_FIXED_FRAC_MASK;
+
+    return f == 0;
+#endif
+}
+
+#endif /* CAIRO_BOX_H */
index dd4c241..96ae663 100644 (file)
@@ -41,7 +41,7 @@
 
 #include "cairo-boxes-private.h"
 #include "cairo-error-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 #include "cairo-list-private.h"
 
 #include <setjmp.h>
index 57d1228..d1f9dfc 100644 (file)
@@ -95,14 +95,6 @@ _cairo_boxes_to_array (const cairo_boxes_t *boxes,
                       int *num_boxes,
                       cairo_bool_t force_allocation);
 
-static inline void
-_cairo_boxes_free_array (const cairo_boxes_t *boxes,
-                        cairo_box_t *box)
-{
-    if (box != boxes->chunks.base)
-       free(box);
-}
-
 cairo_private cairo_status_t
 _cairo_boxes_intersect (const cairo_boxes_t *a,
                        const cairo_boxes_t *b,
@@ -116,6 +108,11 @@ _cairo_boxes_for_each_box (cairo_boxes_t *boxes,
                           cairo_bool_t (*func) (cairo_box_t *box, void *data),
                           void *data);
 
+cairo_private cairo_status_t
+_cairo_rasterise_polygon_to_boxes (cairo_polygon_t                     *polygon,
+                                  cairo_fill_rule_t                     fill_rule,
+                                  cairo_boxes_t *boxes);
+
 cairo_private void
 _cairo_boxes_fini (cairo_boxes_t *boxes);
 
index 182601a..63b68dd 100644 (file)
@@ -33,7 +33,7 @@
 
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-boxes-private.h"
 #include "cairo-error-private.h"
 
@@ -373,6 +373,65 @@ _cairo_boxes_for_each_box (cairo_boxes_t *boxes,
     return TRUE;
 }
 
+struct cairo_box_renderer {
+    cairo_span_renderer_t base;
+    cairo_boxes_t *boxes;
+};
+
+static cairo_status_t
+span_to_boxes (void *abstract_renderer, int y, int h,
+              const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    struct cairo_box_renderer *r = abstract_renderer;
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
+    cairo_box_t box;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    box.p1.y = _cairo_fixed_from_int (y);
+    box.p2.y = _cairo_fixed_from_int (y + h);
+    do {
+       if (spans[0].coverage) {
+           box.p1.x = _cairo_fixed_from_int(spans[0].x);
+           box.p2.x = _cairo_fixed_from_int(spans[1].x);
+           status = _cairo_boxes_add (r->boxes, CAIRO_ANTIALIAS_DEFAULT, &box);
+       }
+       spans++;
+    } while (--num_spans > 1 && status == CAIRO_STATUS_SUCCESS);
+
+    return status;
+}
+
+cairo_status_t
+_cairo_rasterise_polygon_to_boxes (cairo_polygon_t                     *polygon,
+                                  cairo_fill_rule_t                     fill_rule,
+                                  cairo_boxes_t *boxes)
+{
+    struct cairo_box_renderer renderer;
+    cairo_scan_converter_t *converter;
+    cairo_int_status_t status;
+    cairo_rectangle_int_t r;
+
+    TRACE ((stderr, "%s: fill_rule=%d\n", __FUNCTION__, fill_rule));
+
+    _cairo_box_round_to_rectangle (&polygon->extents, &r);
+    converter = _cairo_mono_scan_converter_create (r.x, r.y,
+                                                  r.x + r.width,
+                                                  r.y + r.height,
+                                                  fill_rule);
+    status = _cairo_mono_scan_converter_add_polygon (converter, polygon);
+    if (unlikely (status))
+       goto cleanup_converter;
+
+    renderer.boxes = boxes;
+    renderer.base.render_rows = span_to_boxes;
+
+    status = converter->generate (converter, &renderer.base);
+cleanup_converter:
+    converter->destroy (converter);
+    return status;
+}
 
 void
 _cairo_debug_print_boxes (FILE *stream, const cairo_boxes_t *boxes)
index f42b53d..bbb4197 100644 (file)
@@ -41,7 +41,8 @@
 
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
 #include "cairo-error-private.h"
 #include "cairo-freed-pool-private.h"
@@ -82,13 +83,11 @@ _cairo_clip_contains_rectangle_box (const cairo_clip_t *clip,
     if (clip->path)
        return FALSE;
 
-    if (clip->extents.x > rect->x ||
-       clip->extents.y > rect->y ||
-       clip->extents.x + clip->extents.width  < rect->x + rect->width ||
-       clip->extents.y + clip->extents.height < rect->y + rect->height)
-    {
+    if (! _cairo_rectangle_contains_rectangle (&clip->extents, rect))
        return FALSE;
-    }
+
+    if (clip->num_boxes == 0)
+       return TRUE;
 
     /* Check for a clip-box that wholly contains the rectangle */
     for (i = 0; i < clip->num_boxes; i++) {
diff --git a/src/cairo-clip-inline.h b/src/cairo-clip-inline.h
new file mode 100644 (file)
index 0000000..a9f2326
--- /dev/null
@@ -0,0 +1,83 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Kristian Høgsberg <krh@redhat.com>
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#ifndef CAIRO_CLIP_INLINE_H
+#define CAIRO_CLIP_INLINE_H
+
+#include "cairo-clip-private.h"
+
+static inline cairo_bool_t _cairo_clip_is_all_clipped(const cairo_clip_t *clip)
+{
+    return clip == &__cairo_clip_all;
+}
+
+static inline cairo_clip_t *
+_cairo_clip_set_all_clipped (cairo_clip_t *clip)
+{
+    _cairo_clip_destroy (clip);
+    return (cairo_clip_t *) &__cairo_clip_all;
+}
+
+static inline cairo_clip_t *
+_cairo_clip_copy_intersect_rectangle (const cairo_clip_t       *clip,
+                                     const cairo_rectangle_int_t *r)
+{
+    return _cairo_clip_intersect_rectangle (_cairo_clip_copy (clip), r);
+}
+
+static inline cairo_clip_t *
+_cairo_clip_copy_intersect_clip (const cairo_clip_t *clip,
+                                const cairo_clip_t *other)
+{
+    return _cairo_clip_intersect_clip (_cairo_clip_copy (clip), other);
+}
+
+static inline void
+_cairo_clip_steal_boxes (cairo_clip_t *clip, cairo_boxes_t *boxes)
+{
+    _cairo_boxes_init_for_array (boxes, clip->boxes, clip->num_boxes);
+    clip->boxes = NULL;
+    clip->num_boxes = 0;
+}
+
+static inline void
+_cairo_clip_unsteal_boxes (cairo_clip_t *clip, cairo_boxes_t *boxes)
+{
+    clip->boxes = boxes->chunks.base;
+    clip->num_boxes = boxes->num_boxes;
+}
+
+#endif /* CAIRO_CLIP_INLINE_H */
index 0e1968d..f40faef 100644 (file)
@@ -36,6 +36,7 @@
  */
 
 #include "cairoint.h"
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
 #include "cairo-error-private.h"
 #include "cairo-freed-pool-private.h"
@@ -88,22 +89,31 @@ _cairo_clip_get_polygon (const cairo_clip_t *clip,
     if (! can_convert_to_polygon (clip))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    _cairo_polygon_init_with_clip (polygon, clip);
+    if (clip->num_boxes < 2)
+       _cairo_polygon_init_with_clip (polygon, clip);
+    else
+       _cairo_polygon_init_with_clip (polygon, NULL);
 
     clip_path = clip->path;
+    *fill_rule = clip_path->fill_rule;
+    *antialias = clip_path->antialias;
+
     status = _cairo_path_fixed_fill_to_polygon (&clip_path->path,
                                                clip_path->tolerance,
                                                polygon);
-    if (unlikely (status)) {
-       _cairo_polygon_fini (polygon);
-       return status;
+    if (unlikely (status))
+       goto err;
+
+    if (clip->num_boxes > 1) {
+       status = _cairo_polygon_intersect_with_boxes (polygon, fill_rule,
+                                                     clip->boxes, clip->num_boxes);
+       if (unlikely (status))
+           goto err;
     }
 
     polygon->limits = NULL;
     polygon->num_limits = 0;
 
-    *fill_rule = clip_path->fill_rule;
-    *antialias = clip_path->antialias;
     while ((clip_path = clip_path->prev) != NULL) {
        cairo_polygon_t next;
 
@@ -115,15 +125,17 @@ _cairo_clip_get_polygon (const cairo_clip_t *clip,
                status = _cairo_polygon_intersect (polygon, *fill_rule,
                                                   &next, clip_path->fill_rule);
        _cairo_polygon_fini (&next);
-       if (unlikely (status)) {
-           _cairo_polygon_fini (polygon);
-           return status;
-       }
+       if (unlikely (status))
+           goto err;
 
        *fill_rule = CAIRO_FILL_RULE_WINDING;
     }
 
     return CAIRO_STATUS_SUCCESS;
+
+err:
+    _cairo_polygon_fini (polygon);
+    return status;
 }
 
 cairo_bool_t
index aaf16f3..5fc05a6 100644 (file)
@@ -73,6 +73,9 @@ struct _cairo_clip {
 cairo_private cairo_clip_t *
 _cairo_clip_create (void);
 
+cairo_private cairo_clip_path_t *
+_cairo_clip_path_reference (cairo_clip_path_t *clip_path);
+
 cairo_private void
 _cairo_clip_path_destroy (cairo_clip_path_t *clip_path);
 
@@ -81,18 +84,6 @@ _cairo_clip_destroy (cairo_clip_t *clip);
 
 cairo_private extern const cairo_clip_t __cairo_clip_all;
 
-static inline cairo_bool_t _cairo_clip_is_all_clipped(const cairo_clip_t *clip)
-{
-    return clip == &__cairo_clip_all;
-}
-
-static inline cairo_clip_t *
-_cairo_clip_set_all_clipped (cairo_clip_t *clip)
-{
-    _cairo_clip_destroy (clip);
-    return (cairo_clip_t *) &__cairo_clip_all;
-}
-
 cairo_private cairo_clip_t *
 _cairo_clip_copy (const cairo_clip_t *clip);
 
@@ -100,6 +91,9 @@ cairo_private cairo_clip_t *
 _cairo_clip_copy_region (const cairo_clip_t *clip);
 
 cairo_private cairo_clip_t *
+_cairo_clip_copy_path (const cairo_clip_t *clip);
+
+cairo_private cairo_clip_t *
 _cairo_clip_translate (cairo_clip_t *clip, int tx, int ty);
 
 cairo_private cairo_clip_t *
@@ -116,25 +110,10 @@ cairo_private cairo_clip_t *
 _cairo_clip_intersect_rectangle (cairo_clip_t       *clip,
                                 const cairo_rectangle_int_t *rectangle);
 
-static inline cairo_clip_t *
-_cairo_clip_copy_intersect_rectangle (const cairo_clip_t       *clip,
-                                     const cairo_rectangle_int_t *r)
-{
-    return _cairo_clip_intersect_rectangle (_cairo_clip_copy (clip), r);
-}
-
 cairo_private cairo_clip_t *
 _cairo_clip_intersect_clip (cairo_clip_t *clip,
                            const cairo_clip_t *other);
 
-static inline cairo_clip_t *
-_cairo_clip_copy_intersect_clip (const cairo_clip_t *clip,
-                                const cairo_clip_t *other)
-{
-    return _cairo_clip_intersect_clip (_cairo_clip_copy (clip), other);
-}
-
-
 cairo_private cairo_clip_t *
 _cairo_clip_intersect_box (cairo_clip_t       *clip,
                           const cairo_box_t *box);
@@ -172,21 +151,6 @@ _cairo_clip_combine_with_surface (const cairo_clip_t *clip,
                                  cairo_surface_t *dst,
                                  int dst_x, int dst_y);
 
-static inline void
-_cairo_clip_steal_boxes (cairo_clip_t *clip, cairo_boxes_t *boxes)
-{
-    _cairo_boxes_init_for_array (boxes, clip->boxes, clip->num_boxes);
-    clip->boxes = NULL;
-    clip->num_boxes = 0;
-}
-
-static inline void
-_cairo_clip_unsteal_boxes (cairo_clip_t *clip, cairo_boxes_t *boxes)
-{
-    clip->boxes = boxes->chunks.base;
-    clip->num_boxes = boxes->num_boxes;
-}
-
 cairo_private cairo_clip_t *
 _cairo_clip_from_boxes (const cairo_boxes_t *boxes);
 
index 244e7f2..fff9724 100644 (file)
@@ -54,8 +54,8 @@ _cairo_clip_combine_with_surface (const cairo_clip_t *clip,
                                  cairo_surface_t *dst,
                                  int dst_x, int dst_y)
 {
-    cairo_clip_path_t *clip_path;
     cairo_clip_path_t *copy_path;
+    cairo_clip_path_t *clip_path;
     cairo_clip_t *copy;
     cairo_status_t status = CAIRO_STATUS_SUCCESS;
 
@@ -63,14 +63,16 @@ _cairo_clip_combine_with_surface (const cairo_clip_t *clip,
     copy_path = copy->path;
     copy->path = NULL;
 
-    if (copy_path == NULL) {
-       assert (copy->num_boxes);
+    if (copy->boxes) {
        status = _cairo_surface_paint (dst,
                                       CAIRO_OPERATOR_IN,
                                       &_cairo_pattern_white.base,
                                       copy);
     }
 
+    clip = NULL;
+    if (_cairo_clip_is_region (copy))
+       clip = copy;
     clip_path = copy_path;
     while (status == CAIRO_STATUS_SUCCESS && clip_path) {
        status = _cairo_surface_fill (dst,
@@ -80,7 +82,7 @@ _cairo_clip_combine_with_surface (const cairo_clip_t *clip,
                                      clip_path->fill_rule,
                                      clip_path->tolerance,
                                      clip_path->antialias,
-                                     copy);
+                                     clip);
        clip_path = clip_path->prev;
     }
 
@@ -89,6 +91,33 @@ _cairo_clip_combine_with_surface (const cairo_clip_t *clip,
     return status;
 }
 
+static cairo_status_t
+_cairo_path_fixed_add_box (cairo_path_fixed_t *path,
+                          const cairo_box_t *box,
+                          cairo_fixed_t fx,
+                          cairo_fixed_t fy)
+{
+    cairo_status_t status;
+
+    status = _cairo_path_fixed_move_to (path, box->p1.x + fx, box->p1.y + fy);
+    if (unlikely (status))
+       return status;
+
+    status = _cairo_path_fixed_line_to (path, box->p2.x + fx, box->p1.y + fy);
+    if (unlikely (status))
+       return status;
+
+    status = _cairo_path_fixed_line_to (path, box->p2.x + fx, box->p2.y + fy);
+    if (unlikely (status))
+       return status;
+
+    status = _cairo_path_fixed_line_to (path, box->p1.x + fx, box->p2.y + fy);
+    if (unlikely (status))
+       return status;
+
+    return _cairo_path_fixed_close_path (path);
+}
+
 cairo_surface_t *
 _cairo_clip_get_surface (const cairo_clip_t *clip,
                         cairo_surface_t *target,
@@ -96,16 +125,51 @@ _cairo_clip_get_surface (const cairo_clip_t *clip,
 {
     cairo_surface_t *surface;
     cairo_status_t status;
-    cairo_clip_t *copy;
+    cairo_clip_t *copy, *region;
     cairo_clip_path_t *copy_path, *clip_path;
 
-    surface = _cairo_surface_create_similar_solid (target,
-                                                  CAIRO_CONTENT_ALPHA,
-                                                  clip->extents.width,
-                                                  clip->extents.height,
-                                                  CAIRO_COLOR_WHITE);
-    if (unlikely (surface->status))
-       return surface;
+    if (clip->num_boxes) {
+       cairo_path_fixed_t path;
+       int i;
+
+       surface = _cairo_surface_create_similar_solid (target,
+                                                      CAIRO_CONTENT_ALPHA,
+                                                      clip->extents.width,
+                                                      clip->extents.height,
+                                                      CAIRO_COLOR_TRANSPARENT);
+       if (unlikely (surface->status))
+           return surface;
+
+       _cairo_path_fixed_init (&path);
+       status = CAIRO_STATUS_SUCCESS;
+       for (i = 0; status == CAIRO_STATUS_SUCCESS && i < clip->num_boxes; i++) {
+           status = _cairo_path_fixed_add_box (&path, &clip->boxes[i],
+                                               -_cairo_fixed_from_int (clip->extents.x),
+                                               -_cairo_fixed_from_int (clip->extents.y));
+       }
+       if (status == CAIRO_STATUS_SUCCESS)
+           status = _cairo_surface_fill (surface,
+                                         CAIRO_OPERATOR_ADD,
+                                         &_cairo_pattern_white.base,
+                                         &path,
+                                         CAIRO_FILL_RULE_WINDING,
+                                         1.,
+                                         CAIRO_ANTIALIAS_DEFAULT,
+                                         NULL);
+       _cairo_path_fixed_fini (&path);
+       if (unlikely (status)) {
+           cairo_surface_destroy (surface);
+           return _cairo_surface_create_in_error (status);
+       }
+    } else {
+       surface = _cairo_surface_create_similar_solid (target,
+                                                      CAIRO_CONTENT_ALPHA,
+                                                      clip->extents.width,
+                                                      clip->extents.height,
+                                                      CAIRO_COLOR_WHITE);
+       if (unlikely (surface->status))
+           return surface;
+    }
 
     copy = _cairo_clip_copy_with_translation (clip,
                                              -clip->extents.x,
@@ -113,6 +177,10 @@ _cairo_clip_get_surface (const cairo_clip_t *clip,
     copy_path = copy->path;
     copy->path = NULL;
 
+    region = copy;
+    if (! _cairo_clip_is_region (copy))
+       region = _cairo_clip_copy_region (copy);
+
     status = CAIRO_STATUS_SUCCESS;
     clip_path = copy_path;
     while (status == CAIRO_STATUS_SUCCESS && clip_path) {
@@ -123,12 +191,14 @@ _cairo_clip_get_surface (const cairo_clip_t *clip,
                                      clip_path->fill_rule,
                                      clip_path->tolerance,
                                      clip_path->antialias,
-                                     copy);
+                                     region);
        clip_path = clip_path->prev;
     }
 
     copy->path = copy_path;
     _cairo_clip_destroy (copy);
+    if (region != copy)
+       _cairo_clip_destroy (region);
 
     if (unlikely (status)) {
        cairo_surface_destroy (surface);
index c89e8be..bd70c06 100644 (file)
@@ -40,6 +40,7 @@
  */
 
 #include "cairoint.h"
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
 #include "cairo-error-private.h"
 #include "cairo-freed-pool-private.h"
@@ -74,7 +75,7 @@ _cairo_clip_path_create (cairo_clip_t *clip)
     return clip_path;
 }
 
-static cairo_clip_path_t *
+cairo_clip_path_t *
 _cairo_clip_path_reference (cairo_clip_path_t *clip_path)
 {
     assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&clip_path->ref_count));
@@ -174,6 +175,24 @@ _cairo_clip_copy (const cairo_clip_t *clip)
 }
 
 cairo_clip_t *
+_cairo_clip_copy_path (const cairo_clip_t *clip)
+{
+    cairo_clip_t *copy;
+
+    if (clip == NULL || _cairo_clip_is_all_clipped (clip))
+       return (cairo_clip_t *) clip;
+
+    assert (clip->num_boxes);
+
+    copy = _cairo_clip_create ();
+    copy->extents = clip->extents;
+    if (clip->path)
+       copy->path = _cairo_clip_path_reference (clip->path);
+
+    return copy;
+}
+
+cairo_clip_t *
 _cairo_clip_copy_region (const cairo_clip_t *clip)
 {
     cairo_clip_t *copy;
diff --git a/src/cairo-cogl-context-private.h b/src/cairo-cogl-context-private.h
new file mode 100644 (file)
index 0000000..0a7185e
--- /dev/null
@@ -0,0 +1,52 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+
+#ifndef CAIRO_COGL_CONTEXT_PRIVATE_H
+#define CAIRO_COGL_CONTEXT_PRIVATE_H
+
+#include "cairo-default-context-private.h"
+#include "cairo-cogl-private.h"
+
+typedef struct _cairo_cogl_context {
+    cairo_default_context_t base;
+
+    cairo_cogl_device_t *dev;
+    int path_ctm_age;
+    cairo_path_fixed_t user_path;
+
+    cairo_bool_t path_is_rectangle;
+    double x, y, width, height;
+} cairo_cogl_context_t;
+
+cairo_t *
+_cairo_cogl_context_create (void *target);
+
+#endif /* CAIRO_COGL_CONTEXT_PRIVATE_H */
diff --git a/src/cairo-cogl-context.c b/src/cairo-cogl-context.c
new file mode 100644 (file)
index 0000000..0116b0a
--- /dev/null
@@ -0,0 +1,822 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+
+/* so long as we can verify that the ctm doesn't change multiple times
+ * during the construction of a path we can build a shadow
+ * #cairo_path_fixed_t in user coordinates that we can use to create a
+ * hash value for caching tessellations of that path.
+ *
+ * We need to hook into all the points where the ctm can be changed
+ * so we can bump a cr->path_ctm_age counter.
+ *
+ * We need to hook into all the points where the path can be modified
+ * so we can catch the start of a path and reset the cr->path_ctm_age
+ * counter at that point.
+ *
+ * When a draw operation is hit we can then check that the
+ * path_ctm_age == 0 and if so we create a hash of the path.
+ *
+ * We use this hash to lookup a #cairo_cogl_path_meta_t struct which
+ * may contain tessellated triangles for the path or may just contain
+ * a count of how many times the path has been re-seen (we only cache
+ * tessellated triangles if there is evidence that the path is being
+ * used multiple times because there is a cost involved in allocating
+ * a separate buffer for the triangles).
+ */
+
+#include "cairoint.h"
+
+#include "cairo-cogl-context-private.h"
+#include "cairo-freed-pool-private.h"
+#include "cairo-arc-private.h"
+#include "cairo-path-fixed-private.h"
+
+#include <glib.h>
+
+static freed_pool_t context_pool;
+
+void
+_cairo_cogl_context_reset_static_data (void)
+{
+    _freed_pool_reset (&context_pool);
+}
+
+static cairo_status_t
+_cairo_cogl_context_rectangle_real (cairo_cogl_context_t *cr,
+                                   double x, double y,
+                                   double width, double height)
+{
+    cairo_status_t status;
+    status = cr->dev->backend_parent.rectangle (cr, x, y, width, height);
+    if (unlikely (status))
+       return status;
+
+    return _cairo_cogl_path_fixed_rectangle (&cr->user_path,
+                                            _cairo_fixed_from_double (x),
+                                            _cairo_fixed_from_double (y),
+                                            _cairo_fixed_from_double (width),
+                                            _cairo_fixed_from_double (height));
+}
+
+/* The idea here is that we have a simplified way of tracking rectangle paths
+ * because rectangles are perhaps the most common shape drawn with cairo.
+ *
+ * Basically we have a speculative store for a rectangle path that doesn't
+ * need to use the #cairo_path_fixed_t api to describe a rectangle in terms of
+ * (move_to,rel_line_to,rel_line_to,_rel_line_to,close) because if you profile
+ * heavy rectangle drawing with Cairo that process can be overly expensive.
+ *
+ * If the user asks to add more than just a rectangle to their current path
+ * then we "flush" any speculative rectangle stored into the current path
+ * before continuing to append their operations.
+ *
+ * In addition to the speculative store cairo-cogl also has a fast-path
+ * fill_rectangle drawing operation that further aims to minimize the cost
+ * of drawing rectangles.
+ */
+static cairo_status_t
+_flush_cr_rectangle (cairo_cogl_context_t *cr)
+{
+    if (!cr->path_is_rectangle)
+       return CAIRO_STATUS_SUCCESS;
+
+    cr->path_is_rectangle = FALSE;
+    return _cairo_cogl_context_rectangle_real (cr, cr->x, cr->y, cr->width, cr->height);
+}
+
+static cairo_status_t
+_cairo_cogl_context_restore (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    cr->path_ctm_age++;
+    return cr->dev->backend_parent.restore (abstract_cr);
+}
+
+static cairo_status_t
+_cairo_cogl_context_translate (void *abstract_cr, double tx, double ty)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    cr->path_ctm_age++;
+    return cr->dev->backend_parent.translate (abstract_cr, tx, ty);
+}
+
+static cairo_status_t
+_cairo_cogl_context_scale (void *abstract_cr, double sx, double sy)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    cr->path_ctm_age++;
+    return cr->dev->backend_parent.scale (abstract_cr, sx, sy);
+}
+
+static cairo_status_t
+_cairo_cogl_context_rotate (void *abstract_cr, double theta)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    cr->path_ctm_age++;
+    return cr->dev->backend_parent.rotate (abstract_cr, theta);
+}
+
+static cairo_status_t
+_cairo_cogl_context_transform (void *abstract_cr, const cairo_matrix_t *matrix)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    cr->path_ctm_age++;
+    return cr->dev->backend_parent.transform (abstract_cr, matrix);
+}
+
+static cairo_status_t
+_cairo_cogl_context_set_matrix (void *abstract_cr, const cairo_matrix_t *matrix)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    cr->path_ctm_age++;
+    return cr->dev->backend_parent.set_matrix (abstract_cr, matrix);
+}
+
+static cairo_status_t
+_cairo_cogl_context_set_identity_matrix (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    cr->path_ctm_age++;
+    return cr->dev->backend_parent.set_identity_matrix (abstract_cr);
+}
+
+static cairo_status_t
+_cairo_cogl_context_new_path (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.new_path (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+    _cairo_path_fixed_fini (&cr->user_path);
+    _cairo_path_fixed_init (&cr->user_path);
+    cr->path_is_rectangle = FALSE;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_context_new_sub_path (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.new_sub_path (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+    _cairo_path_fixed_new_sub_path (&cr->user_path);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_context_move_to (void *abstract_cr, double x, double y)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_fixed_t x_fixed, y_fixed;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.move_to (abstract_cr, x, y);
+    if (unlikely (status))
+       return status;
+
+    x_fixed = _cairo_fixed_from_double (x);
+    y_fixed = _cairo_fixed_from_double (y);
+
+    return _cairo_path_fixed_move_to (&cr->user_path, x_fixed, y_fixed);
+}
+
+static cairo_status_t
+_cairo_cogl_context_line_to (void *abstract_cr, double x, double y)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_fixed_t x_fixed, y_fixed;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.line_to (abstract_cr, x, y);
+    if (unlikely (status))
+       return status;
+
+    x_fixed = _cairo_fixed_from_double (x);
+    y_fixed = _cairo_fixed_from_double (y);
+
+    if (cr->user_path.buf.base.num_ops == 0)
+       cr->path_ctm_age = 0;
+
+    return _cairo_path_fixed_line_to (&cr->user_path, x_fixed, y_fixed);
+}
+
+static cairo_status_t
+_cairo_cogl_context_curve_to (void *abstract_cr,
+                              double x1, double y1,
+                              double x2, double y2,
+                              double x3, double y3)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_fixed_t x1_fixed, y1_fixed;
+    cairo_fixed_t x2_fixed, y2_fixed;
+    cairo_fixed_t x3_fixed, y3_fixed;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.curve_to (abstract_cr, x1, y1, x2, y2, x3, y3);
+    if (unlikely (status))
+       return status;
+
+    x1_fixed = _cairo_fixed_from_double (x1);
+    y1_fixed = _cairo_fixed_from_double (y1);
+
+    x2_fixed = _cairo_fixed_from_double (x2);
+    y2_fixed = _cairo_fixed_from_double (y2);
+
+    x3_fixed = _cairo_fixed_from_double (x3);
+    y3_fixed = _cairo_fixed_from_double (y3);
+
+    if (cr->user_path.buf.base.num_ops == 0)
+       cr->path_ctm_age = 0;
+
+    return _cairo_path_fixed_curve_to (&cr->user_path,
+                                      x1_fixed, y1_fixed,
+                                      x2_fixed, y2_fixed,
+                                      x3_fixed, y3_fixed);
+}
+
+static cairo_status_t
+_cairo_cogl_context_arc (void *abstract_cr,
+                         double xc, double yc, double radius,
+                         double angle1, double angle2,
+                         cairo_bool_t forward)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.arc (abstract_cr, xc, yc, radius, angle1, angle2, forward);
+    if (unlikely (status))
+       return status;
+
+    if (cr->user_path.buf.base.num_ops == 0)
+       cr->path_ctm_age = 0;
+
+    /* Do nothing, successfully, if radius is <= 0 */
+    if (radius <= 0.0) {
+       cairo_fixed_t x_fixed, y_fixed;
+
+       x_fixed = _cairo_fixed_from_double (xc);
+       y_fixed = _cairo_fixed_from_double (yc);
+       status = _cairo_path_fixed_line_to (&cr->user_path, x_fixed, y_fixed);
+       if (unlikely (status))
+           return status;
+
+       status = _cairo_path_fixed_line_to (&cr->user_path, x_fixed, y_fixed);
+       if (unlikely (status))
+           return status;
+
+       return CAIRO_STATUS_SUCCESS;
+    }
+
+    status = _cairo_cogl_context_line_to (cr,
+                                         xc + radius * cos (angle1),
+                                         yc + radius * sin (angle1));
+
+    if (unlikely (status))
+       return status;
+
+    if (forward)
+       _cairo_arc_path (&cr->base.base, xc, yc, radius, angle1, angle2);
+    else
+       _cairo_arc_path_negative (&cr->base.base, xc, yc, radius, angle1, angle2);
+
+    return CAIRO_STATUS_SUCCESS; /* any error will have already been set on cr */
+}
+
+static cairo_status_t
+_cairo_cogl_context_rel_move_to (void *abstract_cr, double dx, double dy)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_fixed_t dx_fixed, dy_fixed;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.rel_move_to (abstract_cr, dx, dy);
+    if (unlikely (status))
+       return status;
+
+    dx_fixed = _cairo_fixed_from_double (dx);
+    dy_fixed = _cairo_fixed_from_double (dy);
+
+    return _cairo_path_fixed_rel_move_to (&cr->user_path, dx_fixed, dy_fixed);
+}
+
+static cairo_status_t
+_cairo_cogl_context_rel_line_to (void *abstract_cr, double dx, double dy)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_fixed_t dx_fixed, dy_fixed;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.rel_line_to (abstract_cr, dx, dy);
+    if (unlikely (status))
+       return status;
+
+    dx_fixed = _cairo_fixed_from_double (dx);
+    dy_fixed = _cairo_fixed_from_double (dy);
+
+    if (cr->user_path.buf.base.num_ops == 0)
+       cr->path_ctm_age = 0;
+
+    return _cairo_path_fixed_rel_line_to (&cr->user_path, dx_fixed, dy_fixed);
+}
+
+
+static cairo_status_t
+_cairo_cogl_context_rel_curve_to (void *abstract_cr,
+                                  double dx1, double dy1,
+                                  double dx2, double dy2,
+                                  double dx3, double dy3)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_fixed_t dx1_fixed, dy1_fixed;
+    cairo_fixed_t dx2_fixed, dy2_fixed;
+    cairo_fixed_t dx3_fixed, dy3_fixed;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.rel_curve_to (abstract_cr, dx1, dy1, dx2, dy2, dx3, dy3);
+    if (unlikely (status))
+       return status;
+
+    dx1_fixed = _cairo_fixed_from_double (dx1);
+    dy1_fixed = _cairo_fixed_from_double (dy1);
+
+    dx2_fixed = _cairo_fixed_from_double (dx2);
+    dy2_fixed = _cairo_fixed_from_double (dy2);
+
+    dx3_fixed = _cairo_fixed_from_double (dx3);
+    dy3_fixed = _cairo_fixed_from_double (dy3);
+
+    if (cr->user_path.buf.base.num_ops == 0)
+       cr->path_ctm_age = 0;
+
+    return _cairo_path_fixed_rel_curve_to (&cr->user_path,
+                                          dx1_fixed, dy1_fixed,
+                                          dx2_fixed, dy2_fixed,
+                                          dx3_fixed, dy3_fixed);
+}
+
+#if 0
+static cairo_status_t
+_cairo_cogl_context_arc_to (void *abstract_cr,
+                           double x1, double y1,
+                           double x2, double y2,
+                           double radius)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.arc_to (abstract_cr, x1, y1, x2, y2, radius);
+    if (unlikely (status))
+       return status;
+#warning "FIXME"
+}
+
+static cairo_status_t
+_cairo_cogl_rel_arc_to (void *cr,
+                       double dx1, double dy1,
+                       double dx2, double dy2,
+                       double radius)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.rel_arc_to (abstract_cr, dx1, dy2, dx2, dy2, radius);
+    if (unlikely (status))
+       return status;
+#warning "FIXME"
+}
+#endif
+
+static cairo_status_t
+_cairo_cogl_context_close_path (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+
+    if (cr->path_is_rectangle) {
+       status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = cr->dev->backend_parent.close_path (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+    if (cr->user_path.buf.base.num_ops == 0)
+       cr->path_ctm_age = 0;
+
+    return _cairo_path_fixed_close_path (&cr->user_path);
+}
+
+static cairo_status_t
+_cairo_cogl_context_rectangle (void *abstract_cr,
+                              double x, double y,
+                              double width, double height)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    if (cr->user_path.buf.base.num_ops == 0) {
+       cr->path_ctm_age = 0;
+
+#if 1
+       /* XXX: Since drawing rectangles is so common we have a
+        * fast-path for drawing a single rectangle. */
+       cr->x = x;
+       cr->y = y;
+       cr->width = width;
+       cr->height = height;
+       cr->path_is_rectangle = TRUE;
+       return CAIRO_STATUS_SUCCESS;
+#endif
+    }
+
+    if (cr->path_is_rectangle) {
+       cairo_status_t status = _flush_cr_rectangle (cr);
+       if (unlikely (status))
+           return status;
+    }
+
+    return _cairo_cogl_context_rectangle_real (cr, x, y, width, height);
+}
+
+/* Since the surface backend drawing operator functions don't get
+ * passed the current #cairo_t context we don't have a good way
+ * to get our user-coordinates path into our surface operator
+ * functions.
+ *
+ * For now we use this function to set side band data on the surface
+ * itself.
+ */
+static void
+_cairo_cogl_surface_set_side_band_state (cairo_cogl_surface_t *surface,
+                                        cairo_cogl_context_t *cr)
+{
+
+    if (cr->path_ctm_age <= 1) {
+       surface->user_path = &cr->user_path;
+       surface->ctm = &cr->base.gstate->ctm;
+       surface->ctm_inverse = &cr->base.gstate->ctm_inverse;
+       surface->path_is_rectangle = cr->path_is_rectangle;
+       if (surface->path_is_rectangle) {
+           surface->path_rectangle_x = cr->x;
+           surface->path_rectangle_y = cr->y;
+           surface->path_rectangle_width = cr->width;
+           surface->path_rectangle_height = cr->height;
+       }
+    } else {
+       surface->user_path = NULL;
+       surface->path_is_rectangle = FALSE;
+    }
+}
+
+static cairo_status_t
+_cairo_cogl_context_fill (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)cr->base.gstate->target;
+
+    if (cr->path_is_rectangle) {
+       status = _cairo_cogl_surface_fill_rectangle (cr->base.gstate->target,
+                                                    cr->base.gstate->op,
+                                                    cr->base.gstate->source,
+                                                    cr->x,
+                                                    cr->y,
+                                                    cr->width,
+                                                    cr->height,
+                                                    &cr->base.gstate->ctm,
+                                                    cr->base.gstate->clip);
+       if (status == CAIRO_STATUS_SUCCESS)
+           goto DONE;
+       _flush_cr_rectangle (cr);
+    }
+
+    _cairo_cogl_surface_set_side_band_state (surface, cr);
+
+    status = cr->dev->backend_parent.fill (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+DONE:
+    _cairo_path_fixed_fini (&cr->user_path);
+    _cairo_path_fixed_init (&cr->user_path);
+    cr->path_is_rectangle = FALSE;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_context_fill_preserve (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)cr->base.gstate->target;
+
+    _cairo_cogl_surface_set_side_band_state (surface, cr);
+
+    status = cr->dev->backend_parent.fill_preserve (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_context_stroke (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)cr->base.gstate->target;
+
+    _cairo_cogl_surface_set_side_band_state (surface, cr);
+
+    status = cr->dev->backend_parent.stroke (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+    _cairo_path_fixed_fini (&cr->user_path);
+    _cairo_path_fixed_init (&cr->user_path);
+    cr->path_is_rectangle = FALSE;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_context_stroke_preserve (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+    cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)cr->base.gstate->target;
+
+    _cairo_cogl_surface_set_side_band_state (surface, cr);
+
+    status = cr->dev->backend_parent.stroke_preserve (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_context_clip (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+    cairo_status_t status;
+
+    status = cr->dev->backend_parent.clip (abstract_cr);
+    if (unlikely (status))
+       return status;
+
+    _cairo_path_fixed_fini (&cr->user_path);
+    _cairo_path_fixed_init (&cr->user_path);
+    cr->path_is_rectangle = FALSE;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_cogl_context_destroy (void *abstract_cr)
+{
+    cairo_cogl_context_t *cr = abstract_cr;
+
+    _cairo_default_context_fini (&cr->base);
+
+    _cairo_path_fixed_fini (&cr->user_path);
+
+    /* mark the context as invalid to protect against misuse */
+    cr->base.base.status = CAIRO_STATUS_NULL_POINTER;
+    _freed_pool_put (&context_pool, cr);
+}
+
+/* We want to hook into the frontend of the path construction APIs so
+ * we can build up a path description in user coordinates instead of
+ * backend coordinates so that we can recognize user coordinate
+ * rectangles and so we can hash a user path independent of its
+ * transform. (With some care to catch unusual cases where the ctm
+ * changes mid-path) */
+cairo_t *
+_cairo_cogl_context_create (void *target)
+{
+    cairo_cogl_surface_t *surface = target;
+    cairo_cogl_context_t *cr;
+    cairo_status_t status;
+
+    cr = _freed_pool_get (&context_pool);
+    if (unlikely (cr == NULL)) {
+       cr = malloc (sizeof (cairo_cogl_context_t));
+       if (unlikely (cr == NULL))
+           return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+    }
+
+    status = _cairo_default_context_init (&cr->base, target);
+    if (unlikely (status)) {
+       _freed_pool_put (&context_pool, cr);
+       return _cairo_create_in_error (status);
+    }
+
+    cr->dev = (cairo_cogl_device_t *)surface->base.device;
+
+    if (unlikely (cr->dev->backend_vtable_initialized == FALSE)) {
+       cairo_backend_t *backend = &cr->dev->backend;
+       memcpy (backend, cr->base.base.backend, sizeof (cairo_backend_t));
+       memcpy (&cr->dev->backend_parent, cr->base.base.backend, sizeof (cairo_backend_t));
+
+       backend->destroy = _cairo_cogl_context_destroy;
+
+       backend->restore = _cairo_cogl_context_restore;
+       backend->translate = _cairo_cogl_context_translate;
+       backend->scale = _cairo_cogl_context_scale;
+       backend->rotate = _cairo_cogl_context_rotate;
+       backend->transform = _cairo_cogl_context_transform;
+       backend->set_matrix = _cairo_cogl_context_set_matrix;
+       backend->set_identity_matrix = _cairo_cogl_context_set_identity_matrix;
+
+       backend->new_path = _cairo_cogl_context_new_path;
+       backend->new_sub_path = _cairo_cogl_context_new_sub_path;
+       backend->move_to = _cairo_cogl_context_move_to;
+       backend->rel_move_to = _cairo_cogl_context_rel_move_to;
+       backend->line_to = _cairo_cogl_context_line_to;
+       backend->rel_line_to = _cairo_cogl_context_rel_line_to;
+       backend->curve_to = _cairo_cogl_context_curve_to;
+       backend->rel_curve_to = _cairo_cogl_context_rel_curve_to;
+#if 0
+       backend->arc_to = _cairo_cogl_context_arc_to;
+       backend->rel_arc_to = _cairo_cogl_context_rel_arc_to;
+#endif
+       backend->close_path = _cairo_cogl_context_close_path;
+       //backend->arc = _cairo_cogl_context_arc;
+       backend->rectangle = _cairo_cogl_context_rectangle;
+
+       /* Try to automatically catch if any new path APIs are added that mean
+        * we may need to overload more functions... */
+       assert (((char *)&backend->path_extents - (char *)&backend->device_to_user_distance)
+               == (sizeof (void *) * 14));
+
+       backend->fill = _cairo_cogl_context_fill;
+       backend->fill_preserve = _cairo_cogl_context_fill_preserve;
+       backend->stroke = _cairo_cogl_context_stroke;
+       backend->stroke_preserve = _cairo_cogl_context_stroke_preserve;
+       backend->clip = _cairo_cogl_context_clip;
+
+       cr->dev->backend_vtable_initialized = TRUE;
+    }
+
+    cr->base.base.backend = &cr->dev->backend;
+
+    _cairo_path_fixed_init (&cr->user_path);
+    cr->path_is_rectangle = FALSE;
+
+    return &cr->base.base;
+}
diff --git a/src/cairo-cogl-gradient-private.h b/src/cairo-cogl-gradient-private.h
new file mode 100644 (file)
index 0000000..fa684d2
--- /dev/null
@@ -0,0 +1,89 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+
+#ifndef CAIRO_COGL_GRADIENT_PRIVATE_H
+#define CAIRO_COGL_GRADIENT_PRIVATE_H
+
+#include "cairoint.h"
+#include "cairo-pattern-private.h"
+
+#include <cogl/cogl2-experimental.h>
+
+#define CAIRO_COGL_LINEAR_GRADIENT_CACHE_SIZE (1024 * 1024)
+
+typedef enum _cairo_cogl_gradient_compatibility {
+    CAIRO_COGL_GRADIENT_CAN_EXTEND_PAD     = 1<<0,
+    CAIRO_COGL_GRADIENT_CAN_EXTEND_REPEAT   = 1<<1,
+    CAIRO_COGL_GRADIENT_CAN_EXTEND_REFLECT  = 1<<2,
+    CAIRO_COGL_GRADIENT_CAN_EXTEND_NONE            = 1<<3
+} cairo_cogl_gradient_compatibility_t;
+#define CAIRO_COGL_GRADIENT_CAN_EXTEND_ALL (CAIRO_COGL_GRADIENT_CAN_EXTEND_PAD |\
+                                           CAIRO_COGL_GRADIENT_CAN_EXTEND_REPEAT|\
+                                           CAIRO_COGL_GRADIENT_CAN_EXTEND_REFLECT|\
+                                           CAIRO_COGL_GRADIENT_CAN_EXTEND_NONE)
+
+typedef struct _cairo_cogl_linear_texture_entry {
+    cairo_cogl_gradient_compatibility_t compatibility;
+    CoglTexture        *texture;
+    float translate_x;
+    float scale_x;
+} cairo_cogl_linear_texture_entry_t;
+
+typedef struct _cairo_cogl_linear_gradient {
+    cairo_cache_entry_t                 cache_entry;
+    cairo_reference_count_t     ref_count;
+    GList                      *textures;
+    int                                 n_stops;
+    const cairo_gradient_stop_t        *stops;
+    cairo_gradient_stop_t       stops_embedded[1];
+} cairo_cogl_linear_gradient_t;
+
+cairo_int_status_t
+_cairo_cogl_get_linear_gradient (cairo_cogl_device_t *context,
+                                cairo_extend_t extend_mode,
+                                int n_stops,
+                                const cairo_gradient_stop_t *stops,
+                                cairo_cogl_linear_gradient_t **gradient_out);
+
+cairo_cogl_linear_texture_entry_t *
+_cairo_cogl_linear_gradient_texture_for_extend (cairo_cogl_linear_gradient_t *gradient,
+                                               cairo_extend_t extend_mode);
+
+cairo_cogl_linear_gradient_t *
+_cairo_cogl_linear_gradient_reference (cairo_cogl_linear_gradient_t *gradient);
+
+void
+_cairo_cogl_linear_gradient_destroy (cairo_cogl_linear_gradient_t *gradient);
+
+cairo_bool_t
+_cairo_cogl_linear_gradient_equal (const void *key_a, const void *key_b);
+
+#endif /* CAIRO_COGL_GRADIENT_PRIVATE_H */
diff --git a/src/cairo-cogl-gradient.c b/src/cairo-cogl-gradient.c
new file mode 100644 (file)
index 0000000..f8c8004
--- /dev/null
@@ -0,0 +1,642 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+//#include "cairoint.h"
+
+#include "cairo-cogl-private.h"
+#include "cairo-cogl-gradient-private.h"
+#include "cairo-image-surface-private.h"
+
+#include <cogl/cogl2-experimental.h>
+#include <glib.h>
+
+#define DUMP_GRADIENTS_TO_PNG
+
+static unsigned long
+_cairo_cogl_linear_gradient_hash (unsigned int                  n_stops,
+                                 const cairo_gradient_stop_t  *stops)
+{
+    return _cairo_hash_bytes (n_stops, stops,
+                              sizeof (cairo_gradient_stop_t) * n_stops);
+}
+
+static cairo_cogl_linear_gradient_t *
+_cairo_cogl_linear_gradient_lookup (cairo_cogl_device_t         *ctx,
+                                   unsigned long                 hash,
+                                   unsigned int                  n_stops,
+                                   const cairo_gradient_stop_t  *stops)
+{
+    cairo_cogl_linear_gradient_t lookup;
+
+    lookup.cache_entry.hash = hash,
+    lookup.n_stops = n_stops;
+    lookup.stops = stops;
+
+    return _cairo_cache_lookup (&ctx->linear_cache, &lookup.cache_entry);
+}
+
+cairo_bool_t
+_cairo_cogl_linear_gradient_equal (const void *key_a, const void *key_b)
+{
+    const cairo_cogl_linear_gradient_t *a = key_a;
+    const cairo_cogl_linear_gradient_t *b = key_b;
+
+    if (a->n_stops != b->n_stops)
+        return FALSE;
+
+    return memcmp (a->stops, b->stops, a->n_stops * sizeof (cairo_gradient_stop_t)) == 0;
+}
+
+cairo_cogl_linear_gradient_t *
+_cairo_cogl_linear_gradient_reference (cairo_cogl_linear_gradient_t *gradient)
+{
+    assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&gradient->ref_count));
+
+    _cairo_reference_count_inc (&gradient->ref_count);
+
+    return gradient;
+}
+
+void
+_cairo_cogl_linear_gradient_destroy (cairo_cogl_linear_gradient_t *gradient)
+{
+    GList *l;
+
+    assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&gradient->ref_count));
+
+    if (! _cairo_reference_count_dec_and_test (&gradient->ref_count))
+       return;
+
+    for (l = gradient->textures; l; l = l->next) {
+       cairo_cogl_linear_texture_entry_t *entry = l->data;
+       cogl_object_unref (entry->texture);
+       free (entry);
+    }
+    g_list_free (gradient->textures);
+
+    free (gradient);
+}
+
+static int
+_cairo_cogl_util_next_p2 (int a)
+{
+  int rval = 1;
+
+  while (rval < a)
+    rval <<= 1;
+
+  return rval;
+}
+
+static float
+get_max_color_component_range (const cairo_color_stop_t *color0, const cairo_color_stop_t *color1)
+{
+    float range;
+    float max = 0;
+
+    range = fabs (color0->red - color1->red);
+    max = MAX (range, max);
+    range = fabs (color0->green - color1->green);
+    max = MAX (range, max);
+    range = fabs (color0->blue - color1->blue);
+    max = MAX (range, max);
+    range = fabs (color0->alpha - color1->alpha);
+    max = MAX (range, max);
+
+    return max;
+}
+
+static int
+_cairo_cogl_linear_gradient_width_for_stops (cairo_extend_t              extend,
+                                            unsigned int                 n_stops,
+                                            const cairo_gradient_stop_t *stops)
+{
+    unsigned int n;
+    float max_texels_per_unit_offset = 0;
+    float total_offset_range;
+
+    /* Find the stop pair demanding the most precision because we are
+     * interpolating the largest color-component range.
+     *
+     * From that we can define the relative sizes of all the other
+     * stop pairs within our texture and thus the overall size.
+     *
+     * To determine the maximum number of texels for a given gap we
+     * look at the range of colors we are expected to interpolate (so
+     * long as the stop offsets are not degenerate) and we simply
+     * assume we want one texel for each unique color value possible
+     * for a one byte-per-component representation.
+     * XXX: maybe this is overkill and just allowing 128 levels
+     * instead of 256 would be enough and then we'd rely on the
+     * bilinear filtering to give the full range.
+     *
+     * XXX: potentially we could try and map offsets to pixels to come
+     * up with a more precise mapping, but we are aiming to cache
+     * the gradients so we can't make assumptions about how it will be
+     * scaled in the future.
+     */
+    for (n = 1; n < n_stops; n++) {
+       float color_range;
+       float offset_range;
+       float texels;
+       float texels_per_unit_offset;
+
+       /* note: degenerate stops don't need to be represented in the
+        * texture but we want to be sure that solid gaps get at least
+        * one texel and all other gaps get at least 2 texels.
+        */
+
+       if (stops[n].offset == stops[n-1].offset)
+           continue;
+
+       color_range = get_max_color_component_range (&stops[n].color, &stops[n-1].color);
+       if (color_range == 0)
+           texels = 1;
+       else
+           texels = MAX (2, 256.0f * color_range);
+
+       /* So how many texels would we need to map over the full [0,1]
+        * gradient range so this gap would have enough texels? ... */
+       offset_range = stops[n].offset - stops[n - 1].offset;
+       texels_per_unit_offset = texels / offset_range;
+
+       if (texels_per_unit_offset > max_texels_per_unit_offset)
+           max_texels_per_unit_offset = texels_per_unit_offset;
+    }
+
+    total_offset_range = fabs (stops[n_stops - 1].offset - stops[0].offset);
+    return max_texels_per_unit_offset * total_offset_range;
+}
+
+/* Aim to create gradient textures without an alpha component so we can avoid
+ * needing to use blending... */
+static CoglPixelFormat
+_cairo_cogl_linear_gradient_format_for_stops (cairo_extend_t              extend,
+                                             unsigned int                 n_stops,
+                                             const cairo_gradient_stop_t *stops)
+{
+    unsigned int n;
+
+    /* We have to add extra transparent texels to the end of the gradient to
+     * handle CAIRO_EXTEND_NONE... */
+    if (extend == CAIRO_EXTEND_NONE)
+       return COGL_PIXEL_FORMAT_BGRA_8888_PRE;
+
+    for (n = 1; n < n_stops; n++) {
+       if (stops[n].color.alpha != 1.0)
+           return COGL_PIXEL_FORMAT_BGRA_8888_PRE;
+    }
+
+    return COGL_PIXEL_FORMAT_BGR_888;
+}
+
+static cairo_cogl_gradient_compatibility_t
+_cairo_cogl_compatibility_from_extend_mode (cairo_extend_t extend_mode)
+{
+    switch (extend_mode)
+    {
+    case CAIRO_EXTEND_NONE:
+       return CAIRO_COGL_GRADIENT_CAN_EXTEND_NONE;
+    case CAIRO_EXTEND_PAD:
+       return CAIRO_COGL_GRADIENT_CAN_EXTEND_PAD;
+    case CAIRO_EXTEND_REPEAT:
+       return CAIRO_COGL_GRADIENT_CAN_EXTEND_REPEAT;
+    case CAIRO_EXTEND_REFLECT:
+       return CAIRO_COGL_GRADIENT_CAN_EXTEND_REFLECT;
+    }
+
+    assert (0); /* not reached */
+    return CAIRO_EXTEND_NONE;
+}
+
+cairo_cogl_linear_texture_entry_t *
+_cairo_cogl_linear_gradient_texture_for_extend (cairo_cogl_linear_gradient_t *gradient,
+                                               cairo_extend_t extend_mode)
+{
+    GList *l;
+    cairo_cogl_gradient_compatibility_t compatibility =
+       _cairo_cogl_compatibility_from_extend_mode (extend_mode);
+    for (l = gradient->textures; l; l = l->next) {
+       cairo_cogl_linear_texture_entry_t *entry = l->data;
+       if (entry->compatibility & compatibility)
+           return entry;
+    }
+    return NULL;
+}
+
+static void
+color_stop_lerp (const cairo_color_stop_t *c0,
+                const cairo_color_stop_t *c1,
+                float factor,
+                cairo_color_stop_t *dest)
+{
+    /* NB: we always ignore the short members in this file so we don't need to
+     * worry about initializing them here. */
+    dest->red = c0->red * (1.0f-factor) + c1->red * factor;
+    dest->green = c0->green * (1.0f-factor) + c1->green * factor;
+    dest->blue = c0->blue * (1.0f-factor) + c1->blue * factor;
+    dest->alpha = c0->alpha * (1.0f-factor) + c1->alpha * factor;
+}
+
+static size_t
+_cairo_cogl_linear_gradient_size (cairo_cogl_linear_gradient_t *gradient)
+{
+    GList *l;
+    size_t size = 0;
+    for (l = gradient->textures; l; l = l->next) {
+       cairo_cogl_linear_texture_entry_t *entry = l->data;
+       size += cogl_texture_get_width (entry->texture) * 4;
+    }
+    return size;
+}
+
+static void
+emit_stop (CoglVertexP2C4 **position,
+          float left,
+          float right,
+          const cairo_color_stop_t *left_color,
+          const cairo_color_stop_t *right_color)
+{
+    CoglVertexP2C4 *p = *position;
+
+    guint8 lr = left_color->red * 255;
+    guint8 lg = left_color->green * 255;
+    guint8 lb = left_color->blue * 255;
+    guint8 la = left_color->alpha * 255;
+
+    guint8 rr = right_color->red * 255;
+    guint8 rg = right_color->green * 255;
+    guint8 rb = right_color->blue * 255;
+    guint8 ra = right_color->alpha * 255;
+
+    p[0].x = left;
+    p[0].y = 0;
+    p[0].r = lr; p[0].g = lg; p[0].b = lb; p[0].a = la;
+    p[1].x = left;
+    p[1].y = 1;
+    p[1].r = lr; p[1].g = lg; p[1].b = lb; p[1].a = la;
+    p[2].x = right;
+    p[2].y = 1;
+    p[2].r = rr; p[2].g = rg; p[2].b = rb; p[2].a = ra;
+
+    p[3].x = left;
+    p[3].y = 0;
+    p[3].r = lr; p[3].g = lg; p[3].b = lb; p[3].a = la;
+    p[4].x = right;
+    p[4].y = 1;
+    p[4].r = rr; p[4].g = rg; p[4].b = rb; p[4].a = ra;
+    p[5].x = right;
+    p[5].y = 0;
+    p[5].r = rr; p[5].g = rg; p[5].b = rb; p[5].a = ra;
+
+    *position = &p[6];
+}
+
+#ifdef DUMP_GRADIENTS_TO_PNG
+static void
+dump_gradient_to_png (CoglTexture *texture)
+{
+    cairo_image_surface_t *image = (cairo_image_surface_t *)
+       cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                   cogl_texture_get_width (texture),
+                                   cogl_texture_get_height (texture));
+    CoglPixelFormat format;
+    static int gradient_id = 0;
+    char *gradient_name;
+
+    if (image->base.status)
+       return;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    format = COGL_PIXEL_FORMAT_BGRA_8888_PRE;
+#else
+    format = COGL_PIXEL_FORMAT_ARGB_8888_PRE;
+#endif
+    cogl_texture_get_data (texture,
+                          format,
+                          0,
+                          image->data);
+    gradient_name = g_strdup_printf ("./gradient%d.png", gradient_id++);
+    g_print ("writing gradient: %s\n", gradient_name);
+    cairo_surface_write_to_png ((cairo_surface_t *)image, gradient_name);
+    g_free (gradient_name);
+}
+#endif
+
+cairo_int_status_t
+_cairo_cogl_get_linear_gradient (cairo_cogl_device_t *device,
+                                cairo_extend_t extend_mode,
+                                int n_stops,
+                                const cairo_gradient_stop_t *stops,
+                                cairo_cogl_linear_gradient_t **gradient_out)
+{
+    unsigned long hash;
+    cairo_cogl_linear_gradient_t *gradient;
+    cairo_cogl_linear_texture_entry_t *entry;
+    cairo_gradient_stop_t *internal_stops;
+    int stop_offset;
+    int n_internal_stops;
+    int n;
+    cairo_cogl_gradient_compatibility_t compatibilities;
+    int width;
+    int left_padding = 0;
+    cairo_color_stop_t left_padding_color;
+    int right_padding = 0;
+    cairo_color_stop_t right_padding_color;
+    CoglPixelFormat format;
+    CoglTexture2D *tex;
+    GError *error = NULL;
+    int un_padded_width;
+    CoglHandle offscreen;
+    cairo_int_status_t status;
+    int n_quads;
+    int n_vertices;
+    float prev;
+    float right;
+    CoglVertexP2C4 *vertices;
+    CoglVertexP2C4 *p;
+    CoglPrimitive *prim;
+
+    hash = _cairo_cogl_linear_gradient_hash (n_stops, stops);
+
+    gradient = _cairo_cogl_linear_gradient_lookup (device, hash, n_stops, stops);
+    if (gradient) {
+       cairo_cogl_linear_texture_entry_t *entry =
+           _cairo_cogl_linear_gradient_texture_for_extend (gradient, extend_mode);
+       if (entry) {
+           *gradient_out = _cairo_cogl_linear_gradient_reference (gradient);
+           return CAIRO_INT_STATUS_SUCCESS;
+       }
+    }
+
+    if (!gradient) {
+       gradient = malloc (sizeof (cairo_cogl_linear_gradient_t) +
+                          sizeof (cairo_gradient_stop_t) * (n_stops - 1));
+       if (!gradient)
+           return CAIRO_INT_STATUS_NO_MEMORY;
+
+       CAIRO_REFERENCE_COUNT_INIT (&gradient->ref_count, 1);
+       /* NB: we update the cache_entry size at the end before
+        * [re]adding it to the cache. */
+       gradient->cache_entry.hash = hash;
+       gradient->textures = NULL;
+       gradient->n_stops = n_stops;
+       gradient->stops = gradient->stops_embedded;
+       memcpy (gradient->stops_embedded, stops, sizeof (cairo_gradient_stop_t) * n_stops);
+    } else
+       _cairo_cogl_linear_gradient_reference (gradient);
+
+    entry = malloc (sizeof (cairo_cogl_linear_texture_entry_t));
+    if (!entry) {
+       status = CAIRO_INT_STATUS_NO_MEMORY;
+       goto BAIL;
+    }
+
+    compatibilities = _cairo_cogl_compatibility_from_extend_mode (extend_mode);
+
+    n_internal_stops = n_stops;
+    stop_offset = 0;
+
+    /* We really need stops covering the full [0,1] range for repeat/reflect
+     * if we want to use sampler REPEAT/MIRROR wrap modes so we may need
+     * to add some extra stops... */
+    if (extend_mode == CAIRO_EXTEND_REPEAT || extend_mode == CAIRO_EXTEND_REFLECT)
+    {
+       /* If we don't need any extra stops then actually the texture
+        * will be shareable for repeat and reflect... */
+       compatibilities = (CAIRO_COGL_GRADIENT_CAN_EXTEND_REPEAT |
+                          CAIRO_COGL_GRADIENT_CAN_EXTEND_REFLECT);
+
+       if (stops[0].offset != 0) {
+           n_internal_stops++;
+           stop_offset++;
+       }
+
+       if (stops[n_stops - 1].offset != 1)
+           n_internal_stops++;
+    }
+
+    internal_stops = alloca (n_internal_stops * sizeof (cairo_gradient_stop_t));
+    memcpy (&internal_stops[stop_offset], stops, sizeof (cairo_gradient_stop_t) * n_stops);
+
+    /* cairo_color_stop_t values are all unpremultiplied but we need to
+     * interpolate premultiplied colors so we premultiply all the double
+     * components now. (skipping any extra stops added for repeat/reflect)
+     *
+     * Anothing thing to note is that by premultiplying the colors
+     * early we'll also reduce the range of colors to interpolate
+     * which can result in smaller gradient textures.
+     */
+    for (n = stop_offset; n < n_stops; n++) {
+       cairo_color_stop_t *color = &internal_stops[n].color;
+       color->red *= color->alpha;
+       color->green *= color->alpha;
+       color->blue *= color->alpha;
+    }
+
+    if (n_internal_stops != n_stops)
+    {
+       if (extend_mode == CAIRO_EXTEND_REPEAT) {
+           compatibilities &= ~CAIRO_COGL_GRADIENT_CAN_EXTEND_REFLECT;
+           if (stops[0].offset != 0) {
+               /* what's the wrap-around distance between the user's end-stops? */
+               double dx = (1.0 - stops[n_stops - 1].offset) + stops[0].offset;
+               internal_stops[0].offset = 0;
+               color_stop_lerp (&stops[0].color,
+                                &stops[n_stops - 1].color,
+                                stops[0].offset / dx,
+                                &internal_stops[0].color);
+           }
+           if (stops[n_stops - 1].offset != 1) {
+               internal_stops[n_internal_stops - 1].offset = 1;
+               internal_stops[n_internal_stops - 1].color = internal_stops[0].color;
+           }
+       } else if (extend_mode == CAIRO_EXTEND_REFLECT) {
+           compatibilities &= ~CAIRO_COGL_GRADIENT_CAN_EXTEND_REPEAT;
+           if (stops[0].offset != 0) {
+               internal_stops[0].offset = 0;
+               internal_stops[0].color = stops[n_stops - 1].color;
+           }
+           if (stops[n_stops - 1].offset != 1) {
+               internal_stops[n_internal_stops - 1].offset = 1;
+               internal_stops[n_internal_stops - 1].color = stops[0].color;
+           }
+       }
+    }
+
+    stops = internal_stops;
+    n_stops = n_internal_stops;
+
+    width = _cairo_cogl_linear_gradient_width_for_stops (extend_mode, n_stops, stops);
+
+    if (extend_mode == CAIRO_EXTEND_PAD) {
+
+       /* Here we need to guarantee that the edge texels of our
+        * texture correspond to the desired padding color so we
+        * can use CLAMP_TO_EDGE.
+        *
+        * For short stop-gaps and especially for degenerate stops
+        * it's possible that without special consideration the
+        * user's end stop colors would not be present in our final
+        * texture.
+        *
+        * To handle this we forcibly add two extra padding texels
+        * at the edges which extend beyond the [0,1] range of the
+        * gradient itself and we will later report a translate and
+        * scale transform to compensate for this.
+        */
+
+       /* XXX: If we consider generating a mipmap for our 1d texture
+        * at some point then we also need to consider how much
+        * padding to add to be sure lower mipmap levels still have
+        * the desired edge color (as opposed to a linear blend with
+        * other colors of the gradient).
+        */
+
+       left_padding = 1;
+       left_padding_color = stops[0].color;
+       right_padding = 1;
+       right_padding_color = stops[n_stops - 1].color;
+    } else if (extend_mode == CAIRO_EXTEND_NONE) {
+       /* We handle EXTEND_NONE by adding two extra, transparent, texels at
+        * the ends of the texture and use CLAMP_TO_EDGE.
+        *
+        * We add a scale and translate transform so to account for our texels
+        * extending beyond the [0,1] range. */
+
+       left_padding = 1;
+       left_padding_color.red = 0;
+       left_padding_color.green = 0;
+       left_padding_color.blue = 0;
+       left_padding_color.alpha = 0;
+       right_padding = 1;
+       right_padding_color = left_padding_color;
+    }
+
+    /* If we still have stops that don't cover the full [0,1] range
+     * then we need to define a texture-coordinate scale + translate
+     * transform to account for that... */
+    if (stops[n_stops - 1].offset - stops[0].offset < 1) {
+       float range = stops[n_stops - 1].offset - stops[0].offset;
+       entry->scale_x = 1.0 / range;
+       entry->translate_x = -(stops[0].offset * entry->scale_x);
+    }
+
+    width += left_padding + right_padding;
+
+    width = _cairo_cogl_util_next_p2 (width);
+    width = MIN (4096, width); /* lets not go too stupidly big! */
+    format = _cairo_cogl_linear_gradient_format_for_stops (extend_mode, n_stops, stops);
+
+    do {
+       tex = cogl_texture_2d_new_with_size (device->cogl_context,
+                                            width,
+                                            1,
+                                            format,
+                                            &error);
+       if (!tex)
+           g_error_free (error);
+    } while (tex == NULL && width >> 1);
+
+    if (!tex) {
+       status = CAIRO_INT_STATUS_NO_MEMORY;
+       goto BAIL;
+    }
+
+    entry->texture = COGL_TEXTURE (tex);
+    entry->compatibility = compatibilities;
+
+    un_padded_width = width - left_padding - right_padding;
+
+    /* XXX: only when we know the final texture width can we calculate the
+     * scale and translate factors needed to account for padding... */
+    if (un_padded_width != width)
+       entry->scale_x *= (float)un_padded_width / (float)width;
+    if (left_padding)
+       entry->translate_x += (entry->scale_x / (float)un_padded_width) * (float)left_padding;
+
+    offscreen = cogl_offscreen_new_to_texture (tex);
+    cogl_push_framebuffer (COGL_FRAMEBUFFER (offscreen));
+    cogl_ortho (0, width, 1, 0, -1, 100);
+    cogl_framebuffer_clear4f (COGL_FRAMEBUFFER (offscreen),
+                             COGL_BUFFER_BIT_COLOR,
+                             0, 0, 0, 0);
+
+    n_quads = n_stops - 1 + !!left_padding + !!right_padding;
+    n_vertices = 6 * n_quads;
+    vertices = alloca (sizeof (CoglVertexP2C4) * n_vertices);
+    p = vertices;
+    if (left_padding)
+       emit_stop (&p, 0, left_padding, &left_padding_color, &left_padding_color);
+    prev = (float)left_padding;
+    for (n = 1; n < n_stops; n++) {
+       right = (float)left_padding + (float)un_padded_width * stops[n].offset;
+       emit_stop (&p, prev, right, &stops[n-1].color, &stops[n].color);
+       prev = right;
+    }
+    if (right_padding)
+       emit_stop (&p, prev, width, &right_padding_color, &right_padding_color);
+
+    prim = cogl_primitive_new_p2c4 (COGL_VERTICES_MODE_TRIANGLES,
+                                   n_vertices,
+                                   vertices);
+    /* Just use this as the simplest way to setup a default pipeline... */
+    cogl_set_source_color4f (0, 0, 0, 0);
+    cogl_primitive_draw (prim);
+    cogl_object_unref (prim);
+
+    cogl_pop_framebuffer ();
+    cogl_object_unref (offscreen);
+
+    gradient->textures = g_list_prepend (gradient->textures, entry);
+    gradient->cache_entry.size = _cairo_cogl_linear_gradient_size (gradient);
+
+#ifdef DUMP_GRADIENTS_TO_PNG
+    dump_gradient_to_png (COGL_TEXTURE (tex));
+#endif
+
+#warning "FIXME:"
+    /* XXX: it seems the documentation of _cairo_cache_insert isn't true - it
+     * doesn't handle re-adding the same entry gracefully - the cache will
+     * just keep on growing and then it will start randomly evicting things
+     * pointlessly */
+    /* we ignore errors here and just return an uncached gradient */
+    if (likely (! _cairo_cache_insert (&device->linear_cache, &gradient->cache_entry)))
+        _cairo_cogl_linear_gradient_reference (gradient);
+
+    *gradient_out = gradient;
+    return CAIRO_INT_STATUS_SUCCESS;
+
+BAIL:
+    free (entry);
+    if (gradient)
+       _cairo_cogl_linear_gradient_destroy (gradient);
+    return status;
+}
diff --git a/src/cairo-cogl-private.h b/src/cairo-cogl-private.h
new file mode 100644 (file)
index 0000000..13fe5a8
--- /dev/null
@@ -0,0 +1,164 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+
+#ifndef CAIRO_COGL_PRIVATE_H
+#define CAIRO_COGL_PRIVATE_H
+
+#include "cairo-device-private.h"
+#include "cairo-cache-private.h"
+#include "cairo-backend-private.h"
+#include "cairo-default-context-private.h"
+#include "cairo-surface-private.h"
+
+#include <cogl/cogl2-experimental.h>
+
+typedef enum _cairo_cogl_template_type {
+    CAIRO_COGL_TEMPLATE_TYPE_SOLID,
+    CAIRO_COGL_TEMPLATE_TYPE_TEXTURE,
+    CAIRO_COGL_TEMPLATE_TYPE_MASK_SOLID,
+    CAIRO_COGL_TEMPLATE_TYPE_MASK_TEXTURE,
+    CAIRO_COGL_TEMPLATE_TYPE_COUNT
+} cairo_cogl_template_type;
+
+typedef struct _cairo_cogl_device {
+    cairo_device_t base;
+
+    cairo_bool_t backend_vtable_initialized;
+    cairo_backend_t backend;
+
+    /* We save a copy of all the original backend methods that we override so
+     * we can chain up...
+     */
+    cairo_backend_t backend_parent;
+
+    CoglContext *cogl_context;
+
+    CoglTexture *dummy_texture;
+
+    /* This is a sparsely filled set of templates because we don't support
+     * the full range of operators that cairo has. All entries corresponding
+     * to unsupported operators are NULL.
+     *
+     * The CAIRO_OPERATOR_ADD is the operator enum with the highest value that
+     * we support so we at least cap the size of the array by that.
+     *
+     * For each operator we have a template for when we have a solid source
+     * and another for each texture format that could be used as a source.
+     */
+    CoglPipeline *template_pipelines[CAIRO_OPERATOR_ADD + 1][CAIRO_COGL_TEMPLATE_TYPE_COUNT];
+
+    CoglMatrix identity;
+
+    /* Caches 1d linear gradient textures */
+    cairo_cache_t linear_cache;
+
+    cairo_cache_t path_fill_staging_cache;
+    cairo_cache_t path_fill_prim_cache;
+    cairo_cache_t path_stroke_staging_cache;
+    cairo_cache_t path_stroke_prim_cache;
+} cairo_cogl_device_t;
+
+typedef struct _cairo_cogl_clip_primitives {
+    cairo_t *clip;
+    CoglPrimitive **primitives;
+} cairo_cogl_clip_primitives_t;
+
+typedef struct _cairo_cogl_surface {
+    cairo_surface_t base;
+
+    CoglPixelFormat cogl_format;
+    cairo_bool_t ignore_alpha;
+
+    /* We currently have 3 basic kinds of Cogl surfaces:
+     * 1) A light surface simply wrapping a CoglTexture
+     * 2) A CoglOffscreen framebuffer that implicitly also wraps a CoglTexture
+     * 3) A CoglOnscreen framebuffer which could potentially be mapped to
+     *    a CoglTexture (e.g. via tfp on X11) but we don't currently do
+     *    that.
+     */
+
+    CoglTexture *texture;
+    CoglFramebuffer *framebuffer;
+
+    int width;
+    int height;
+
+    GQueue *journal;
+
+    CoglAttributeBuffer *buffer_stack;
+    size_t buffer_stack_size;
+    size_t buffer_stack_offset;
+    guint8 *buffer_stack_pointer;
+
+    cairo_clip_t *last_clip;
+
+    /* A small fifo of recently used cairo_clip_ts paired with CoglPrimitives
+     * that can be used to mask the stencil buffer. */
+    GList *clips_fifo;
+
+    int n_clip_updates_per_frame;
+
+    /* Since the surface backend drawing operator functions don't get
+     * passed the current cairo_t context we don't have a good way
+     * to get our user-coordinates path into our surface_fill function.
+     *
+     * For now we use our _cairo_cogl_context_fill() wrapper to set this
+     * side band data on the surface...
+     */
+    cairo_path_fixed_t *user_path;
+    cairo_matrix_t *ctm;
+    cairo_matrix_t *ctm_inverse;
+    cairo_bool_t path_is_rectangle;
+    double path_rectangle_x;
+    double path_rectangle_y;
+    double path_rectangle_width;
+    double path_rectangle_height;
+} cairo_cogl_surface_t;
+
+cairo_status_t
+_cairo_cogl_path_fixed_rectangle (cairo_path_fixed_t *path,
+                                 cairo_fixed_t x,
+                                 cairo_fixed_t y,
+                                 cairo_fixed_t width,
+                                 cairo_fixed_t height);
+
+cairo_int_status_t
+_cairo_cogl_surface_fill_rectangle (void                    *abstract_surface,
+                                   cairo_operator_t          op,
+                                   const cairo_pattern_t    *source,
+                                   double                    x,
+                                   double                    y,
+                                   double                    width,
+                                   double                    height,
+                                   cairo_matrix_t           *ctm,
+                                   const cairo_clip_t       *clip);
+
+#endif /* CAIRO_COGL_PRIVATE_H */
diff --git a/src/cairo-cogl-surface.c b/src/cairo-cogl-surface.c
new file mode 100644 (file)
index 0000000..ed86acc
--- /dev/null
@@ -0,0 +1,2799 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+#include "cairoint.h"
+
+#include "cairo-cache-private.h"
+#include "cairo-error-private.h"
+#include "cairo-path-fixed-private.h"
+#include "cairo-recording-surface-private.h"
+#include "cairo-surface-clipper-private.h"
+#include "cairo-fixed-private.h"
+#include "cairo-device-private.h"
+#include "cairo-composite-rectangles-private.h"
+#include "cairo-image-surface-inline.h"
+#include "cairo-cogl-private.h"
+#include "cairo-cogl-gradient-private.h"
+#include "cairo-arc-private.h"
+#include "cairo-traps-private.h"
+#include "cairo-cogl-context-private.h"
+#include "cairo-cogl-utils-private.h"
+#include "cairo-box-inline.h"
+#include "cairo-surface-subsurface-inline.h"
+#include "cairo-surface-fallback-private.h"
+#include "cairo-surface-offset-private.h"
+
+#include "cairo-cogl.h"
+
+#include <cogl/cogl2-experimental.h>
+#include <glib.h>
+
+#define CAIRO_COGL_DEBUG 0
+//#define FILL_WITH_COGL_PATH
+//#define USE_CAIRO_PATH_FLATTENER
+#define ENABLE_PATH_CACHE
+//#define DISABLE_BATCHING
+#define USE_COGL_RECTANGLE_API
+#define ENABLE_RECTANGLES_FASTPATH
+
+#if defined (USE_COGL_RECTANGLE_API) || defined (ENABLE_PATH_CACHE)
+#define NEED_COGL_CONTEXT
+#endif
+
+#if CAIRO_COGL_DEBUG && __GNUC__
+#define UNSUPPORTED(reason) ({ \
+    g_warning ("cairo-cogl: hit unsupported operation: %s", reason); \
+    CAIRO_INT_STATUS_UNSUPPORTED; \
+})
+#else
+#define UNSUPPORTED(reason) CAIRO_INT_STATUS_UNSUPPORTED
+#endif
+
+#define CAIRO_COGL_PATH_META_CACHE_SIZE (1024 * 1024)
+
+typedef struct _cairo_cogl_texture_attributes {
+    /* nabbed from cairo_surface_attributes_t... */
+    cairo_matrix_t         matrix;
+    cairo_extend_t         extend;
+    cairo_filter_t         filter;
+    cairo_bool_t           has_component_alpha;
+
+    CoglPipelineWrapMode    s_wrap;
+    CoglPipelineWrapMode    t_wrap;
+} cairo_cogl_texture_attributes_t;
+
+typedef enum _cairo_cogl_journal_entry_type {
+    CAIRO_COGL_JOURNAL_ENTRY_TYPE_RECTANGLE,
+    CAIRO_COGL_JOURNAL_ENTRY_TYPE_PRIMITIVE,
+    CAIRO_COGL_JOURNAL_ENTRY_TYPE_PATH,
+    CAIRO_COGL_JOURNAL_ENTRY_TYPE_CLIP
+} cairo_cogl_journal_entry_type_t;
+
+typedef struct _cairo_cogl_journal_entry {
+    cairo_cogl_journal_entry_type_t type;
+} cairo_cogl_journal_entry_t;
+
+typedef struct _cairo_cogl_journal_clip_entry {
+    cairo_cogl_journal_entry_t base;
+    cairo_clip_t *clip;
+} cairo_cogl_journal_clip_entry_t;
+
+typedef struct _cairo_cogl_journal_rect_entry {
+    cairo_cogl_journal_entry_t base;
+    CoglPipeline *pipeline;
+    float x;
+    float y;
+    float width;
+    float height;
+    int n_layers;
+    cairo_matrix_t ctm;
+} cairo_cogl_journal_rect_entry_t;
+
+typedef struct _cairo_cogl_journal_prim_entry {
+    cairo_cogl_journal_entry_t base;
+    CoglPipeline *pipeline;
+    CoglPrimitive *primitive;
+    gboolean has_transform;
+    cairo_matrix_t transform;
+} cairo_cogl_journal_prim_entry_t;
+
+typedef struct _cairo_cogl_journal_path_entry {
+    cairo_cogl_journal_entry_t base;
+    CoglPipeline *pipeline;
+    CoglPath *path;
+} cairo_cogl_journal_path_entry_t;
+
+typedef struct _cairo_cogl_path_fill_meta {
+    cairo_cache_entry_t        cache_entry;
+    cairo_reference_count_t ref_count;
+    int counter;
+    cairo_path_fixed_t *user_path;
+    cairo_matrix_t ctm_inverse;
+
+    /* TODO */
+#if 0
+    /* A cached path tessellation should be re-usable with different rotations
+     * and translations but not for different scales.
+     *
+     * one idea is to track the diagonal lenghts of a unit rectangle
+     * transformed through the original ctm use to tesselate the geometry
+     * so we can check what the lengths are for any new ctm to know if
+     * this geometry is compatible.
+     */
+#endif
+
+    CoglPrimitive *prim;
+} cairo_cogl_path_fill_meta_t;
+
+typedef struct _cairo_cogl_path_stroke_meta {
+    cairo_cache_entry_t        cache_entry;
+    cairo_reference_count_t ref_count;
+    int counter;
+    cairo_path_fixed_t *user_path;
+    cairo_matrix_t ctm_inverse;
+    cairo_stroke_style_t style;
+    double tolerance;
+
+    /* TODO */
+#if 0
+    /* A cached path tessellation should be re-usable with different rotations
+     * and translations but not for different scales.
+     *
+     * one idea is to track the diagonal lenghts of a unit rectangle
+     * transformed through the original ctm use to tesselate the geometry
+     * so we can check what the lengths are for any new ctm to know if
+     * this geometry is compatible.
+     */
+#endif
+
+    CoglPrimitive *prim;
+} cairo_cogl_path_stroke_meta_t;
+
+static cairo_surface_t *
+_cairo_cogl_surface_create_full (cairo_cogl_device_t *dev,
+                                cairo_bool_t ignore_alpha,
+                                CoglFramebuffer *framebuffer,
+                                CoglTexture *texture);
+
+static cairo_int_status_t
+_cairo_cogl_surface_fill (void                     *abstract_surface,
+                          cairo_operator_t          op,
+                          const cairo_pattern_t            *source,
+                          const cairo_path_fixed_t  *path,
+                          cairo_fill_rule_t         fill_rule,
+                          double                    tolerance,
+                          cairo_antialias_t         antialias,
+                          const cairo_clip_t       *clip);
+
+static void
+_cairo_cogl_journal_flush (cairo_cogl_surface_t *surface);
+
+cairo_private extern const cairo_surface_backend_t _cairo_cogl_surface_backend;
+
+slim_hidden_proto (cairo_cogl_device_create);
+slim_hidden_proto (cairo_cogl_surface_create);
+slim_hidden_proto (cairo_cogl_surface_get_framebuffer);
+slim_hidden_proto (cairo_cogl_surface_get_texture);
+slim_hidden_proto (cairo_cogl_surface_end_frame);
+
+static cairo_cogl_device_t *
+to_device (cairo_device_t *device)
+{
+    return (cairo_cogl_device_t *)device;
+}
+
+/* moves trap points such that they become the actual corners of the trapezoid */
+static void
+_sanitize_trap (cairo_trapezoid_t *t)
+{
+    cairo_trapezoid_t s = *t;
+
+#define FIX(lr, tb, p) \
+    if (t->lr.p.y != t->tb) { \
+        t->lr.p.x = s.lr.p2.x + _cairo_fixed_mul_div_floor (s.lr.p1.x - s.lr.p2.x, s.tb - s.lr.p2.y, s.lr.p1.y - s.lr.p2.y); \
+        t->lr.p.y = s.tb; \
+    }
+    FIX (left,  top,    p1);
+    FIX (left,  bottom, p2);
+    FIX (right, top,    p1);
+    FIX (right, bottom, p2);
+}
+
+static cairo_status_t
+_cairo_cogl_surface_ensure_framebuffer (cairo_cogl_surface_t *surface)
+{
+    GError *error = NULL;
+
+    if (surface->framebuffer)
+       return CAIRO_STATUS_SUCCESS;
+
+    surface->framebuffer = COGL_FRAMEBUFFER (cogl_offscreen_new_to_texture (surface->texture));
+    if (!cogl_framebuffer_allocate (surface->framebuffer, &error)) {
+       g_error_free (error);
+       cogl_object_unref (surface->framebuffer);
+       surface->framebuffer = NULL;
+       return CAIRO_STATUS_NO_MEMORY;
+    }
+
+    cogl_push_framebuffer (surface->framebuffer);
+    cogl_ortho (0, surface->width,
+               surface->height, 0,
+               -1, 100);
+    cogl_pop_framebuffer ();
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_surface_t *
+_cairo_cogl_surface_create_similar (void            *abstract_surface,
+                                   cairo_content_t  content,
+                                   int              width,
+                                   int              height)
+{
+    cairo_cogl_surface_t *reference_surface = abstract_surface;
+    cairo_cogl_surface_t *surface;
+    CoglTexture *texture;
+    cairo_status_t status;
+
+    texture = cogl_texture_new_with_size (width, height,
+                                         COGL_TEXTURE_NO_SLICING,
+                                         (content & CAIRO_CONTENT_COLOR) ?
+                                         COGL_PIXEL_FORMAT_BGRA_8888_PRE :
+                                         COGL_PIXEL_FORMAT_A_8);
+    if (!texture)
+        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+    surface = (cairo_cogl_surface_t *)
+       _cairo_cogl_surface_create_full (to_device(reference_surface->base.device),
+                                        (content & CAIRO_CONTENT_ALPHA) == 0,
+                                        NULL,
+                                        texture);
+    if (unlikely (surface->base.status))
+       return &surface->base;
+
+    status = _cairo_cogl_surface_ensure_framebuffer (surface);
+    if (unlikely (status)) {
+       cairo_surface_destroy (&surface->base);
+       return _cairo_surface_create_in_error (status);
+    }
+
+    return &surface->base;
+}
+
+static cairo_bool_t
+_cairo_cogl_surface_get_extents (void *abstract_surface,
+                                 cairo_rectangle_int_t *extents)
+{
+    cairo_cogl_surface_t *surface = abstract_surface;
+
+    extents->x = 0;
+    extents->y = 0;
+    extents->width  = surface->width;
+    extents->height = surface->height;
+
+    return TRUE;
+}
+
+static void
+_cairo_cogl_journal_free (cairo_cogl_surface_t *surface)
+{
+    GList *l;
+
+    for (l = surface->journal->head; l; l = l->next) {
+       cairo_cogl_journal_entry_t *entry = l->data;
+
+       if (entry->type == CAIRO_COGL_JOURNAL_ENTRY_TYPE_PRIMITIVE) {
+           cairo_cogl_journal_prim_entry_t *prim_entry =
+               (cairo_cogl_journal_prim_entry_t *)entry;
+           cogl_object_unref (prim_entry->primitive);
+       } else if (entry->type == CAIRO_COGL_JOURNAL_ENTRY_TYPE_PATH) {
+           cairo_cogl_journal_path_entry_t *path_entry =
+               (cairo_cogl_journal_path_entry_t *)entry;
+           cogl_object_unref (path_entry->path);
+       }
+    }
+
+    g_queue_free (surface->journal);
+    surface->journal = NULL;
+}
+
+#ifdef FILL_WITH_COGL_PATH
+static void
+_cairo_cogl_journal_log_path (cairo_cogl_surface_t *surface,
+                             CoglPipeline *pipeline,
+                             CoglPath *path)
+{
+    cairo_cogl_journal_path_entry_t *entry;
+
+    if (unlikely (surface->journal == NULL))
+       surface->journal = g_queue_new ();
+
+    /* FIXME: Instead of a GList here we should stack allocate the journal
+     * entries so it would be cheaper to allocate and they can all be freed in
+     * one go after flushing! */
+    entry = g_slice_new (cairo_cogl_journal_path_entry_t);
+    entry->base.type = CAIRO_COGL_JOURNAL_ENTRY_TYPE_PATH;
+
+    entry->pipeline = cogl_object_ref (pipeline);
+    entry->path = cogl_object_ref (path);
+
+    g_queue_push_tail (surface->journal, entry);
+
+#ifdef DISABLE_BATCHING
+    _cairo_cogl_journal_flush (surface);
+#endif
+}
+#endif /* FILL_WITH_COGL_PATH */
+
+static void
+_cairo_cogl_journal_log_primitive (cairo_cogl_surface_t *surface,
+                                  CoglPipeline *pipeline,
+                                  CoglPrimitive *primitive,
+                                  cairo_matrix_t *transform)
+{
+    cairo_cogl_journal_prim_entry_t *entry;
+
+    if (unlikely (surface->journal == NULL))
+       surface->journal = g_queue_new ();
+
+    /* FIXME: Instead of a GList here we should stack allocate the journal
+     * entries so it would be cheaper to allocate and they can all be freed in
+     * one go after flushing! */
+    entry = g_slice_new (cairo_cogl_journal_prim_entry_t);
+    entry->base.type = CAIRO_COGL_JOURNAL_ENTRY_TYPE_PRIMITIVE;
+
+    entry->pipeline = cogl_object_ref (pipeline);
+
+    if (transform) {
+       entry->transform = *transform;
+       entry->has_transform = TRUE;
+    } else
+       entry->has_transform = FALSE;
+
+    entry->primitive = cogl_object_ref (primitive);
+
+    g_queue_push_tail (surface->journal, entry);
+
+#ifdef DISABLE_BATCHING
+    _cairo_cogl_journal_flush (surface);
+#endif
+}
+
+static void
+_cairo_cogl_journal_log_rectangle (cairo_cogl_surface_t *surface,
+                                  CoglPipeline *pipeline,
+                                  float x,
+                                  float y,
+                                  float width,
+                                  float height,
+                                  int n_layers,
+                                  cairo_matrix_t *ctm)
+{
+    cairo_cogl_journal_rect_entry_t *entry;
+
+    if (unlikely (surface->journal == NULL))
+       surface->journal = g_queue_new ();
+
+    /* FIXME: Instead of a GList here we should stack allocate the journal
+     * entries so it would be cheaper to allocate and they can all be freed in
+     * one go after flushing! */
+    entry = g_slice_new (cairo_cogl_journal_rect_entry_t);
+    entry->base.type = CAIRO_COGL_JOURNAL_ENTRY_TYPE_RECTANGLE;
+
+    entry->pipeline = cogl_object_ref (pipeline);
+
+    entry->x = x;
+    entry->y = y;
+    entry->width = width;
+    entry->height = height;
+    entry->ctm = *ctm;
+
+    entry->n_layers = n_layers;
+
+    g_queue_push_tail (surface->journal, entry);
+
+#ifdef DISABLE_BATCHING
+    _cairo_cogl_journal_flush (surface);
+#endif
+}
+
+static void
+_cairo_cogl_journal_log_clip (cairo_cogl_surface_t *surface,
+                             const cairo_clip_t *clip)
+{
+    cairo_cogl_journal_clip_entry_t *entry;
+
+    if (unlikely (surface->journal == NULL))
+       surface->journal = g_queue_new ();
+
+    /* FIXME: Instead of a GList here we should stack allocate the journal
+     * entries so it would be cheaper to allocate and they can all be freed in
+     * one go after flushing! */
+    entry = g_slice_new (cairo_cogl_journal_clip_entry_t);
+    entry->base.type = CAIRO_COGL_JOURNAL_ENTRY_TYPE_CLIP;
+    entry->clip = _cairo_clip_copy (clip);
+
+    g_queue_push_tail (surface->journal, entry);
+}
+
+static void
+_cairo_cogl_journal_discard (cairo_cogl_surface_t *surface)
+{
+    GList *l;
+
+    if (!surface->journal) {
+       assert (surface->last_clip == NULL);
+       return;
+    }
+
+    if (surface->buffer_stack && surface->buffer_stack_offset) {
+       cogl_buffer_unmap (COGL_BUFFER (surface->buffer_stack));
+       cogl_object_unref (surface->buffer_stack);
+       surface->buffer_stack = NULL;
+    }
+
+    for (l = surface->journal->head; l; l = l->next) {
+       cairo_cogl_journal_entry_t *entry = l->data;
+       gsize entry_size;
+
+       switch (entry->type)
+       {
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_CLIP: {
+           cairo_cogl_journal_clip_entry_t *clip_entry =
+               (cairo_cogl_journal_clip_entry_t *)entry;
+           _cairo_clip_destroy (clip_entry->clip);
+           entry_size = sizeof (cairo_cogl_journal_clip_entry_t);
+           break;
+       }
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_RECTANGLE: {
+           cairo_cogl_journal_rect_entry_t *rect_entry =
+               (cairo_cogl_journal_rect_entry_t *)entry;
+           cogl_object_unref (rect_entry->pipeline);
+           entry_size = sizeof (cairo_cogl_journal_rect_entry_t);
+           break;
+       }
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_PRIMITIVE: {
+           cairo_cogl_journal_prim_entry_t *prim_entry =
+               (cairo_cogl_journal_prim_entry_t *)entry;
+           cogl_object_unref (prim_entry->pipeline);
+           cogl_object_unref (prim_entry->primitive);
+           entry_size = sizeof (cairo_cogl_journal_prim_entry_t);
+           break;
+       }
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_PATH: {
+           cairo_cogl_journal_path_entry_t *path_entry =
+               (cairo_cogl_journal_path_entry_t *)entry;
+           cogl_object_unref (path_entry->pipeline);
+           cogl_object_unref (path_entry->path);
+           entry_size = sizeof (cairo_cogl_journal_path_entry_t);
+           break;
+       }
+       default:
+           assert (0); /* not reached! */
+           entry_size = 0; /* avoid compiler warning */
+       }
+       g_slice_free1 (entry_size, entry);
+    }
+
+    g_queue_clear (surface->journal);
+
+    if (surface->last_clip) {
+       _cairo_clip_destroy (surface->last_clip);
+       surface->last_clip = NULL;
+    }
+}
+
+static CoglAttributeBuffer *
+_cairo_cogl_surface_allocate_buffer_space (cairo_cogl_surface_t *surface,
+                                          size_t size,
+                                          size_t *offset,
+                                          void **pointer)
+{
+    /* XXX: In the Cogl journal we found it more efficient to have a pool of
+     * buffers that we re-cycle but for now we simply thow away our stack
+     * buffer each time we flush. */
+    if (unlikely (surface->buffer_stack &&
+                 (surface->buffer_stack_size - surface->buffer_stack_offset) < size)) {
+       cogl_buffer_unmap (COGL_BUFFER (surface->buffer_stack));
+       cogl_object_unref (surface->buffer_stack);
+       surface->buffer_stack = NULL;
+       surface->buffer_stack_size *= 2;
+    }
+
+    if (unlikely (surface->buffer_stack_size < size))
+       surface->buffer_stack_size = size * 2;
+
+    if (unlikely (surface->buffer_stack == NULL)) {
+       surface->buffer_stack = cogl_attribute_buffer_new (surface->buffer_stack_size, NULL);
+       surface->buffer_stack_pointer =
+           cogl_buffer_map (COGL_BUFFER (surface->buffer_stack),
+                            COGL_BUFFER_ACCESS_WRITE,
+                            COGL_BUFFER_MAP_HINT_DISCARD);
+       surface->buffer_stack_offset = 0;
+    }
+
+    *pointer = surface->buffer_stack_pointer + surface->buffer_stack_offset;
+    *offset = surface->buffer_stack_offset;
+
+    surface->buffer_stack_offset += size;
+    return cogl_object_ref (surface->buffer_stack);
+}
+
+
+static CoglAttributeBuffer *
+_cairo_cogl_traps_to_triangles_buffer (cairo_cogl_surface_t *surface,
+                                      cairo_traps_t *traps,
+                                      size_t *offset,
+                                      gboolean one_shot)
+{
+    CoglAttributeBuffer *buffer;
+    int n_traps = traps->num_traps;
+    int i;
+    CoglVertexP2 *triangles;
+
+    if (one_shot) {
+       buffer = _cairo_cogl_surface_allocate_buffer_space (surface,
+                                                           n_traps * sizeof (CoglVertexP2) * 6,
+                                                           offset,
+                                                           (void **)&triangles);
+       if (!buffer)
+           return NULL;
+    } else {
+       buffer = cogl_attribute_buffer_new (n_traps * sizeof (CoglVertexP2) * 6, NULL);
+       if (!buffer)
+           return NULL;
+       triangles = cogl_buffer_map (COGL_BUFFER (buffer),
+                                    COGL_BUFFER_ACCESS_WRITE,
+                                    COGL_BUFFER_MAP_HINT_DISCARD);
+       if (!triangles)
+           return NULL;
+       *offset = 0;
+    }
+
+    /* XXX: This is can be very expensive. I'm not sure a.t.m if it's
+     * predominantly the bandwidth required or the cost of the fixed_to_float
+     * conversions but either way we should try using an index buffer to
+     * reduce the amount we upload by 1/3 (offset by allocating and uploading
+     * indices though) sadly though my experience with the intel mesa drivers
+     * is that slow paths can easily be hit when starting to use indices.
+     */
+    for (i = 0; i < n_traps; i++)
+    {
+       CoglVertexP2 *p = &triangles[i * 6];
+       cairo_trapezoid_t *trap = &traps->traps[i];
+
+       p[0].x = _cairo_cogl_util_fixed_to_float (trap->left.p1.x);
+       p[0].y = _cairo_cogl_util_fixed_to_float (trap->left.p1.y);
+
+       p[1].x = _cairo_cogl_util_fixed_to_float (trap->left.p2.x);
+       p[1].y = _cairo_cogl_util_fixed_to_float (trap->left.p2.y);
+
+       p[2].x = _cairo_cogl_util_fixed_to_float (trap->right.p2.x);
+       p[2].y = _cairo_cogl_util_fixed_to_float (trap->right.p2.y);
+
+       p[3].x = _cairo_cogl_util_fixed_to_float (trap->left.p1.x);
+       p[3].y = _cairo_cogl_util_fixed_to_float (trap->left.p1.y);
+
+       p[4].x = _cairo_cogl_util_fixed_to_float (trap->right.p2.x);
+       p[4].y = _cairo_cogl_util_fixed_to_float (trap->right.p2.y);
+
+       p[5].x = _cairo_cogl_util_fixed_to_float (trap->right.p1.x);
+       p[5].y = _cairo_cogl_util_fixed_to_float (trap->right.p1.y);
+    }
+
+    if (!one_shot)
+       cogl_buffer_unmap (COGL_BUFFER (buffer));
+
+    return buffer;
+}
+
+/* Used for solid fills, in this case we just need a mesh made of
+ * a single (2-component) position attribute. */
+static CoglPrimitive *
+_cairo_cogl_traps_to_composite_prim_p2 (cairo_cogl_surface_t *surface,
+                                       cairo_traps_t *traps,
+                                       gboolean one_shot)
+{
+    size_t offset;
+    CoglAttributeBuffer *buffer = _cairo_cogl_traps_to_triangles_buffer (surface, traps, &offset, one_shot);
+    CoglAttribute *pos = cogl_attribute_new (buffer,
+                                            "cogl_position_in",
+                                            sizeof (CoglVertexP2),
+                                            offset,
+                                            2,
+                                            COGL_ATTRIBUTE_TYPE_FLOAT);
+    CoglPrimitive *prim;
+
+    /* The attribute will have taken a reference on the buffer */
+    cogl_object_unref (buffer);
+
+    prim = cogl_primitive_new (COGL_VERTICES_MODE_TRIANGLES,
+                              traps->num_traps * 6, pos, NULL);
+
+    /* The primitive will now keep the attribute alive... */
+    cogl_object_unref (pos);
+
+    return prim;
+}
+
+/* Used for surface fills, in this case we need a mesh made of a single
+ * (2-component) position attribute + we also alias the same attribute as
+ * (2-component) texture coordinates */
+static CoglPrimitive *
+_cairo_cogl_traps_to_composite_prim_p2t2 (cairo_cogl_surface_t *surface,
+                                         cairo_traps_t *traps,
+                                         gboolean one_shot)
+{
+    size_t offset;
+    CoglAttributeBuffer *buffer = _cairo_cogl_traps_to_triangles_buffer (surface, traps, &offset, one_shot);
+    CoglAttribute *pos = cogl_attribute_new (buffer,
+                                            "cogl_position_in",
+                                            sizeof (CoglVertexP2),
+                                            offset,
+                                            2,
+                                            COGL_ATTRIBUTE_TYPE_FLOAT);
+    CoglAttribute *tex_coords = cogl_attribute_new (buffer,
+                                                   "cogl_tex_coord0_in",
+                                                   sizeof (CoglVertexP2),
+                                                   0,
+                                                   2,
+                                                   COGL_ATTRIBUTE_TYPE_FLOAT);
+    CoglPrimitive *prim;
+
+    /* The attributes will have taken references on the buffer */
+    cogl_object_unref (buffer);
+
+    prim = cogl_primitive_new (COGL_VERTICES_MODE_TRIANGLES,
+                              traps->num_traps * 6, pos, tex_coords, NULL);
+
+    /* The primitive will now keep the attributes alive... */
+    cogl_object_unref (pos);
+    cogl_object_unref (tex_coords);
+
+    return prim;
+}
+
+static CoglPrimitive *
+_cairo_cogl_traps_to_composite_prim (cairo_cogl_surface_t *surface,
+                                    cairo_traps_t *traps,
+                                    int n_layers,
+                                    gboolean one_shot)
+{
+    int n_traps = traps->num_traps;
+    int i;
+
+    /* XXX: Ideally we would skip tessellating to traps entirely since
+     * given their representation, conversion to triangles is quite expensive.
+     *
+     * This simplifies the conversion to triangles by making the end points of
+     * the two side lines actually just correspond to the corners of the
+     * traps.
+     */
+    for (i = 0; i < n_traps; i++)
+       _sanitize_trap (&traps->traps[i]);
+
+    if (n_layers == 0)
+       return _cairo_cogl_traps_to_composite_prim_p2 (surface, traps, one_shot);
+    else {
+       assert (n_layers == 1);
+       return _cairo_cogl_traps_to_composite_prim_p2t2 (surface, traps, one_shot);
+    }
+}
+
+static cairo_int_status_t
+_cairo_cogl_fill_to_primitive (cairo_cogl_surface_t    *surface,
+                              const cairo_path_fixed_t *path,
+                              cairo_fill_rule_t         fill_rule,
+                              double                    tolerance,
+                              int                       n_layers,
+                              cairo_bool_t              one_shot,
+                              CoglPrimitive           **primitive,
+                              size_t                   *size)
+{
+    cairo_traps_t traps;
+    cairo_int_status_t status;
+
+    _cairo_traps_init (&traps);
+    status = _cairo_path_fixed_fill_to_traps (path, fill_rule, tolerance, &traps);
+    if (unlikely (status))
+       goto BAIL;
+
+    if (traps.num_traps == 0) {
+       status = CAIRO_INT_STATUS_NOTHING_TO_DO;
+       goto BAIL;
+    }
+
+    *size = traps.num_traps * sizeof (CoglVertexP2) * 6;
+
+    *primitive = _cairo_cogl_traps_to_composite_prim (surface, &traps, n_layers, one_shot);
+    if (!*primitive) {
+       status = CAIRO_INT_STATUS_NO_MEMORY;
+       goto BAIL;
+    }
+
+BAIL:
+    _cairo_traps_fini (&traps);
+    return status;
+}
+
+static void
+_cairo_cogl_clip_push_box (const cairo_box_t *box)
+{
+    if (_cairo_box_is_pixel_aligned (box)) {
+       cairo_rectangle_int_t rect;
+       _cairo_box_round_to_rectangle (box, &rect);
+       cogl_clip_push_window_rectangle (rect.x, rect.y,
+                                        rect.width, rect.height);
+    } else {
+       double x1, y1, x2, y2;
+       _cairo_box_to_doubles (box, &x1, &y1, &x2, &y2);
+       cogl_clip_push_rectangle (x1, y1, x2, y2);
+    }
+}
+
+static void
+_cairo_cogl_journal_flush (cairo_cogl_surface_t *surface)
+{
+    GList *l;
+    int clip_stack_depth = 0;
+    int i;
+
+    if (!surface->journal)
+       return;
+
+    if (surface->buffer_stack && surface->buffer_stack_offset) {
+       cogl_buffer_unmap (COGL_BUFFER (surface->buffer_stack));
+       cogl_object_unref (surface->buffer_stack);
+       surface->buffer_stack = NULL;
+    }
+
+    cogl_set_framebuffer (surface->framebuffer);
+
+    cogl_push_matrix ();
+
+    for (l = surface->journal->head; l; l = l->next) {
+       cairo_cogl_journal_entry_t *entry = l->data;
+
+       switch (entry->type)
+       {
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_CLIP: {
+           cairo_cogl_journal_clip_entry_t *clip_entry =
+               (cairo_cogl_journal_clip_entry_t *)entry;
+           cairo_clip_path_t *path;
+#if 0
+           cairo_bool_t checked_for_primitives = FALSE;
+           cairo_cogl_clip_primitives_t *clip_primitives;
+#endif
+
+           for (i = 0; i < clip_stack_depth; i++)
+               cogl_clip_pop ();
+           clip_stack_depth = 0;
+
+           for (path = clip_entry->clip->path, i = 0; path; path = path->prev, i++) {
+               cairo_rectangle_int_t extents;
+               cairo_int_status_t status;
+               CoglPrimitive *prim;
+               size_t prim_size;
+
+               _cairo_path_fixed_approximate_clip_extents (&path->path, &extents);
+
+               /* TODO - maintain a fifo of the last 10 used clips with cached
+                * primitives to see if we can avoid tesselating the path and
+                * uploading the vertices...
+                */
+#if 0
+               if (!checked_for_primitives) {
+                   clip_primitives = find_clip_primitives (clip);
+                   checked_for_primitives = TRUE;
+               }
+               if (clip_primitives)
+                   prim = clip_primitives->primitives[i];
+#endif
+               status = _cairo_cogl_fill_to_primitive (surface,
+                                                       &path->path,
+                                                       path->fill_rule,
+                                                       path->tolerance,
+                                                       0,
+                                                       TRUE,
+                                                       &prim,
+                                                       &prim_size);
+               if (unlikely (status)) {
+                   g_warning ("Failed to get primitive for clip path while flushing journal");
+                   continue;
+               }
+               clip_stack_depth++;
+               cogl_clip_push_primitive (prim,
+                                         extents.x, extents.y,
+                                         extents.x + extents.width,
+                                         extents.y + extents.height);
+               cogl_object_unref (prim);
+           }
+
+           for (i = 0; i < clip_entry->clip->num_boxes; i++) {
+               clip_stack_depth++;
+               _cairo_cogl_clip_push_box (&clip_entry->clip->boxes[i]);
+           }
+
+           surface->n_clip_updates_per_frame++;
+           break;
+       }
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_RECTANGLE: {
+           cairo_cogl_journal_rect_entry_t *rect_entry =
+               (cairo_cogl_journal_rect_entry_t *)entry;
+           float tex_coords[8];
+           float x1 = rect_entry->x;
+           float y1 = rect_entry->y;
+           float x2 = rect_entry->x + rect_entry->width;
+           float y2 = rect_entry->y + rect_entry->height;
+           cairo_matrix_t *ctm = &rect_entry->ctm;
+           float ctmfv[16] = {
+               ctm->xx, ctm->yx, 0, 0,
+               ctm->xy, ctm->yy, 0, 0,
+               0,           0,       1, 0,
+               ctm->x0, ctm->y0, 0, 1
+           };
+           CoglMatrix transform;
+
+           cogl_matrix_init_from_array (&transform, ctmfv);
+
+           if (rect_entry->n_layers) {
+               g_assert (rect_entry->n_layers <= 2);
+               tex_coords[0] = x1;
+               tex_coords[1] = y1;
+               tex_coords[2] = x2;
+               tex_coords[3] = y2;
+               if (rect_entry->n_layers > 1)
+                   memcpy (&tex_coords[4], tex_coords, sizeof (float) * 4);
+           }
+
+           cogl_set_source (rect_entry->pipeline);
+           cogl_push_matrix ();
+           cogl_transform (&transform);
+           cogl_rectangle_with_multitexture_coords (x1, y1, x2, y2,
+                                                    tex_coords, 4 * rect_entry->n_layers);
+           cogl_pop_matrix ();
+           break;
+       }
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_PRIMITIVE: {
+           cairo_cogl_journal_prim_entry_t *prim_entry =
+               (cairo_cogl_journal_prim_entry_t *)entry;
+           CoglMatrix transform;
+
+           cogl_push_matrix ();
+           if (prim_entry->has_transform) {
+               cairo_matrix_t *ctm = &prim_entry->transform;
+               float ctmfv[16] = {
+                   ctm->xx, ctm->yx, 0, 0,
+                   ctm->xy, ctm->yy, 0, 0,
+                   0,       0,       1, 0,
+                   ctm->x0, ctm->y0, 0, 1
+               };
+               cogl_matrix_init_from_array (&transform, ctmfv);
+               cogl_transform (&transform);
+           } else {
+               cogl_matrix_init_identity (&transform);
+               cogl_set_modelview_matrix (&transform);
+           }
+
+           cogl_set_source (prim_entry->pipeline);
+           cogl_primitive_draw (prim_entry->primitive);
+           cogl_pop_matrix ();
+           break;
+       }
+       case CAIRO_COGL_JOURNAL_ENTRY_TYPE_PATH: {
+           cairo_cogl_journal_path_entry_t *path_entry =
+               (cairo_cogl_journal_path_entry_t *)entry;
+
+           cogl_set_source (path_entry->pipeline);
+           cogl_path_fill (path_entry->path);
+           break;
+       }
+       default:
+           assert (0); /* not reached! */
+       }
+    }
+
+    cogl_pop_matrix ();
+
+    for (i = 0; i < clip_stack_depth; i++)
+       cogl_clip_pop ();
+
+    _cairo_cogl_journal_discard (surface);
+}
+
+static cairo_status_t
+_cairo_cogl_surface_flush (void *abstract_surface)
+{
+    cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)abstract_surface;
+
+    _cairo_cogl_journal_flush (surface);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_surface_finish (void *abstract_surface)
+{
+    cairo_cogl_surface_t *surface = abstract_surface;
+
+    if (surface->texture)
+       cogl_object_unref (surface->texture);
+
+    if (surface->framebuffer)
+       cogl_object_unref (surface->framebuffer);
+
+    if (surface->journal)
+       _cairo_cogl_journal_free (surface);
+
+    /*XXX wtf */
+    cairo_device_release (surface->base.device);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static CoglPixelFormat
+get_cogl_format_from_cairo_format (cairo_format_t cairo_format);
+
+/* XXX: We often use RGBA format for onscreen framebuffers so make sure
+ * to handle CAIRO_FORMAT_INVALID sensibly */
+static cairo_format_t
+get_cairo_format_from_cogl_format (CoglPixelFormat format)
+{
+    switch ((int)format)
+    {
+    case COGL_PIXEL_FORMAT_A_8:
+       return CAIRO_FORMAT_A8;
+    case COGL_PIXEL_FORMAT_RGB_565:
+       return CAIRO_FORMAT_RGB16_565;
+
+    case COGL_PIXEL_FORMAT_BGRA_8888_PRE:
+    case COGL_PIXEL_FORMAT_ARGB_8888_PRE:
+    case COGL_PIXEL_FORMAT_RGBA_8888_PRE:
+       /* Note: this is ambiguous since CAIRO_FORMAT_RGB24
+        * would also map to the same CoglPixelFormat */
+       return CAIRO_FORMAT_ARGB32;
+
+    default:
+       g_warning("bad format: %x a? %d, bgr? %d, pre %d, format: %d\n",
+                 format,
+                 format & COGL_A_BIT,
+                 format & COGL_BGR_BIT,
+                 format & COGL_PREMULT_BIT,
+                 format & ~(COGL_A_BIT | COGL_BGR_BIT | COGL_PREMULT_BIT));
+       return CAIRO_FORMAT_INVALID;
+    }
+}
+
+static CoglPixelFormat
+get_cogl_format_from_cairo_format (cairo_format_t cairo_format)
+{
+    switch (cairo_format)
+    {
+    case CAIRO_FORMAT_ARGB32:
+    case CAIRO_FORMAT_RGB24:
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+       return COGL_PIXEL_FORMAT_BGRA_8888_PRE;
+#else
+       return COGL_PIXEL_FORMAT_ARGB_8888_PRE;
+#endif
+    case CAIRO_FORMAT_A8:
+       return COGL_PIXEL_FORMAT_A_8;
+    case CAIRO_FORMAT_RGB16_565:
+       return COGL_PIXEL_FORMAT_RGB_565;
+    case CAIRO_FORMAT_INVALID:
+    case CAIRO_FORMAT_A1:
+    case CAIRO_FORMAT_RGB30:
+       return 0;
+    }
+
+    g_warn_if_reached ();
+    return 0;
+}
+
+static cairo_status_t
+_cairo_cogl_surface_read_rect_to_image_surface (cairo_cogl_surface_t   *surface,
+                                               cairo_rectangle_int_t  *interest,
+                                               cairo_image_surface_t **image_out)
+{
+    cairo_image_surface_t *image;
+    cairo_status_t status;
+    cairo_format_t cairo_format;
+    CoglPixelFormat cogl_format;
+
+    /* TODO: Add cogl_texture_get_region() API so we don't have to ensure the
+     * surface is bound to an fbo to read back pixels */
+    status = _cairo_cogl_surface_ensure_framebuffer (surface);
+    if (unlikely (status))
+       return status;
+
+    cairo_format = get_cairo_format_from_cogl_format (surface->cogl_format);
+    if (cairo_format == CAIRO_FORMAT_INVALID) {
+       cairo_format = CAIRO_FORMAT_ARGB32;
+       cogl_format = get_cogl_format_from_cairo_format (cairo_format);
+    } else {
+       cogl_format = cogl_framebuffer_get_color_format (surface->framebuffer);
+    }
+
+    image = (cairo_image_surface_t *)
+       cairo_image_surface_create (cairo_format, surface->width, surface->height);
+    if (image->base.status)
+       return image->base.status;
+
+    /* TODO: Add cogl_framebuffer_read_pixels() API */
+    cogl_push_framebuffer (surface->framebuffer);
+    cogl_read_pixels (0, 0, surface->width, surface->height,
+                     COGL_READ_PIXELS_COLOR_BUFFER,
+                     cogl_format,
+                     image->data);
+    cogl_pop_framebuffer ();
+
+    *image_out = image;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_cogl_surface_acquire_source_image (void                  *abstract_surface,
+                                         cairo_image_surface_t **image_out,
+                                         void                  **image_extra)
+{
+    cairo_cogl_surface_t *surface = abstract_surface;
+    cairo_status_t status;
+
+    if (surface->texture) {
+       cairo_format_t format = get_cairo_format_from_cogl_format (surface->cogl_format);
+       cairo_image_surface_t *image = (cairo_image_surface_t *)
+           cairo_image_surface_create (format, surface->width, surface->height);
+       if (image->base.status)
+           return image->base.status;
+
+       cogl_texture_get_data (surface->texture,
+                              cogl_texture_get_format (surface->texture),
+                              0,
+                              image->data);
+
+       image->base.is_clear = FALSE;
+       *image_out = image;
+    } else {
+       cairo_rectangle_int_t extents = {
+           0, 0, surface->width, surface->height
+       };
+       status = _cairo_cogl_surface_read_rect_to_image_surface (surface, &extents,
+                                                                image_out);
+       if (unlikely (status))
+           return status;
+    }
+
+    *image_extra = NULL;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_cogl_surface_release_source_image (void                 *abstract_surface,
+                                         cairo_image_surface_t *image,
+                                         void                  *image_extra)
+{
+    cairo_surface_destroy (&image->base);
+}
+
+static cairo_status_t
+_cairo_cogl_surface_clear (cairo_cogl_surface_t *surface,
+                          const cairo_color_t *color)
+{
+    /* Anything batched in the journal up until now is redundant... */
+    _cairo_cogl_journal_discard (surface);
+
+    /* XXX: we currently implicitly clear the depth and stencil buffer here
+     * but since we use the framebuffer_discard extension when available I
+     * suppose this doesn't matter too much.
+     *
+     * The main concern is that we want to avoid re-loading an external z
+     * buffer at the start of each frame, but also many gpu architectures have
+     * optimizations for how they handle the depth/stencil buffers and can get
+     * upset if they aren't cleared together at the start of the frame.
+     *
+     * FIXME: we need a way to assert that the clip stack currently isn't
+     * using the stencil buffer before clearing it here!
+     */
+    cogl_framebuffer_clear4f (surface->framebuffer,
+                             COGL_BUFFER_BIT_COLOR |
+                             COGL_BUFFER_BIT_DEPTH |
+                             COGL_BUFFER_BIT_STENCIL,
+                             color->red * color->alpha,
+                             color->green * color->alpha,
+                             color->blue * color->alpha,
+                             color->alpha);
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_status_t
+_cairo_cogl_path_fixed_rectangle (cairo_path_fixed_t *path,
+                                 cairo_fixed_t x,
+                                 cairo_fixed_t y,
+                                 cairo_fixed_t width,
+                                 cairo_fixed_t height)
+{
+    cairo_status_t status;
+
+    status = _cairo_path_fixed_move_to (path, x, y);
+    if (unlikely (status))
+       return status;
+
+    status = _cairo_path_fixed_rel_line_to (path, width, 0);
+    if (unlikely (status))
+       return status;
+
+    status = _cairo_path_fixed_rel_line_to (path, 0, height);
+    if (unlikely (status))
+       return status;
+
+    status = _cairo_path_fixed_rel_line_to (path, -width, 0);
+    if (unlikely (status))
+       return status;
+
+    status = _cairo_path_fixed_close_path (path);
+    if (unlikely (status))
+       return status;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
+_cairo_cogl_surface_paint (void                  *abstract_surface,
+                           cairo_operator_t       op,
+                           const cairo_pattern_t *source,
+                           const cairo_clip_t    *clip)
+{
+    cairo_cogl_surface_t *surface;
+    cairo_path_fixed_t path;
+    cairo_status_t status;
+    cairo_matrix_t identity;
+
+    if (clip == NULL) {
+       if (op == CAIRO_OPERATOR_CLEAR)
+            return _cairo_cogl_surface_clear (abstract_surface, CAIRO_COLOR_TRANSPARENT);
+       else if (source->type == CAIRO_PATTERN_TYPE_SOLID &&
+                (op == CAIRO_OPERATOR_SOURCE ||
+                 (op == CAIRO_OPERATOR_OVER && (((cairo_surface_t *)abstract_surface)->is_clear || _cairo_pattern_is_opaque_solid (source))))) {
+            return _cairo_cogl_surface_clear (abstract_surface,
+                                             &((cairo_solid_pattern_t *) source)->color);
+        }
+    }
+
+    /* fallback to handling the paint in terms of a fill... */
+
+    surface = abstract_surface;
+
+    _cairo_path_fixed_init (&path);
+
+    status = _cairo_cogl_path_fixed_rectangle (&path, 0, 0, surface->width, surface->height);
+    if (unlikely (status))
+       goto BAIL;
+
+#ifdef NEED_COGL_CONTEXT
+    /* XXX: in cairo-cogl-context.c we set some sideband data on the
+     * surface before issuing a fill so we need to do that here too... */
+    surface->user_path = &path;
+    cairo_matrix_init_identity (&identity);
+    surface->ctm = &identity;
+    surface->ctm_inverse = &identity;
+    surface->path_is_rectangle = TRUE;
+    surface->path_rectangle_x = 0;
+    surface->path_rectangle_y = 0;
+    surface->path_rectangle_width = surface->width;
+    surface->path_rectangle_height = surface->height;
+#endif
+
+    status = _cairo_cogl_surface_fill (abstract_surface,
+                                      op,
+                                      source,
+                                      &path,
+                                      CAIRO_FILL_RULE_WINDING,
+                                      1,
+                                      CAIRO_ANTIALIAS_DEFAULT,
+                                      clip);
+BAIL:
+    _cairo_path_fixed_fini (&path);
+    return status;
+}
+
+static CoglPipelineWrapMode
+get_cogl_wrap_mode_for_extend (cairo_extend_t extend_mode)
+{
+    switch (extend_mode)
+    {
+    case CAIRO_EXTEND_NONE:
+       return COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE;
+    case CAIRO_EXTEND_PAD:
+       return COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE;
+    case CAIRO_EXTEND_REPEAT:
+       return COGL_PIPELINE_WRAP_MODE_REPEAT;
+    case CAIRO_EXTEND_REFLECT:
+       /* TODO: return COGL_PIPELINE_WRAP_MODE_MIRROR; */
+       return CAIRO_EXTEND_REPEAT;
+    }
+    assert (0); /* not reached */
+    return COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE;
+}
+
+#if 0
+/* Given an arbitrary texture, check if it's already a pot texture and simply
+ * return it back if so. If not create a new pot texture, scale the old to
+ * fill it, unref the old and return a pointer to the new pot texture. */
+static cairo_int_status_t
+_cairo_cogl_get_pot_texture (CoglContext *context,
+                            CoglTexture *texture,
+                            CoglTexture **pot_texture)
+{
+    int width = cogl_texture_get_width (texture);
+    int height = cogl_texture_get_height (texture);
+    int pot_width;
+    int pot_height;
+    CoglHandle offscreen = NULL;
+    CoglTexture2D *pot = NULL;
+    GError *error;
+
+    pot_width = _cairo_cogl_util_next_p2 (width);
+    pot_height = _cairo_cogl_util_next_p2 (height);
+
+    if (pot_width == width && pot_height == height)
+       return CAIRO_INT_STATUS_SUCCESS;
+
+    for (;;) {
+       error = NULL;
+       pot = cogl_texture_2d_new_with_size (context,
+                                            pot_width,
+                                            pot_height,
+                                            cogl_texture_get_format (texture),
+                                            &error);
+       if (pot)
+           break;
+       else
+           g_error_free (error);
+
+       if (pot_width > pot_height)
+           pot_width >>= 1;
+       else
+           pot_height >>= 1;
+
+       if (!pot_width || !pot_height)
+           break;
+    }
+
+    *pot_texture = COGL_TEXTURE (pot);
+
+    if (!pot)
+       return CAIRO_INT_STATUS_NO_MEMORY;
+
+    /* Use the GPU to do a bilinear filtered scale from npot to pot... */
+    offscreen = cogl_offscreen_new_to_texture (COGL_TEXTURE (pot));
+    error = NULL;
+    if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (offscreen), &error)) {
+       /* NB: if we don't pass an error then Cogl is allowed to simply abort
+        * automatically. */
+       g_error_free (error);
+       cogl_object_unref (pot);
+       *pot_texture = NULL;
+       return CAIRO_INT_STATUS_NO_MEMORY;
+    }
+
+    cogl_push_framebuffer (COGL_FRAMEBUFFER (offscreen));
+    cogl_set_source_texture (texture);
+    cogl_rectangle (-1, 1, 1, -1);
+    cogl_pop_framebuffer ();
+
+    cogl_object_unref (offscreen);
+}
+#endif
+
+/* NB: a reference for the texture is transferred to the caller which should
+ * be unrefed */
+static CoglTexture *
+_cairo_cogl_acquire_surface_texture (cairo_cogl_surface_t  *reference_surface,
+                                    cairo_surface_t       *abstract_surface)
+{
+    cairo_image_surface_t *image;
+    cairo_image_surface_t *acquired_image = NULL;
+    void *image_extra;
+    CoglPixelFormat format;
+    cairo_image_surface_t *image_clone = NULL;
+    CoglTexture2D *texture;
+    GError *error = NULL;
+    cairo_surface_t *clone;
+
+    if (abstract_surface->device == reference_surface->base.device) {
+       cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)abstract_surface;
+       _cairo_cogl_surface_flush (surface);
+       return surface->texture ? cogl_object_ref (surface->texture) : NULL;
+    }
+
+    if (abstract_surface->type == CAIRO_SURFACE_TYPE_COGL) {
+       if (_cairo_surface_is_subsurface (abstract_surface)) {
+           cairo_cogl_surface_t *surface;
+
+           surface = (cairo_cogl_surface_t *)
+               _cairo_surface_subsurface_get_target (abstract_surface);
+           if (surface->base.device == reference_surface->base.device)
+               return surface->texture ? cogl_object_ref (surface->texture) : NULL;
+       }
+    }
+
+    clone = _cairo_surface_has_snapshot (abstract_surface, &_cairo_cogl_surface_backend);
+    if (clone) {
+       cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)clone;
+       return surface->texture ? cogl_object_ref (surface->texture) : NULL;
+    }
+
+    g_warning ("Uploading image surface to texture");
+
+    if (_cairo_surface_is_image (abstract_surface)) {
+       image = (cairo_image_surface_t *)abstract_surface;
+    } else {
+       cairo_status_t status = _cairo_surface_acquire_source_image (abstract_surface,
+                                                                    &acquired_image, &image_extra);
+       if (unlikely (status)) {
+           g_warning ("acquire_source_image failed: %s [%d]\n",
+                      cairo_status_to_string (status), status);
+           return NULL;
+       }
+       image = acquired_image;
+    }
+
+    format = get_cogl_format_from_cairo_format (image->format);
+    if (!format)
+    {
+       image_clone = _cairo_image_surface_coerce (image);
+       if (unlikely (image_clone->base.status)) {
+           g_warning ("image_surface_coerce failed");
+           texture = NULL;
+           goto BAIL;
+       }
+
+       format = get_cogl_format_from_cairo_format (image_clone->format);
+       assert (format);
+    }
+
+    texture = cogl_texture_2d_new_from_data (to_device(reference_surface->base.device)->cogl_context,
+                                            image->width,
+                                            image->height,
+                                            format, /* incoming */
+                                            format, /* desired */
+                                            image->stride,
+                                            image->data,
+                                            &error);
+    if (!texture) {
+       g_warning ("Failed to allocate texture: %s", error->message);
+       g_error_free (error);
+       goto BAIL;
+    }
+
+    clone = _cairo_cogl_surface_create_full (to_device(reference_surface->base.device),
+                                            reference_surface->ignore_alpha,
+                                            NULL, COGL_TEXTURE (texture));
+
+    _cairo_surface_attach_snapshot (abstract_surface, clone, NULL);
+
+    /* Attaching the snapshot will take a reference on the clone surface... */
+    cairo_surface_destroy (clone);
+
+BAIL:
+    if (image_clone)
+       cairo_surface_destroy (&image_clone->base);
+    if (acquired_image)
+       _cairo_surface_release_source_image (abstract_surface, acquired_image, image_extra);
+
+    return COGL_TEXTURE (texture);
+}
+
+/* NB: a reference for the texture is transferred to the caller which should
+ * be unrefed */
+static CoglTexture *
+_cairo_cogl_acquire_pattern_texture (const cairo_pattern_t *pattern,
+                                    cairo_cogl_surface_t *destination,
+                                    const cairo_rectangle_int_t *extents,
+                                    const cairo_rectangle_int_t *sample,
+                                    cairo_cogl_texture_attributes_t *attributes)
+{
+    CoglTexture *texture = NULL;
+
+    switch ((int)pattern->type)
+    {
+    case CAIRO_PATTERN_TYPE_SURFACE: {
+       cairo_surface_t *surface = ((cairo_surface_pattern_t *)pattern)->surface;
+       texture = _cairo_cogl_acquire_surface_texture (destination, surface);
+       if (!texture)
+           return NULL;
+
+       /* XXX: determine if it would have no effect to change the
+        * extend mode to EXTEND_PAD instead since we can simply map
+        * EXTEND_PAD to CLAMP_TO_EDGE without needing fragment shader
+        * tricks or extra border texels. */
+#if 0
+       /* TODO: We still need to consider HW such as SGX which doesn't have
+        * full support for NPOT textures. */
+       if (pattern->extend == CAIRO_EXTEND_REPEAT || pattern->extend == CAIRO_EXTEND_REFLECT) {
+           _cairo_cogl_get_pot_texture ();
+       }
+#endif
+
+       cairo_matrix_init_identity (&attributes->matrix);
+
+       /* Convert from un-normalized source coordinates in backend
+        * coordinates to normalized texture coordinates */
+       cairo_matrix_scale (&attributes->matrix,
+                           1.0f / cogl_texture_get_width (texture),
+                           1.0f / cogl_texture_get_height (texture));
+
+       /* XXX: need to multiply in the pattern->matrix */
+
+       attributes->extend = pattern->extend;
+       attributes->filter = CAIRO_FILTER_BILINEAR;
+       attributes->has_component_alpha = pattern->has_component_alpha;
+
+       attributes->s_wrap = get_cogl_wrap_mode_for_extend (pattern->extend);
+       attributes->t_wrap = attributes->s_wrap;
+
+       return texture;
+    }
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH: {
+       cairo_surface_t *surface;
+       cairo_matrix_t texture_matrix;
+
+       surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                             extents->width, extents->height);
+       if (_cairo_surface_offset_paint (surface,
+                                        extents->x, extents->y,
+                                        CAIRO_OPERATOR_SOURCE,
+                                        pattern, NULL)) {
+           cairo_surface_destroy (surface);
+           return NULL;
+       }
+
+       texture = _cairo_cogl_acquire_surface_texture (destination, surface);
+       if (!texture)
+           goto BAIL;
+
+       cairo_matrix_init_identity (&texture_matrix);
+
+       /* Convert from un-normalized source coordinates in backend
+        * coordinates to normalized texture coordinates */
+       cairo_matrix_scale (&texture_matrix,
+                           1.0f / cogl_texture_get_width (texture),
+                           1.0f / cogl_texture_get_height (texture));
+
+       cairo_matrix_translate (&texture_matrix, -extents->x, -extents->y);
+
+       attributes->matrix = texture_matrix;
+       attributes->extend = pattern->extend;
+       attributes->filter = CAIRO_FILTER_NEAREST;
+       attributes->has_component_alpha = pattern->has_component_alpha;
+
+       /* any pattern extend modes have already been dealt with... */
+       attributes->s_wrap = COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE;
+       attributes->t_wrap = attributes->s_wrap;
+
+BAIL:
+       cairo_surface_destroy (surface);
+
+       return texture;
+    }
+    case CAIRO_PATTERN_TYPE_LINEAR: {
+       cairo_linear_pattern_t *linear_pattern = (cairo_linear_pattern_t *)pattern;
+       cairo_cogl_linear_gradient_t *gradient;
+       cairo_cogl_linear_texture_entry_t *linear_texture;
+       cairo_int_status_t status;
+       float a, b;
+       float dist;
+       float scale;
+       float angle;
+
+       status = _cairo_cogl_get_linear_gradient (to_device(destination->base.device),
+                                                 pattern->extend,
+                                                 linear_pattern->base.n_stops,
+                                                 linear_pattern->base.stops,
+                                                 &gradient);
+       if (unlikely (status))
+           return NULL;
+
+       linear_texture = _cairo_cogl_linear_gradient_texture_for_extend (gradient, pattern->extend);
+
+       attributes->extend = pattern->extend;
+       attributes->filter = CAIRO_FILTER_BILINEAR;
+       attributes->has_component_alpha = pattern->has_component_alpha;
+       attributes->s_wrap = get_cogl_wrap_mode_for_extend (pattern->extend);
+       attributes->t_wrap = COGL_PIPELINE_WRAP_MODE_REPEAT;
+
+       cairo_matrix_init_identity (&attributes->matrix);
+
+       a = linear_pattern->pd2.x - linear_pattern->pd1.x;
+       b = linear_pattern->pd2.y - linear_pattern->pd1.y;
+       dist = sqrtf (a*a + b*b);
+       scale = 1.0f / dist;
+       angle = - atan2f (b, a);
+
+       cairo_matrix_rotate (&attributes->matrix, angle);
+       cairo_matrix_scale (&attributes->matrix, scale, scale);
+
+       cairo_matrix_translate (&attributes->matrix,
+                               -linear_pattern->pd1.x,
+                               -linear_pattern->pd1.y);
+
+       /* XXX: this caught me out: cairo doesn't follow the standard
+        * maths convention for multiplying two matrices A x B - cairo
+        * does B x A so the final matrix is as if A's transforms were
+        * applied first.
+        */
+       cairo_matrix_multiply (&attributes->matrix,
+                              &pattern->matrix,
+                              &attributes->matrix);
+
+       return cogl_object_ref (linear_texture->texture);
+    }
+    default:
+       g_warning ("Un-supported source type");
+       return NULL;
+    }
+}
+
+static void
+set_layer_texture_with_attributes (CoglPipeline *pipeline,
+                                  int layer_index,
+                                  CoglTexture *texture,
+                                  cairo_cogl_texture_attributes_t *attributes)
+{
+    cogl_pipeline_set_layer_texture (pipeline, layer_index, texture);
+
+    if (!_cairo_matrix_is_identity (&attributes->matrix)) {
+       cairo_matrix_t *m = &attributes->matrix;
+       float texture_matrixfv[16] = {
+           m->xx, m->yx, 0, 0,
+           m->xy, m->yy, 0, 0,
+           0, 0, 1, 0,
+           m->x0, m->y0, 0, 1
+       };
+       CoglMatrix texture_matrix;
+       cogl_matrix_init_from_array (&texture_matrix, texture_matrixfv);
+       cogl_pipeline_set_layer_matrix (pipeline, layer_index, &texture_matrix);
+    }
+
+    if (attributes->s_wrap != attributes->t_wrap) {
+       cogl_pipeline_set_layer_wrap_mode_s (pipeline, layer_index, attributes->s_wrap);
+       cogl_pipeline_set_layer_wrap_mode_t (pipeline, layer_index, attributes->t_wrap);
+    } else
+       cogl_pipeline_set_layer_wrap_mode (pipeline, layer_index, attributes->s_wrap);
+}
+
+static CoglPipeline *
+get_source_mask_operator_destination_pipeline (const cairo_pattern_t *mask,
+                                              const cairo_pattern_t *source,
+                                              cairo_operator_t op,
+                                              cairo_cogl_surface_t *destination,
+                                              cairo_composite_rectangles_t *extents)
+{
+    cairo_cogl_template_type template_type;
+    CoglPipeline *pipeline;
+
+    switch ((int)source->type)
+    {
+    case CAIRO_PATTERN_TYPE_SOLID:
+       template_type = mask ?
+           CAIRO_COGL_TEMPLATE_TYPE_MASK_SOLID : CAIRO_COGL_TEMPLATE_TYPE_SOLID;
+       break;
+    case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+       template_type = mask ?
+           CAIRO_COGL_TEMPLATE_TYPE_MASK_TEXTURE : CAIRO_COGL_TEMPLATE_TYPE_TEXTURE;
+       break;
+    default:
+       g_warning ("Un-supported source type");
+       return NULL;
+    }
+
+    pipeline = cogl_pipeline_copy (to_device(destination->base.device)->template_pipelines[op][template_type]);
+
+    if (source->type == CAIRO_PATTERN_TYPE_SOLID) {
+       cairo_solid_pattern_t *solid_pattern = (cairo_solid_pattern_t *)source;
+       cogl_pipeline_set_color4f (pipeline,
+                                  solid_pattern->color.red * solid_pattern->color.alpha,
+                                  solid_pattern->color.green * solid_pattern->color.alpha,
+                                  solid_pattern->color.blue * solid_pattern->color.alpha,
+                                  solid_pattern->color.alpha);
+    } else {
+       cairo_cogl_texture_attributes_t attributes;
+       CoglTexture *texture =
+           _cairo_cogl_acquire_pattern_texture (source, destination,
+                                                &extents->bounded,
+                                                &extents->source_sample_area,
+                                                &attributes);
+       if (!texture)
+           goto BAIL;
+       set_layer_texture_with_attributes (pipeline, 0, texture, &attributes);
+       cogl_object_unref (texture);
+    }
+
+    if (mask) {
+       if (mask->type == CAIRO_PATTERN_TYPE_SOLID) {
+           cairo_solid_pattern_t *solid_pattern = (cairo_solid_pattern_t *)mask;
+           CoglColor color;
+           cogl_color_init_from_4f (&color,
+                                    solid_pattern->color.red * solid_pattern->color.alpha,
+                                    solid_pattern->color.green * solid_pattern->color.alpha,
+                                    solid_pattern->color.blue * solid_pattern->color.alpha,
+                                    solid_pattern->color.alpha);
+           cogl_pipeline_set_layer_combine_constant (pipeline, 1, &color);
+       } else {
+           cairo_cogl_texture_attributes_t attributes;
+           CoglTexture *texture =
+               _cairo_cogl_acquire_pattern_texture (mask, destination,
+                                                    &extents->bounded,
+                                                    &extents->mask_sample_area,
+                                                    &attributes);
+           if (!texture)
+               goto BAIL;
+           set_layer_texture_with_attributes (pipeline, 1, texture, &attributes);
+           cogl_object_unref (texture);
+       }
+    }
+
+    return pipeline;
+
+BAIL:
+    cogl_object_unref (pipeline);
+    return NULL;
+}
+
+#if 0
+CoglPrimitive *
+_cairo_cogl_rectangle_new_p2t2t2 (float x,
+                                 float y,
+                                 float width,
+                                 float height)
+{
+    CoglVertexP2 vertices[] = {
+       {x, y}, {x, y + height}, {x + width, y + height},
+       {x, y}, {x + width, y + height}, {x + width, y}
+    };
+    CoglAttributeBuffer *buffer = cogl_attribute_buffer_new (sizeof (vertices));
+    CoglAttribute *pos = cogl_attribute_new (buffer,
+                                            "cogl_position_in",
+                                            sizeof (CoglVertexP2),
+                                            0,
+                                            2,
+                                            COGL_ATTRIBUTE_TYPE_FLOAT);
+    CoglAttribute *tex_coords0 = cogl_attribute_new (buffer,
+                                                    "cogl_tex_coord0_in",
+                                                    sizeof (CoglVertexP2),
+                                                    0,
+                                                    2,
+                                                    COGL_ATTRIBUTE_TYPE_FLOAT);
+    CoglAttribute *tex_coords0 = cogl_attribute_new (buffer,
+                                                    "cogl_tex_coord0_in",
+                                                    sizeof (CoglVertexP2),
+                                                    0,
+                                                    2,
+                                                    COGL_ATTRIBUTE_TYPE_FLOAT);
+    CoglPrimitive *prim;
+
+    cogl_buffer_set_data (COGL_BUFFER (buffer), 0, vertices, sizeof (vertices));
+
+    /* The attributes will now keep the buffer alive... */
+    cogl_object_unref (buffer);
+
+    prim = cogl_primitive_new (COGL_VERTICES_MODE_TRIANGLES,
+                              6, pos, tex_coords, NULL);
+
+    /* The primitive will now keep the attribute alive... */
+    cogl_object_unref (pos);
+
+    return prim;
+}
+#endif
+
+static void
+_cairo_cogl_log_clip (cairo_cogl_surface_t *surface,
+                     const cairo_clip_t *clip)
+{
+    if (!_cairo_clip_equal (clip, surface->last_clip)) {
+       _cairo_cogl_journal_log_clip (surface, clip);
+       _cairo_clip_destroy (surface->last_clip);
+       surface->last_clip = _cairo_clip_copy (clip);
+    }
+}
+
+static void
+_cairo_cogl_maybe_log_clip (cairo_cogl_surface_t *surface,
+                           cairo_composite_rectangles_t *composite)
+{
+    cairo_clip_t *clip = composite->clip;
+
+    if (_cairo_composite_rectangles_can_reduce_clip (composite, clip))
+       clip = NULL;
+
+    if (clip == NULL) {
+       if (_cairo_composite_rectangles_can_reduce_clip (composite,
+                                                        surface->last_clip))
+           return;
+    }
+
+    _cairo_cogl_log_clip (surface, clip);
+}
+
+static cairo_bool_t
+is_operator_supported (cairo_operator_t op)
+{
+    switch ((int)op) {
+    case CAIRO_OPERATOR_SOURCE:
+    case CAIRO_OPERATOR_OVER:
+    case CAIRO_OPERATOR_IN:
+    case CAIRO_OPERATOR_DEST_OVER:
+    case CAIRO_OPERATOR_DEST_IN:
+    case CAIRO_OPERATOR_ADD:
+       return TRUE;
+
+    default:
+       return FALSE;
+    }
+}
+
+static cairo_int_status_t
+_cairo_cogl_surface_mask (void                    *abstract_surface,
+                          cairo_operator_t         op,
+                          const cairo_pattern_t   *source,
+                          const cairo_pattern_t   *mask,
+                          const cairo_clip_t      *clip)
+{
+    cairo_cogl_surface_t *surface = abstract_surface;
+    cairo_composite_rectangles_t extents;
+    cairo_status_t status;
+    CoglPipeline *pipeline;
+    cairo_matrix_t identity;
+
+    /* XXX: Use this to smoke test the acquire_source/dest_image fallback
+     * paths... */
+    //return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (!is_operator_supported (op))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _cairo_composite_rectangles_init_for_mask (&extents,
+                                                       &surface->base,
+                                                       op, source, mask, clip);
+    if (unlikely (status))
+       return status;
+
+    pipeline = get_source_mask_operator_destination_pipeline (mask, source,
+                                                             op, surface, &extents);
+    if (!pipeline){
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+       goto BAIL;
+    }
+
+    _cairo_cogl_maybe_log_clip (surface, &extents);
+
+    cairo_matrix_init_identity (&identity);
+    _cairo_cogl_journal_log_rectangle (surface, pipeline,
+                                      extents.bounded.x,
+                                      extents.bounded.y,
+                                      extents.bounded.width,
+                                      extents.bounded.height,
+                                      2,
+                                      &identity);
+
+    /* The journal will take a reference on the pipeline and clip_path... */
+    cogl_object_unref (pipeline);
+
+BAIL:
+    return status;
+}
+
+static int
+_cairo_cogl_source_n_layers (const cairo_pattern_t *source)
+{
+    switch ((int)source->type)
+    {
+    case CAIRO_PATTERN_TYPE_SOLID:
+       return 0;
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+    case CAIRO_PATTERN_TYPE_SURFACE:
+       return 1;
+    default:
+       g_warning ("Unsupported source type");
+       return 0;
+    }
+}
+
+static cairo_bool_t
+_cairo_cogl_path_fill_meta_equal (const void *key_a, const void *key_b)
+{
+    const cairo_cogl_path_fill_meta_t *meta0 = key_a;
+    const cairo_cogl_path_fill_meta_t *meta1 = key_b;
+
+    return _cairo_path_fixed_equal (meta0->user_path, meta1->user_path);
+}
+
+static cairo_bool_t
+_cairo_cogl_stroke_style_equal (const cairo_stroke_style_t *a,
+                               const cairo_stroke_style_t *b)
+{
+    if (a->line_width == b->line_width &&
+       a->line_cap == b->line_cap &&
+       a->line_join == b->line_join &&
+       a->miter_limit == b->miter_limit &&
+       a->num_dashes == b->num_dashes &&
+       a->dash_offset == b->dash_offset)
+    {
+       unsigned int i;
+       for (i = 0; i < a->num_dashes; i++) {
+           if (a->dash[i] != b->dash[i])
+               return FALSE;
+       }
+    }
+    return TRUE;
+}
+
+static cairo_bool_t
+_cairo_cogl_path_stroke_meta_equal (const void *key_a, const void *key_b)
+{
+    const cairo_cogl_path_stroke_meta_t *meta0 = key_a;
+    const cairo_cogl_path_stroke_meta_t *meta1 = key_b;
+
+    return _cairo_cogl_stroke_style_equal (&meta0->style, &meta1->style) &&
+       _cairo_path_fixed_equal (meta0->user_path, meta1->user_path);
+}
+
+static cairo_cogl_path_stroke_meta_t *
+_cairo_cogl_path_stroke_meta_reference (cairo_cogl_path_stroke_meta_t *meta)
+{
+    assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&meta->ref_count));
+
+    _cairo_reference_count_inc (&meta->ref_count);
+
+    return meta;
+}
+
+static void
+_cairo_cogl_path_stroke_meta_destroy (cairo_cogl_path_stroke_meta_t *meta)
+{
+    assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&meta->ref_count));
+
+    if (! _cairo_reference_count_dec_and_test (&meta->ref_count))
+       return;
+
+    _cairo_path_fixed_fini (meta->user_path);
+    free (meta->user_path);
+
+    _cairo_stroke_style_fini (&meta->style);
+
+    if (meta->prim)
+       cogl_object_unref (meta->prim);
+
+    free (meta);
+}
+
+static cairo_cogl_path_stroke_meta_t *
+_cairo_cogl_path_stroke_meta_lookup (cairo_cogl_device_t       *ctx,
+                                    unsigned long               hash,
+                                    cairo_path_fixed_t         *user_path,
+                                    const cairo_stroke_style_t *style,
+                                    double                      tolerance)
+{
+    cairo_cogl_path_stroke_meta_t *ret;
+    cairo_cogl_path_stroke_meta_t lookup;
+
+    lookup.cache_entry.hash = hash;
+    lookup.user_path = user_path;
+    lookup.style = *style;
+    lookup.tolerance = tolerance;
+
+    ret = _cairo_cache_lookup (&ctx->path_stroke_staging_cache, &lookup.cache_entry);
+    if (!ret)
+       ret = _cairo_cache_lookup (&ctx->path_stroke_prim_cache, &lookup.cache_entry);
+    return ret;
+}
+
+static void
+_cairo_cogl_path_stroke_meta_set_prim_size (cairo_cogl_surface_t *surface,
+                                           cairo_cogl_path_stroke_meta_t *meta,
+                                           size_t size)
+{
+    /* now that we know the meta structure is associated with a primitive
+     * we promote it from the staging cache into the primitive cache.
+     */
+
+    /* XXX: _cairo_cache borks if you try and remove an entry that's already
+     * been evicted so we explicitly look it up first... */
+    if (_cairo_cache_lookup (&to_device(surface->base.device)->path_stroke_staging_cache, &meta->cache_entry)) {
+       _cairo_cogl_path_stroke_meta_reference (meta);
+       _cairo_cache_remove (&to_device(surface->base.device)->path_stroke_staging_cache, &meta->cache_entry);
+    }
+
+    meta->cache_entry.size = size;
+    if (_cairo_cache_insert (&to_device(surface->base.device)->path_stroke_prim_cache, &meta->cache_entry) !=
+       CAIRO_STATUS_SUCCESS)
+       _cairo_cogl_path_stroke_meta_destroy (meta);
+}
+
+static unsigned int
+_cairo_cogl_stroke_style_hash (unsigned int hash,
+                              const cairo_stroke_style_t *style)
+{
+    unsigned int i;
+    hash = _cairo_hash_bytes (hash, &style->line_width, sizeof (style->line_width));
+    hash = _cairo_hash_bytes (hash, &style->line_cap, sizeof (style->line_cap));
+    hash = _cairo_hash_bytes (hash, &style->line_join, sizeof (style->line_join));
+    hash = _cairo_hash_bytes (hash, &style->miter_limit, sizeof (style->miter_limit));
+    hash = _cairo_hash_bytes (hash, &style->num_dashes, sizeof (style->num_dashes));
+    hash = _cairo_hash_bytes (hash, &style->dash_offset, sizeof (style->dash_offset));
+    for (i = 0; i < style->num_dashes; i++)
+       hash = _cairo_hash_bytes (hash, &style->dash[i], sizeof (double));
+    return hash;
+}
+
+static cairo_cogl_path_stroke_meta_t *
+_cairo_cogl_get_path_stroke_meta (cairo_cogl_surface_t *surface,
+                                 const cairo_stroke_style_t *style,
+                                 double tolerance)
+{
+    unsigned long hash;
+    cairo_cogl_path_stroke_meta_t *meta = NULL;
+    cairo_path_fixed_t *meta_path = NULL;
+    cairo_status_t status;
+
+    if (!surface->user_path)
+       return NULL;
+
+    hash = _cairo_path_fixed_hash (surface->user_path);
+    hash = _cairo_cogl_stroke_style_hash (hash, style);
+    hash = _cairo_hash_bytes (hash, &tolerance, sizeof (tolerance));
+
+    meta = _cairo_cogl_path_stroke_meta_lookup (to_device(surface->base.device), hash,
+                                               surface->user_path, style, tolerance);
+    if (meta)
+       return meta;
+
+    meta = calloc (1, sizeof (cairo_cogl_path_stroke_meta_t));
+    if (!meta)
+       goto BAIL;
+    CAIRO_REFERENCE_COUNT_INIT (&meta->ref_count, 1);
+    meta->cache_entry.hash = hash;
+    meta->counter = 0;
+    meta_path = malloc (sizeof (cairo_path_fixed_t));
+    if (!meta_path)
+       goto BAIL;
+    /* FIXME: we should add a ref-counted wrapper for our user_paths
+     * so we don't have to keep copying them here! */
+    status = _cairo_path_fixed_init_copy (meta_path, surface->user_path);
+    if (unlikely (status))
+       goto BAIL;
+    meta->user_path = meta_path;
+    meta->ctm_inverse = *surface->ctm_inverse;
+
+    status = _cairo_stroke_style_init_copy (&meta->style, style);
+    if (unlikely (status)) {
+       _cairo_path_fixed_fini (meta_path);
+       goto BAIL;
+    }
+    meta->tolerance = tolerance;
+
+    return meta;
+
+BAIL:
+    free (meta_path);
+    free (meta);
+    return NULL;
+}
+
+static cairo_int_status_t
+_cairo_cogl_stroke_to_primitive (cairo_cogl_surface_t      *surface,
+                                const cairo_path_fixed_t   *path,
+                                const cairo_stroke_style_t *style,
+                                const cairo_matrix_t       *ctm,
+                                const cairo_matrix_t       *ctm_inverse,
+                                double                      tolerance,
+                                int                         n_layers,
+                                cairo_bool_t                one_shot,
+                                CoglPrimitive             **primitive,
+                                size_t                     *size)
+{
+    cairo_traps_t traps;
+    cairo_int_status_t status;
+
+    _cairo_traps_init (&traps);
+
+    status = _cairo_path_fixed_stroke_to_traps (path, style, ctm, ctm_inverse, tolerance,
+                                               &traps);
+    if (unlikely (status))
+       goto BAIL;
+
+    if (traps.num_traps == 0) {
+       status = CAIRO_INT_STATUS_NOTHING_TO_DO;
+       goto BAIL;
+    }
+
+    *size = traps.num_traps * sizeof (CoglVertexP2) * 6;
+
+    //g_print ("new stroke prim\n");
+    *primitive = _cairo_cogl_traps_to_composite_prim (surface, &traps, n_layers, one_shot);
+    if (!*primitive) {
+       status = CAIRO_INT_STATUS_NO_MEMORY;
+       goto BAIL;
+    }
+
+BAIL:
+    _cairo_traps_fini (&traps);
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_cogl_surface_stroke (void                       *abstract_surface,
+                           cairo_operator_t            op,
+                           const cairo_pattern_t      *source,
+                           const cairo_path_fixed_t   *path,
+                           const cairo_stroke_style_t *style,
+                           const cairo_matrix_t       *ctm,
+                           const cairo_matrix_t       *ctm_inverse,
+                           double                      tolerance,
+                           cairo_antialias_t           antialias,
+                           const cairo_clip_t         *clip)
+{
+    cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)abstract_surface;
+    cairo_composite_rectangles_t extents;
+    CoglPipeline *pipeline;
+    cairo_status_t status;
+#ifdef ENABLE_PATH_CACHE
+    cairo_cogl_path_stroke_meta_t *meta = NULL;
+    cairo_matrix_t transform_matrix;
+#endif
+    cairo_matrix_t *transform = NULL;
+    gboolean one_shot = TRUE;
+    CoglPrimitive *prim = NULL;
+    cairo_bool_t new_prim = FALSE;
+
+    if (! is_operator_supported (op))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* FIXME - support unbounded operators */
+    if (!_cairo_operator_bounded_by_mask (op)) {
+       /* Currently IN this is the only unbounded operator we aim to support
+        * in cairo-cogl. */
+       assert (op == CAIRO_OPERATOR_IN);
+       g_warning ("FIXME: handle stroking with unbounded operators!");
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+
+    status = _cairo_composite_rectangles_init_for_stroke (&extents,
+                                                         &surface->base,
+                                                         op, source, path,
+                                                         style,
+                                                         ctm,
+                                                         clip);
+    if (unlikely (status))
+       return status;
+
+#ifdef ENABLE_PATH_CACHE
+    /* FIXME: we are currently leaking the meta state if we don't reach
+     * the cache_insert at the end. */
+    meta = _cairo_cogl_get_path_stroke_meta (surface, style, tolerance);
+    if (meta) {
+       prim = meta->prim;
+       if (prim) {
+           cairo_matrix_multiply (&transform_matrix, &meta->ctm_inverse, surface->ctm);
+           transform = &transform_matrix;
+       } else if (meta->counter++ > 10)
+           one_shot = FALSE;
+    }
+#endif
+
+    if (!prim) {
+       int n_layers = _cairo_cogl_source_n_layers (source);
+       size_t prim_size = 0;
+       status = _cairo_cogl_stroke_to_primitive (surface, path, style,
+                                                 ctm, ctm_inverse, tolerance,
+                                                 n_layers, one_shot,
+                                                 &prim, &prim_size);
+       if (unlikely (status))
+           return status;
+       new_prim = TRUE;
+#if defined (ENABLE_PATH_CACHE)
+       if (meta) {
+           meta->prim = cogl_object_ref (prim);
+           _cairo_cogl_path_stroke_meta_set_prim_size (surface, meta, prim_size);
+       }
+#endif
+    }
+
+    pipeline = get_source_mask_operator_destination_pipeline (NULL, source,
+                                                             op, surface, &extents);
+    if (!pipeline)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    _cairo_cogl_maybe_log_clip (surface, &extents);
+
+    _cairo_cogl_journal_log_primitive (surface, pipeline, prim, transform);
+
+    /* The journal will take a reference on the pipeline and primitive... */
+    cogl_object_unref (pipeline);
+    if (new_prim)
+       cogl_object_unref (prim);
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static cairo_cogl_path_fill_meta_t *
+_cairo_cogl_path_fill_meta_reference (cairo_cogl_path_fill_meta_t *meta)
+{
+    assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&meta->ref_count));
+
+    _cairo_reference_count_inc (&meta->ref_count);
+
+    return meta;
+}
+
+static void
+_cairo_cogl_path_fill_meta_destroy (cairo_cogl_path_fill_meta_t *meta)
+{
+    assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&meta->ref_count));
+
+    if (! _cairo_reference_count_dec_and_test (&meta->ref_count))
+       return;
+
+    _cairo_path_fixed_fini (meta->user_path);
+    free (meta->user_path);
+
+    if (meta->prim)
+       cogl_object_unref (meta->prim);
+
+    free (meta);
+}
+
+static cairo_cogl_path_fill_meta_t *
+_cairo_cogl_path_fill_meta_lookup (cairo_cogl_device_t *ctx,
+                                  unsigned long         hash,
+                                  cairo_path_fixed_t   *user_path)
+{
+    cairo_cogl_path_fill_meta_t *ret;
+    cairo_cogl_path_fill_meta_t lookup;
+
+    lookup.cache_entry.hash = hash;
+    lookup.user_path = user_path;
+
+    ret = _cairo_cache_lookup (&ctx->path_fill_staging_cache, &lookup.cache_entry);
+    if (!ret)
+       ret = _cairo_cache_lookup (&ctx->path_fill_prim_cache, &lookup.cache_entry);
+    return ret;
+}
+
+static void
+_cairo_cogl_path_fill_meta_set_prim_size (cairo_cogl_surface_t *surface,
+                                         cairo_cogl_path_fill_meta_t *meta,
+                                         size_t size)
+{
+    /* now that we know the meta structure is associated with a primitive
+     * we promote it from the staging cache into the primitive cache.
+     */
+
+    /* XXX: _cairo_cache borks if you try and remove an entry that's already
+     * been evicted so we explicitly look it up first... */
+    if (_cairo_cache_lookup (&to_device(surface->base.device)->path_fill_staging_cache, &meta->cache_entry)) {
+       _cairo_cogl_path_fill_meta_reference (meta);
+       _cairo_cache_remove (&to_device(surface->base.device)->path_fill_staging_cache, &meta->cache_entry);
+    }
+
+    meta->cache_entry.size = size;
+    if (_cairo_cache_insert (&to_device(surface->base.device)->path_fill_prim_cache, &meta->cache_entry) !=
+       CAIRO_STATUS_SUCCESS)
+       _cairo_cogl_path_fill_meta_destroy (meta);
+}
+
+static cairo_cogl_path_fill_meta_t *
+_cairo_cogl_get_path_fill_meta (cairo_cogl_surface_t *surface)
+{
+    unsigned long hash;
+    cairo_cogl_path_fill_meta_t *meta = NULL;
+    cairo_path_fixed_t *meta_path = NULL;
+    cairo_status_t status;
+
+    if (!surface->user_path)
+       return NULL;
+
+    hash = _cairo_path_fixed_hash (surface->user_path);
+
+    meta = _cairo_cogl_path_fill_meta_lookup (to_device(surface->base.device),
+                                             hash, surface->user_path);
+    if (meta)
+       return meta;
+
+    meta = calloc (1, sizeof (cairo_cogl_path_fill_meta_t));
+    if (!meta)
+       goto BAIL;
+    meta->cache_entry.hash = hash;
+    meta->counter = 0;
+    CAIRO_REFERENCE_COUNT_INIT (&meta->ref_count, 1);
+    meta_path = malloc (sizeof (cairo_path_fixed_t));
+    if (!meta_path)
+       goto BAIL;
+    /* FIXME: we should add a ref-counted wrapper for our user_paths
+     * so we don't have to keep copying them here! */
+    status = _cairo_path_fixed_init_copy (meta_path, surface->user_path);
+    if (unlikely (status))
+       goto BAIL;
+    meta->user_path = meta_path;
+    meta->ctm_inverse = *surface->ctm_inverse;
+
+    /* To start with - until we associate a CoglPrimitive with the meta
+     * structure - we keep the meta in a staging structure until we
+     * see whether it actually gets re-used. */
+    meta->cache_entry.size = 1;
+    if (_cairo_cache_insert (&to_device(surface->base.device)->path_fill_staging_cache, &meta->cache_entry) !=
+       CAIRO_STATUS_SUCCESS)
+       _cairo_cogl_path_fill_meta_destroy (meta);
+
+    return meta;
+
+BAIL:
+    free (meta_path);
+    free (meta);
+    return NULL;
+}
+
+static cairo_int_status_t
+_cairo_cogl_surface_fill (void                     *abstract_surface,
+                          cairo_operator_t          op,
+                          const cairo_pattern_t            *source,
+                          const cairo_path_fixed_t  *path,
+                          cairo_fill_rule_t         fill_rule,
+                          double                    tolerance,
+                          cairo_antialias_t         antialias,
+                          const cairo_clip_t       *clip)
+{
+    cairo_cogl_surface_t *surface = abstract_surface;
+    cairo_composite_rectangles_t extents;
+    cairo_status_t status;
+#ifdef ENABLE_PATH_CACHE
+    cairo_cogl_path_fill_meta_t *meta = NULL;
+    cairo_matrix_t transform_matrix;
+#endif
+    cairo_matrix_t *transform = NULL;
+    cairo_bool_t one_shot = TRUE;
+    CoglPrimitive *prim = NULL;
+    cairo_bool_t new_prim = FALSE;
+    CoglPipeline *pipeline;
+
+    if (! is_operator_supported (op))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* FIXME - support unbounded operators */
+    if (!_cairo_operator_bounded_by_mask (op)) {
+       /* Currently IN this is the only unbounded operator we aim to support
+        * in cairo-cogl. */
+       assert (op == CAIRO_OPERATOR_IN);
+       g_warning ("FIXME: handle filling with unbounded operators!");
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+
+    status = _cairo_composite_rectangles_init_for_fill (&extents,
+                                                       &surface->base,
+                                                       op, source, path,
+                                                       clip);
+    if (unlikely (status))
+       return status;
+
+#ifndef FILL_WITH_COGL_PATH
+#ifdef ENABLE_PATH_CACHE
+    meta = _cairo_cogl_get_path_fill_meta (surface);
+    if (meta) {
+       prim = meta->prim;
+       if (prim) {
+           cairo_matrix_multiply (&transform_matrix, &meta->ctm_inverse, surface->ctm);
+           transform = &transform_matrix;
+       } else if (meta->counter++ > 10)
+           one_shot = FALSE;
+    }
+#endif /* ENABLE_PATH_CACHE */
+
+    if (!prim) {
+       int n_layers = _cairo_cogl_source_n_layers (source);
+       size_t prim_size;
+       status = _cairo_cogl_fill_to_primitive (surface, path, fill_rule, tolerance,
+                                               one_shot, n_layers, &prim, &prim_size);
+       if (unlikely (status))
+           return status;
+       new_prim = TRUE;
+#ifdef ENABLE_PATH_CACHE
+       if (meta) {
+           meta->prim = cogl_object_ref (prim);
+           _cairo_cogl_path_fill_meta_set_prim_size (surface, meta, prim_size);
+       }
+#endif /* ENABLE_PATH_CACHE */
+    }
+
+#endif /* !FILL_WITH_COGL_PATH */
+
+    pipeline = get_source_mask_operator_destination_pipeline (NULL, source,
+                                                             op, surface, &extents);
+    if (!pipeline)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    _cairo_cogl_maybe_log_clip (surface, &extents);
+
+#ifndef FILL_WITH_COGL_PATH
+    _cairo_cogl_journal_log_primitive (surface, pipeline, prim, transform);
+    /* The journal will take a reference on the prim */
+    if (new_prim)
+       cogl_object_unref (prim);
+#else
+    CoglPath * cogl_path = _cairo_cogl_util_path_from_cairo (path, fill_rule, tolerance);
+    _cairo_cogl_journal_log_path (surface, pipeline, cogl_path);
+    cogl_object_unref (cogl_path);
+#endif
+
+    /* The journal will take a reference on the pipeline... */
+    cogl_object_unref (pipeline);
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+cairo_int_status_t
+_cairo_cogl_surface_fill_rectangle (void                    *abstract_surface,
+                                   cairo_operator_t          op,
+                                   const cairo_pattern_t    *source,
+                                   double                    x,
+                                   double                    y,
+                                   double                    width,
+                                   double                    height,
+                                   cairo_matrix_t           *ctm,
+                                   const cairo_clip_t       *clip)
+{
+    cairo_cogl_surface_t *surface = abstract_surface;
+    CoglPipeline *pipeline;
+
+    if (! is_operator_supported (op))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* FIXME - support unbounded operators */
+    if (!_cairo_operator_bounded_by_mask (op)) {
+       /* Currently IN this is the only unbounded operator we aim to support
+        * in cairo-cogl. */
+       assert (op == CAIRO_OPERATOR_IN);
+       g_warning ("FIXME: handle filling with unbounded operators!");
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+
+    /* FIXME */
+#if 0
+    status = _cairo_composite_rectangles_init_for_fill_rectangle (&extents,
+                                                                 &surface->base,
+                                                                 op, source, path,
+                                                                 clip);
+    if (unlikely (status))
+       return status;
+#endif
+
+    if (source->type == CAIRO_PATTERN_TYPE_SOLID) {
+       double x1 = x;
+       double y1 = y;
+       double x2 = x1 + width;
+       double y2 = y1 + height;
+
+       pipeline = get_source_mask_operator_destination_pipeline (NULL, source,
+                                                                 op, surface, NULL);
+       if (!pipeline)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       _cairo_cogl_log_clip (surface, clip);
+
+       _cairo_cogl_journal_log_rectangle (surface,
+                                          pipeline,
+                                          x1, y1, x2, y2,
+                                          0,
+                                          ctm);
+       return CAIRO_INT_STATUS_SUCCESS;
+    } else
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* TODO:
+     * We need to acquire the textures here, look at the corresponding
+     * attributes and see if this can be trivially handled by logging
+     * a textured rectangle only needing simple scaling or translation
+     * of texture coordinates.
+     *
+     * At this point we should also aim to remap the default
+     * EXTEND_NONE mode to EXTEND_PAD which is more efficient if we
+     * know it makes no difference either way since we can map that to
+     * CLAMP_TO_EDGE.
+     */
+}
+
+static cairo_int_status_t
+_cairo_cogl_surface_show_glyphs (void                  *surface,
+                                 cairo_operator_t        op,
+                                 const cairo_pattern_t *source,
+                                 cairo_glyph_t          *glyphs,
+                                 int                     num_glyphs,
+                                 cairo_scaled_font_t   *scaled_font,
+                                 const cairo_clip_t     *clip)
+{
+    return CAIRO_INT_STATUS_UNSUPPORTED;
+}
+
+const cairo_surface_backend_t _cairo_cogl_surface_backend = {
+    CAIRO_SURFACE_TYPE_COGL,
+    _cairo_cogl_surface_finish,
+#ifdef NEED_COGL_CONTEXT
+    _cairo_cogl_context_create,
+#else
+    _cairo_default_context_create,
+#endif
+
+    _cairo_cogl_surface_create_similar,
+    NULL, /* create similar image */
+    NULL, /* map to image */
+    NULL, /* unmap image */
+
+    _cairo_surface_default_source,
+    _cairo_cogl_surface_acquire_source_image,
+    _cairo_cogl_surface_release_source_image,
+    NULL, /* snapshot */
+
+    NULL, /* copy_page */
+    NULL, /* show_page */
+
+    _cairo_cogl_surface_get_extents,
+    NULL, /* get_font_options */
+
+    _cairo_cogl_surface_flush, /* flush */
+    NULL, /* mark_dirty_rectangle */
+
+    _cairo_cogl_surface_paint,
+    _cairo_cogl_surface_mask,
+    _cairo_cogl_surface_stroke,
+    _cairo_cogl_surface_fill,
+    NULL, /* fill_stroke*/
+    _cairo_surface_fallback_glyphs,
+};
+
+static cairo_surface_t *
+_cairo_cogl_surface_create_full (cairo_cogl_device_t *dev,
+                                cairo_bool_t ignore_alpha,
+                                CoglFramebuffer *framebuffer,
+                                CoglTexture *texture)
+{
+    cairo_cogl_surface_t *surface;
+    cairo_status_t status;
+
+    status = cairo_device_acquire (&dev->base);
+    if (unlikely (status))
+       return _cairo_surface_create_in_error (status);
+
+    surface = malloc (sizeof (cairo_cogl_surface_t));
+    if (unlikely (surface == NULL))
+        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+    surface->ignore_alpha = ignore_alpha;
+
+    surface->framebuffer = framebuffer;
+    if (framebuffer) {
+       surface->width = cogl_framebuffer_get_width (framebuffer);
+       surface->height = cogl_framebuffer_get_height (framebuffer);
+       surface->cogl_format = cogl_framebuffer_get_color_format (framebuffer);
+       cogl_object_ref (framebuffer);
+    }
+
+    /* FIXME: If texture == NULL and we are given an offscreen framebuffer
+     * then we want a way to poke inside the framebuffer to get a texture */
+    surface->texture = texture;
+    if (texture) {
+       if (!framebuffer) {
+           surface->width = cogl_texture_get_width (texture);
+           surface->height = cogl_texture_get_height (texture);
+           surface->cogl_format = cogl_texture_get_format (texture);
+       }
+       cogl_object_ref (texture);
+    }
+
+    assert(surface->width && surface->height);
+
+    surface->journal = NULL;
+
+    surface->buffer_stack = NULL;
+    surface->buffer_stack_size = 4096;
+
+    surface->last_clip = NULL;
+
+    surface->n_clip_updates_per_frame = 0;
+
+    _cairo_surface_init (&surface->base,
+                         &_cairo_cogl_surface_backend,
+                         &dev->base,
+                         CAIRO_CONTENT_COLOR_ALPHA);
+
+    return &surface->base;
+}
+
+cairo_surface_t *
+cairo_cogl_surface_create (cairo_device_t  *abstract_device,
+                          CoglFramebuffer *framebuffer)
+{
+    cairo_cogl_device_t *dev = (cairo_cogl_device_t *)abstract_device;
+
+    if (abstract_device == NULL)
+       return _cairo_surface_create_in_error (CAIRO_STATUS_DEVICE_ERROR);
+
+    if (abstract_device->status)
+       return _cairo_surface_create_in_error (abstract_device->status);
+
+    if (abstract_device->backend->type != CAIRO_DEVICE_TYPE_COGL)
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
+
+    return _cairo_cogl_surface_create_full (dev, FALSE, framebuffer, NULL);
+}
+slim_hidden_def (cairo_cogl_surface_create);
+
+CoglFramebuffer *
+cairo_cogl_surface_get_framebuffer (cairo_surface_t *abstract_surface)
+{
+    cairo_cogl_surface_t *surface;
+
+    if (abstract_surface->backend != &_cairo_cogl_surface_backend) {
+        _cairo_error_throw (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
+        return NULL;
+    }
+
+    surface = (cairo_cogl_surface_t *) abstract_surface;
+
+    return surface->framebuffer;
+}
+slim_hidden_def (cairo_cogl_surface_get_framebuffer);
+
+CoglTexture *
+cairo_cogl_surface_get_texture (cairo_surface_t *abstract_surface)
+{
+    cairo_cogl_surface_t *surface;
+
+    if (abstract_surface->backend != &_cairo_cogl_surface_backend) {
+        _cairo_error_throw (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
+        return NULL;
+    }
+
+    surface = (cairo_cogl_surface_t *) abstract_surface;
+
+    return surface->texture;
+}
+slim_hidden_def (cairo_cogl_surface_get_texture);
+
+static cairo_status_t
+_cairo_cogl_device_flush (void *device)
+{
+    cairo_status_t status;
+
+    status = cairo_device_acquire (device);
+    if (unlikely (status))
+       return status;
+
+    /* XXX: we don't need to flush Cogl here, we just need to flush
+     * any batching we do of compositing primitives. */
+
+    cairo_device_release (device);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_cogl_device_finish (void *device)
+{
+    cairo_status_t status;
+
+    status = cairo_device_acquire (device);
+    if (unlikely (status))
+       return;
+
+    /* XXX: Drop references to external resources */
+
+    cairo_device_release (device);
+}
+
+static void
+_cairo_cogl_device_destroy (void *device)
+{
+    cairo_cogl_device_t *dev = device;
+
+    /* FIXME: Free stuff! */
+
+    g_free (dev);
+}
+
+static const cairo_device_backend_t _cairo_cogl_device_backend = {
+    CAIRO_DEVICE_TYPE_COGL,
+
+    NULL, /* lock */
+    NULL, /* unlock */
+
+    _cairo_cogl_device_flush,
+    _cairo_cogl_device_finish,
+    _cairo_cogl_device_destroy,
+};
+
+static cairo_bool_t
+set_blend (CoglPipeline *pipeline, const char *blend_string)
+{
+    GError *error = NULL;
+    if (!cogl_pipeline_set_blend (pipeline, blend_string, &error)) {
+       g_warning ("Unsupported blend string with current gpu/driver: %s", blend_string);
+       g_error_free (error);
+       return FALSE;
+    }
+    return TRUE;
+}
+
+static cairo_bool_t
+_cairo_cogl_setup_op_state (CoglPipeline *pipeline, cairo_operator_t op)
+{
+    cairo_bool_t status = FALSE;
+
+    switch ((int)op)
+    {
+    case CAIRO_OPERATOR_SOURCE:
+       status = set_blend (pipeline, "RGBA = ADD (SRC_COLOR, 0)");
+       break;
+    case CAIRO_OPERATOR_OVER:
+       status = set_blend (pipeline, "RGBA = ADD (SRC_COLOR, DST_COLOR * (1 - SRC_COLOR[A]))");
+       break;
+    case CAIRO_OPERATOR_IN:
+       status = set_blend (pipeline, "RGBA = ADD (SRC_COLOR * DST_COLOR[A], 0)");
+       break;
+    case CAIRO_OPERATOR_DEST_OVER:
+       status = set_blend (pipeline, "RGBA = ADD (SRC_COLOR * (1 - DST_COLOR[A]), DST_COLOR)");
+       break;
+    case CAIRO_OPERATOR_DEST_IN:
+       status = set_blend (pipeline, "RGBA = ADD (0, DST_COLOR * SRC_COLOR[A])");
+       break;
+    case CAIRO_OPERATOR_ADD:
+       status = set_blend (pipeline, "RGBA = ADD (SRC_COLOR, DST_COLOR)");
+       break;
+    }
+
+    return status;
+}
+
+static void
+create_templates_for_op (cairo_cogl_device_t *dev, cairo_operator_t op)
+{
+    CoglPipeline *base = cogl_pipeline_new ();
+    CoglPipeline *pipeline;
+    CoglColor color;
+
+    if (!_cairo_cogl_setup_op_state (base, op)) {
+       cogl_object_unref (base);
+       return;
+    }
+
+    dev->template_pipelines[op][CAIRO_COGL_TEMPLATE_TYPE_SOLID] = base;
+
+    pipeline = cogl_pipeline_copy (base);
+    cogl_pipeline_set_layer_texture (pipeline, 0, dev->dummy_texture);
+    dev->template_pipelines[op][CAIRO_COGL_TEMPLATE_TYPE_TEXTURE] = pipeline;
+
+    pipeline = cogl_pipeline_copy (base);
+    cogl_pipeline_set_layer_combine (pipeline, 1,
+                                     "RGBA = MODULATE (PREVIOUS, CONSTANT[A])",
+                                     NULL);
+    cogl_pipeline_set_layer_combine_constant (pipeline, 1, &color);
+    cogl_pipeline_set_layer_texture (pipeline, 1, dev->dummy_texture);
+    dev->template_pipelines[op][CAIRO_COGL_TEMPLATE_TYPE_MASK_SOLID] = pipeline;
+
+    pipeline = cogl_pipeline_copy (base);
+    cogl_pipeline_set_layer_combine (pipeline, 1,
+                                     "RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
+                                     NULL);
+    cogl_pipeline_set_layer_texture (pipeline, 1, dev->dummy_texture);
+    dev->template_pipelines[op][CAIRO_COGL_TEMPLATE_TYPE_MASK_TEXTURE] = pipeline;
+}
+
+cairo_device_t *
+cairo_cogl_device_create (CoglContext *cogl_context)
+{
+    cairo_cogl_device_t *dev = g_new0 (cairo_cogl_device_t, 1);
+    cairo_status_t status;
+
+    dev->backend_vtable_initialized = FALSE;
+
+    dev->cogl_context = cogl_context;
+
+    dev->dummy_texture = cogl_texture_new_with_size (1, 1,
+                                                    COGL_TEXTURE_NO_SLICING,
+                                                    COGL_PIXEL_FORMAT_ANY);
+    if (!dev->dummy_texture)
+       goto ERROR;
+
+    memset (dev->template_pipelines, 0, sizeof (dev->template_pipelines));
+    create_templates_for_op (dev, CAIRO_OPERATOR_SOURCE);
+    create_templates_for_op (dev, CAIRO_OPERATOR_OVER);
+    create_templates_for_op (dev, CAIRO_OPERATOR_IN);
+    create_templates_for_op (dev, CAIRO_OPERATOR_DEST_OVER);
+    create_templates_for_op (dev, CAIRO_OPERATOR_DEST_IN);
+    create_templates_for_op (dev, CAIRO_OPERATOR_ADD);
+
+    status = _cairo_cache_init (&dev->linear_cache,
+                                _cairo_cogl_linear_gradient_equal,
+                                NULL,
+                                (cairo_destroy_func_t) _cairo_cogl_linear_gradient_destroy,
+                                CAIRO_COGL_LINEAR_GRADIENT_CACHE_SIZE);
+    if (unlikely (status))
+       return _cairo_device_create_in_error(status);
+
+    status = _cairo_cache_init (&dev->path_fill_staging_cache,
+                                _cairo_cogl_path_fill_meta_equal,
+                                NULL,
+                                (cairo_destroy_func_t) _cairo_cogl_path_fill_meta_destroy,
+                                1000);
+
+    status = _cairo_cache_init (&dev->path_stroke_staging_cache,
+                                _cairo_cogl_path_stroke_meta_equal,
+                                NULL,
+                                (cairo_destroy_func_t) _cairo_cogl_path_stroke_meta_destroy,
+                                1000);
+
+    status = _cairo_cache_init (&dev->path_fill_prim_cache,
+                                _cairo_cogl_path_fill_meta_equal,
+                                NULL,
+                                (cairo_destroy_func_t) _cairo_cogl_path_fill_meta_destroy,
+                                CAIRO_COGL_PATH_META_CACHE_SIZE);
+
+    status = _cairo_cache_init (&dev->path_stroke_prim_cache,
+                                _cairo_cogl_path_stroke_meta_equal,
+                                NULL,
+                                (cairo_destroy_func_t) _cairo_cogl_path_stroke_meta_destroy,
+                                CAIRO_COGL_PATH_META_CACHE_SIZE);
+
+    _cairo_device_init (&dev->base, &_cairo_cogl_device_backend);
+    return &dev->base;
+
+ERROR:
+    g_free (dev);
+    return NULL;
+}
+slim_hidden_def (cairo_cogl_device_create);
+
+void
+cairo_cogl_surface_end_frame (cairo_surface_t *abstract_surface)
+{
+    cairo_cogl_surface_t *surface = (cairo_cogl_surface_t *)abstract_surface;
+    cairo_surface_flush (abstract_surface);
+
+    //g_print ("n_clip_update_per_frame = %d\n", surface->n_clip_updates_per_frame);
+    surface->n_clip_updates_per_frame = 0;
+}
+slim_hidden_def (cairo_cogl_surface_end_frame);
diff --git a/src/cairo-cogl-utils-private.h b/src/cairo-cogl-utils-private.h
new file mode 100644 (file)
index 0000000..ee77f30
--- /dev/null
@@ -0,0 +1,54 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+
+#ifndef CAIRO_COGL_UTILS_PRIVATE_H
+#define CAIRO_COGL_UTILS_PRIVATE_H
+
+#include "cairo-path-fixed-private.h"
+#include <cogl/cogl2-experimental.h>
+
+CoglPath *
+_cairo_cogl_util_path_from_cairo (const cairo_path_fixed_t *path,
+                                 cairo_fill_rule_t fill_rule,
+                                 float tolerance);
+
+int
+_cairo_cogl_util_next_p2 (int a);
+
+#define CAIRO_FIXED_ONE_FLOAT ((float)(1 << CAIRO_FIXED_FRAC_BITS))
+
+static inline float
+_cairo_cogl_util_fixed_to_float (cairo_fixed_t f)
+{
+    return ((float) f) / CAIRO_FIXED_ONE_FLOAT;
+}
+
+#endif /* CAIRO_COGL_UTILS_PRIVATE_H */
diff --git a/src/cairo-cogl-utils.c b/src/cairo-cogl-utils.c
new file mode 100644 (file)
index 0000000..4f02aaa
--- /dev/null
@@ -0,0 +1,126 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.og/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+
+#include "cairoint.h"
+#include "cairo-cogl-utils-private.h"
+
+#include <cogl/cogl.h>
+#include <glib.h>
+
+static cairo_status_t
+_cogl_move_to (void               *closure,
+              const cairo_point_t *point)
+{
+    cogl_path_move_to (closure,
+                      _cairo_cogl_util_fixed_to_float (point->x),
+                      _cairo_cogl_util_fixed_to_float (point->y));
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cogl_line_to (void               *closure,
+              const cairo_point_t *point)
+{
+    cogl_path_line_to (closure,
+                      _cairo_cogl_util_fixed_to_float (point->x),
+                      _cairo_cogl_util_fixed_to_float (point->y));
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cogl_curve_to (void                *closure,
+               const cairo_point_t *p0,
+               const cairo_point_t *p1,
+               const cairo_point_t *p2)
+{
+    cogl_path_curve_to (closure,
+                       _cairo_cogl_util_fixed_to_float (p0->x),
+                       _cairo_cogl_util_fixed_to_float (p0->y),
+                       _cairo_cogl_util_fixed_to_float (p1->x),
+                       _cairo_cogl_util_fixed_to_float (p1->y),
+                       _cairo_cogl_util_fixed_to_float (p2->x),
+                       _cairo_cogl_util_fixed_to_float (p2->y));
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cogl_close_path (void *closure)
+{
+    cogl_path_close (closure);
+    return CAIRO_STATUS_SUCCESS;
+}
+
+CoglPath *
+_cairo_cogl_util_path_from_cairo (const cairo_path_fixed_t *path,
+                                 cairo_fill_rule_t fill_rule,
+                                 float tolerance)
+{
+    CoglPath *cogl_path = cogl_path_new ();
+    cairo_status_t status;
+
+    if (fill_rule == CAIRO_FILL_RULE_EVEN_ODD)
+       cogl_path_set_fill_rule (cogl_path, COGL_PATH_FILL_RULE_EVEN_ODD);
+    else
+       cogl_path_set_fill_rule (cogl_path, COGL_PATH_FILL_RULE_NON_ZERO);
+
+#ifdef USE_CAIRO_PATH_FLATTENER
+    /* XXX: rely on cairo to do path flattening, since it seems Cogl's
+     * curve_to flattening is much slower */
+    status = _cairo_path_fixed_interpret_flat (path,
+                                              _cogl_move_to,
+                                              _cogl_line_to,
+                                              _cogl_close_path,
+                                              cogl_path,
+                                              tolerance);
+#else
+    status = _cairo_path_fixed_interpret (path,
+                                         _cogl_move_to,
+                                         _cogl_line_to,
+                                         _cogl_curve_to,
+                                         _cogl_close_path,
+                                         cogl_path);
+#endif
+
+    assert (status == CAIRO_STATUS_SUCCESS);
+    return cogl_path;
+}
+
+int
+_cairo_cogl_util_next_p2 (int a)
+{
+  int rval = 1;
+
+  while (rval < a)
+    rval <<= 1;
+
+  return rval;
+}
+
diff --git a/src/cairo-cogl.h b/src/cairo-cogl.h
new file mode 100644 (file)
index 0000000..f270d74
--- /dev/null
@@ -0,0 +1,69 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation.
+ *
+ * Contributor(s):
+ *      Robert Bragg <robert@linux.intel.com>
+ */
+
+#ifndef CAIRO_VG_H
+#define CAIRO_VG_H
+
+#include "cairo.h"
+
+#if CAIRO_HAS_COGL_SURFACE
+
+#include <cogl/cogl2-experimental.h>
+
+CAIRO_BEGIN_DECLS
+
+cairo_public cairo_device_t *
+cairo_cogl_device_create (CoglContext *context);
+
+cairo_public cairo_surface_t *
+cairo_cogl_surface_create (cairo_device_t *device,
+                          CoglFramebuffer *framebuffer);
+
+cairo_public CoglFramebuffer *
+cairo_cogl_surface_get_framebuffer (cairo_surface_t *surface);
+
+cairo_public CoglTexture *
+cairo_cogl_surface_get_texture (cairo_surface_t *surface);
+
+cairo_public void
+cairo_cogl_surface_end_frame (cairo_surface_t *surface);
+
+CAIRO_END_DECLS
+
+#else  /* CAIRO_HAS_COGL_SURFACE*/
+# error Cairo was not compiled with support for the Cogl backend
+#endif /* CAIRO_HAS_COGL_SURFACE*/
+
+#endif /* CAIRO_COGL_H */
diff --git a/src/cairo-combsort-inline.h b/src/cairo-combsort-inline.h
new file mode 100644 (file)
index 0000000..d359fae
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright Â© 2008 Chris Wilson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+/* This fragment implements a comb sort (specifically combsort11) */
+#ifndef _HAVE_CAIRO_COMBSORT_NEWGAP
+#define _HAVE_CAIRO_COMBSORT_NEWGAP
+static inline unsigned int
+_cairo_combsort_newgap (unsigned int gap)
+{
+  gap = 10 * gap / 13;
+  if (gap == 9 || gap == 10)
+    gap = 11;
+  if (gap < 1)
+    gap = 1;
+  return gap;
+}
+#endif
+
+#define CAIRO_COMBSORT_DECLARE(NAME, TYPE, CMP) \
+static void \
+NAME (TYPE *base, unsigned int nmemb) \
+{ \
+  unsigned int gap = nmemb; \
+  unsigned int i, j; \
+  int swapped; \
+  do { \
+      gap = _cairo_combsort_newgap (gap); \
+      swapped = gap > 1; \
+      for (i = 0; i < nmemb-gap ; i++) { \
+         j = i + gap; \
+         if (CMP (base[i], base[j]) > 0 ) { \
+             TYPE tmp; \
+             tmp = base[i]; \
+             base[i] = base[j]; \
+             base[j] = tmp; \
+             swapped = 1; \
+         } \
+      } \
+  } while (swapped); \
+}
+
+#define CAIRO_COMBSORT_DECLARE_WITH_DATA(NAME, TYPE, CMP) \
+static void \
+NAME (TYPE *base, unsigned int nmemb, void *data) \
+{ \
+  unsigned int gap = nmemb; \
+  unsigned int i, j; \
+  int swapped; \
+  do { \
+      gap = _cairo_combsort_newgap (gap); \
+      swapped = gap > 1; \
+      for (i = 0; i < nmemb-gap ; i++) { \
+         j = i + gap; \
+         if (CMP (base[i], base[j], data) > 0 ) { \
+             TYPE tmp; \
+             tmp = base[i]; \
+             base[i] = base[j]; \
+             base[j] = tmp; \
+             swapped = 1; \
+         } \
+      } \
+  } while (swapped); \
+}
index dfe114b..f3e971e 100644 (file)
 #endif
 
 #ifdef _MSC_VER
+#ifndef __cplusplus
 #undef inline
 #define inline __inline
 #endif
+#endif
 
 #if defined(_MSC_VER) && defined(_M_IX86)
 /* When compiling with /Gy and /OPT:ICF identical functions will be folded in together.
index fd77289..1081374 100644 (file)
@@ -83,6 +83,13 @@ _cairo_composite_rectangles_init_for_paint (cairo_composite_rectangles_t *extent
                                            const cairo_clip_t          *clip);
 
 cairo_private cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_paint (cairo_composite_rectangles_t *extents,
+                                                cairo_surface_t *surface,
+                                                cairo_operator_t op,
+                                                const cairo_pattern_t *source,
+                                                const cairo_clip_t *clip);
+
+cairo_private cairo_int_status_t
 _cairo_composite_rectangles_init_for_mask (cairo_composite_rectangles_t *extents,
                                           cairo_surface_t *surface,
                                           cairo_operator_t      op,
@@ -91,6 +98,14 @@ _cairo_composite_rectangles_init_for_mask (cairo_composite_rectangles_t *extents
                                           const cairo_clip_t           *clip);
 
 cairo_private cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_mask (cairo_composite_rectangles_t *extents,
+                                               cairo_surface_t *surface,
+                                               cairo_operator_t op,
+                                               const cairo_pattern_t *source,
+                                               const cairo_pattern_t *mask,
+                                               const cairo_clip_t *clip);
+
+cairo_private cairo_int_status_t
 _cairo_composite_rectangles_init_for_stroke (cairo_composite_rectangles_t *extents,
                                             cairo_surface_t *surface,
                                             cairo_operator_t    op,
@@ -101,6 +116,16 @@ _cairo_composite_rectangles_init_for_stroke (cairo_composite_rectangles_t *exten
                                             const cairo_clip_t         *clip);
 
 cairo_private cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_stroke (cairo_composite_rectangles_t *extents,
+                                                 cairo_surface_t *surface,
+                                                 cairo_operator_t       op,
+                                                 const cairo_pattern_t *source,
+                                                 const cairo_path_fixed_t      *path,
+                                                 const cairo_stroke_style_t    *style,
+                                                 const cairo_matrix_t  *ctm,
+                                                 const cairo_clip_t            *clip);
+
+cairo_private cairo_int_status_t
 _cairo_composite_rectangles_init_for_fill (cairo_composite_rectangles_t *extents,
                                           cairo_surface_t *surface,
                                           cairo_operator_t      op,
@@ -109,6 +134,14 @@ _cairo_composite_rectangles_init_for_fill (cairo_composite_rectangles_t *extents
                                           const cairo_clip_t           *clip);
 
 cairo_private cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_fill (cairo_composite_rectangles_t *extents,
+                                               cairo_surface_t *surface,
+                                               cairo_operator_t op,
+                                               const cairo_pattern_t *source,
+                                               const cairo_path_fixed_t *path,
+                                               const cairo_clip_t *clip);
+
+cairo_private cairo_int_status_t
 _cairo_composite_rectangles_init_for_boxes (cairo_composite_rectangles_t *extents,
                                              cairo_surface_t           *surface,
                                              cairo_operator_t           op,
@@ -136,6 +169,17 @@ _cairo_composite_rectangles_init_for_glyphs (cairo_composite_rectangles_t *exten
                                             cairo_bool_t               *overlap);
 
 cairo_private cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_glyphs (cairo_composite_rectangles_t *extents,
+                                                 cairo_surface_t *surface,
+                                                 cairo_operator_t op,
+                                                 const cairo_pattern_t *source,
+                                                 cairo_scaled_font_t *scaled_font,
+                                                 cairo_glyph_t *glyphs,
+                                                 int num_glyphs,
+                                                 const cairo_clip_t *clip,
+                                                 cairo_bool_t *overlap);
+
+cairo_private cairo_int_status_t
 _cairo_composite_rectangles_intersect_source_extents (cairo_composite_rectangles_t *extents,
                                                      const cairo_box_t *box);
 
index 7fc0f5f..abdf8c2 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "cairoint.h"
 
+#include "cairo-clip-inline.h"
 #include "cairo-error-private.h"
 #include "cairo-composite-rectangles-private.h"
 #include "cairo-pattern-private.h"
@@ -46,6 +47,36 @@ void _cairo_composite_rectangles_fini (cairo_composite_rectangles_t *extents)
     _cairo_clip_destroy (extents->clip);
 }
 
+static inline cairo_bool_t
+_cairo_composite_rectangles_check_lazy_init (cairo_composite_rectangles_t *extents,
+                                              cairo_surface_t *surface,
+                                              const cairo_pattern_t *pattern)
+{
+    cairo_pattern_type_t type;
+
+    if (! extents->is_bounded)
+       return FALSE;
+
+    type = cairo_pattern_get_type ((cairo_pattern_t *)pattern);
+
+    if (type == CAIRO_PATTERN_TYPE_SURFACE) {
+    cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) pattern;
+    cairo_surface_t *pattern_surface = pattern_surface = surface_pattern->surface;
+
+       /* XXX: both source and target are GL surface */
+       if (cairo_surface_get_type (pattern_surface) == CAIRO_SURFACE_TYPE_GL &&
+               pattern_surface->backend->type == CAIRO_SURFACE_TYPE_GL &&
+               cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_GL &&
+               surface->device == pattern_surface->device)
+        return TRUE;
+       } else  if (type == CAIRO_PATTERN_TYPE_SOLID ||
+                type == CAIRO_PATTERN_TYPE_RADIAL ||
+                type == CAIRO_PATTERN_TYPE_LINEAR)
+        return TRUE;
+
+    return FALSE;
+}
+
 static void
 _cairo_composite_reduce_pattern (const cairo_pattern_t *src,
                                 cairo_pattern_union_t *dst)
@@ -73,7 +104,8 @@ _cairo_composite_rectangles_init (cairo_composite_rectangles_t *extents,
                                  cairo_surface_t *surface,
                                  cairo_operator_t op,
                                  const cairo_pattern_t *source,
-                                 const cairo_clip_t *clip)
+                                 const cairo_clip_t *clip,
+                                 cairo_bool_t *should_be_lazy)
 {
     if (_cairo_clip_is_all_clipped (clip))
        return FALSE;
@@ -85,18 +117,30 @@ _cairo_composite_rectangles_init (cairo_composite_rectangles_t *extents,
     extents->clip = NULL;
 
     extents->unbounded = extents->destination;
-    if (clip && ! _cairo_rectangle_intersect (&extents->unbounded,
-                                             _cairo_clip_get_extents (clip)))
-       return FALSE;
+    extents->is_bounded = _cairo_operator_bounded_by_either (op);
+
+    if (*should_be_lazy)
+        *should_be_lazy = _cairo_composite_rectangles_check_lazy_init (extents,
+                                                                       surface,
+                                                                       source);
+
+    if ((! *should_be_lazy) &&
+        (clip && ! _cairo_rectangle_intersect (&extents->unbounded,
+                                               _cairo_clip_get_extents (clip))))
+        return FALSE;
 
     extents->bounded = extents->unbounded;
-    extents->is_bounded = _cairo_operator_bounded_by_either (op);
 
-    extents->original_source_pattern = source;
-    _cairo_composite_reduce_pattern (source, &extents->source_pattern);
+       extents->original_source_pattern = source;
+       if (! *should_be_lazy) {
+               _cairo_composite_reduce_pattern (source, &extents->source_pattern);
+
+               _cairo_pattern_get_extents (&extents->source_pattern.base,
+                                    &extents->source);
+       } else
+        _cairo_pattern_get_extents (extents->original_source_pattern,
+                                    &extents->source);
 
-    _cairo_pattern_get_extents (&extents->source_pattern.base,
-                               &extents->source);
     if (extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_SOURCE) {
        if (! _cairo_rectangle_intersect (&extents->bounded, &extents->source))
            return FALSE;
@@ -105,6 +149,7 @@ _cairo_composite_rectangles_init (cairo_composite_rectangles_t *extents,
     extents->original_mask_pattern = NULL;
     extents->mask_pattern.base.type = CAIRO_PATTERN_TYPE_SOLID;
     extents->mask_pattern.solid.color.alpha = 1.; /* XXX full initialisation? */
+    extents->mask_pattern.solid.color.alpha_short = 0xffff;
 
     return TRUE;
 }
@@ -116,8 +161,10 @@ _cairo_composite_rectangles_init_for_paint (cairo_composite_rectangles_t *extent
                                            const cairo_pattern_t       *source,
                                            const cairo_clip_t          *clip)
 {
+    cairo_bool_t should_be_lazy = FALSE;
     if (! _cairo_composite_rectangles_init (extents,
-                                           surface, op, source, clip))
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
     {
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
     }
@@ -136,6 +183,38 @@ _cairo_composite_rectangles_init_for_paint (cairo_composite_rectangles_t *extent
     return CAIRO_STATUS_SUCCESS;
 }
 
+cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_paint (cairo_composite_rectangles_t *extents,
+                                                cairo_surface_t *surface,
+                                                cairo_operator_t op,
+                                                const cairo_pattern_t *source,
+                                                const cairo_clip_t *clip)
+{
+    cairo_bool_t should_be_lazy = TRUE;
+    if (! _cairo_composite_rectangles_init (extents,
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
+    {
+       return CAIRO_INT_STATUS_NOTHING_TO_DO;
+    }
+
+    if (! should_be_lazy) {
+       extents->mask = extents->destination;
+
+       extents->clip = _cairo_clip_reduce_for_composite (clip, extents);
+       if (_cairo_clip_is_all_clipped (extents->clip))
+           return CAIRO_INT_STATUS_NOTHING_TO_DO;
+
+       if (extents->source_pattern.base.type != CAIRO_PATTERN_TYPE_SOLID)
+           _cairo_pattern_sampled_area (&extents->source_pattern.base,
+                                        &extents->bounded,
+                                        &extents->source_sample_area);
+    } else
+       extents->clip = _cairo_clip_copy (clip);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
 static cairo_int_status_t
 _cairo_composite_rectangles_intersect (cairo_composite_rectangles_t *extents,
                                       const cairo_clip_t *clip)
@@ -146,8 +225,12 @@ _cairo_composite_rectangles_intersect (cairo_composite_rectangles_t *extents,
     if (! ret && extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK)
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
 
-    if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE))
+    if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) {
        extents->unbounded = extents->bounded;
+    } else if (extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) {
+       if (!_cairo_rectangle_intersect (&extents->unbounded, &extents->mask))
+           return CAIRO_INT_STATUS_NOTHING_TO_DO;
+    }
 
     extents->clip = _cairo_clip_reduce_for_composite (clip, extents);
     if (_cairo_clip_is_all_clipped (extents->clip))
@@ -198,8 +281,12 @@ _cairo_composite_rectangles_intersect_source_extents (cairo_composite_rectangles
        rect.height == extents->bounded.height)
        return CAIRO_INT_STATUS_SUCCESS;
 
-    if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE))
+    if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) {
        extents->unbounded = extents->bounded;
+    } else if (extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) {
+       if (!_cairo_rectangle_intersect (&extents->unbounded, &extents->mask))
+           return CAIRO_INT_STATUS_NOTHING_TO_DO;
+    }
 
     clip = extents->clip;
     extents->clip = _cairo_clip_reduce_for_composite (clip, extents);
@@ -252,8 +339,12 @@ _cairo_composite_rectangles_intersect_mask_extents (cairo_composite_rectangles_t
        mask.height == extents->bounded.height)
        return CAIRO_INT_STATUS_SUCCESS;
 
-    if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE))
+    if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) {
        extents->unbounded = extents->bounded;
+    } else if (extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) {
+       if (!_cairo_rectangle_intersect (&extents->unbounded, &extents->mask))
+           return CAIRO_INT_STATUS_NOTHING_TO_DO;
+    }
 
     clip = extents->clip;
     extents->clip = _cairo_clip_reduce_for_composite (clip, extents);
@@ -287,8 +378,11 @@ _cairo_composite_rectangles_init_for_mask (cairo_composite_rectangles_t *extents
                                           const cairo_pattern_t        *mask,
                                           const cairo_clip_t           *clip)
 {
+    cairo_bool_t should_be_lazy = FALSE;
+
     if (! _cairo_composite_rectangles_init (extents,
-                                           surface, op, source, clip))
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
     {
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
     }
@@ -302,6 +396,51 @@ _cairo_composite_rectangles_init_for_mask (cairo_composite_rectangles_t *extents
 }
 
 cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_mask (cairo_composite_rectangles_t *extents,
+                                               cairo_surface_t *surface,
+                                               cairo_operator_t op,
+                                               const cairo_pattern_t *source,
+                                               const cairo_pattern_t *mask,
+                                               const cairo_clip_t *clip)
+{
+       cairo_bool_t ret;
+       cairo_bool_t should_be_lazy = (op == CAIRO_OPERATOR_SOURCE) ? FALSE : TRUE;
+
+
+       if (! _cairo_composite_rectangles_init (extents,
+                                               surface, op, source, clip,
+                                               &should_be_lazy))
+    {
+       return CAIRO_INT_STATUS_NOTHING_TO_DO;
+    }
+
+       extents->original_mask_pattern = mask;
+
+       if (! should_be_lazy) {
+               _cairo_composite_reduce_pattern (mask, &extents->mask_pattern);
+               _cairo_pattern_get_extents (&extents->mask_pattern.base,
+                                       &extents->mask);
+               return _cairo_composite_rectangles_intersect (extents, clip);
+       }
+
+       _cairo_pattern_get_extents (extents->original_mask_pattern,
+                               &extents->mask);
+
+       ret = _cairo_rectangle_intersect (&extents->bounded, &extents->mask);
+       if (! ret && extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK)
+               return CAIRO_INT_STATUS_NOTHING_TO_DO;
+
+       if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE))
+               extents->unbounded = extents->bounded;
+       else if ((extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) &&
+                        (!_cairo_rectangle_intersect (&extents->unbounded, &extents->mask)))
+                        return CAIRO_INT_STATUS_NOTHING_TO_DO;
+
+       extents->clip = _cairo_clip_copy (clip);
+       return CAIRO_INT_STATUS_SUCCESS;
+}
+
+cairo_int_status_t
 _cairo_composite_rectangles_init_for_stroke (cairo_composite_rectangles_t *extents,
                                             cairo_surface_t *surface,
                                             cairo_operator_t            op,
@@ -311,8 +450,11 @@ _cairo_composite_rectangles_init_for_stroke (cairo_composite_rectangles_t *exten
                                             const cairo_matrix_t       *ctm,
                                             const cairo_clip_t         *clip)
 {
+    cairo_bool_t should_be_lazy = FALSE;
+
     if (! _cairo_composite_rectangles_init (extents,
-                                           surface, op, source, clip))
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
     {
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
     }
@@ -323,6 +465,35 @@ _cairo_composite_rectangles_init_for_stroke (cairo_composite_rectangles_t *exten
 }
 
 cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_stroke (cairo_composite_rectangles_t *extents,
+                                                 cairo_surface_t *surface,
+                                                 cairo_operator_t op,
+                                                 const cairo_pattern_t *source,
+                                                 const cairo_path_fixed_t *path,
+                                                 const cairo_stroke_style_t *style,
+                                                 const cairo_matrix_t *ctm,
+                                                 const cairo_clip_t *clip)
+{
+    cairo_bool_t should_be_lazy = TRUE;
+
+    if (! _cairo_composite_rectangles_init (extents,
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
+    {
+       return CAIRO_INT_STATUS_NOTHING_TO_DO;
+    }
+
+    if (! should_be_lazy) {
+       _cairo_path_fixed_approximate_stroke_extents (path, style, ctm,
+                                                     &extents->mask);
+       return _cairo_composite_rectangles_intersect (extents, clip);
+    }
+
+    extents->clip = _cairo_clip_copy (clip);
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+cairo_int_status_t
 _cairo_composite_rectangles_init_for_fill (cairo_composite_rectangles_t *extents,
                                           cairo_surface_t *surface,
                                           cairo_operator_t              op,
@@ -330,8 +501,11 @@ _cairo_composite_rectangles_init_for_fill (cairo_composite_rectangles_t *extents
                                           const cairo_path_fixed_t             *path,
                                           const cairo_clip_t           *clip)
 {
+    cairo_bool_t should_be_lazy = FALSE;
+
     if (! _cairo_composite_rectangles_init (extents,
-                                           surface, op, source, clip))
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
     {
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
     }
@@ -342,6 +516,32 @@ _cairo_composite_rectangles_init_for_fill (cairo_composite_rectangles_t *extents
 }
 
 cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_fill (cairo_composite_rectangles_t *extents,
+                                               cairo_surface_t *surface,
+                                               cairo_operator_t op,
+                                               const cairo_pattern_t *source,
+                                               const cairo_path_fixed_t *path,
+                                               const cairo_clip_t *clip)
+{
+    cairo_bool_t should_be_lazy = TRUE;
+    if (! _cairo_composite_rectangles_init (extents,
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
+    {
+       return CAIRO_INT_STATUS_NOTHING_TO_DO;
+    }
+
+    if (! should_be_lazy) {
+       _cairo_path_fixed_approximate_fill_extents (path, &extents->mask);
+
+       return _cairo_composite_rectangles_intersect (extents, clip);
+    }
+
+    extents->clip = _cairo_clip_copy (clip);
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+cairo_int_status_t
 _cairo_composite_rectangles_init_for_polygon (cairo_composite_rectangles_t *extents,
                                              cairo_surface_t           *surface,
                                              cairo_operator_t           op,
@@ -349,8 +549,10 @@ _cairo_composite_rectangles_init_for_polygon (cairo_composite_rectangles_t *exte
                                              const cairo_polygon_t     *polygon,
                                              const cairo_clip_t                *clip)
 {
+    cairo_bool_t should_be_lazy = FALSE;
     if (! _cairo_composite_rectangles_init (extents,
-                                           surface, op, source, clip))
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
     {
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
     }
@@ -368,9 +570,11 @@ _cairo_composite_rectangles_init_for_boxes (cairo_composite_rectangles_t *extent
                                              const cairo_clip_t                *clip)
 {
     cairo_box_t box;
+    cairo_bool_t should_be_lazy = FALSE;
 
     if (! _cairo_composite_rectangles_init (extents,
-                                           surface, op, source, clip))
+                                           surface, op, source, clip,
+                                           &should_be_lazy))
     {
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
     }
@@ -392,8 +596,10 @@ _cairo_composite_rectangles_init_for_glyphs (cairo_composite_rectangles_t *exten
                                             cairo_bool_t               *overlap)
 {
     cairo_status_t status;
+    cairo_bool_t should_be_lazy = FALSE;
 
-    if (! _cairo_composite_rectangles_init (extents, surface, op, source, clip))
+    if (! _cairo_composite_rectangles_init (extents, surface, op, source,
+                                           clip, &should_be_lazy))
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
 
     /* Computing the exact bbox and the overlap is expensive.
@@ -417,6 +623,36 @@ _cairo_composite_rectangles_init_for_glyphs (cairo_composite_rectangles_t *exten
     return _cairo_composite_rectangles_intersect (extents, clip);
 }
 
+cairo_int_status_t
+_cairo_composite_rectangles_lazy_init_for_glyphs (cairo_composite_rectangles_t *extents,
+                                                 cairo_surface_t *surface,
+                                                 cairo_operator_t op,
+                                                 const cairo_pattern_t *source,
+                                                 cairo_scaled_font_t *scaled_font,
+                                                 cairo_glyph_t *glyphs,
+                                                 int num_glyphs,
+                                                 const cairo_clip_t *clip,
+                                                 cairo_bool_t *overlap)
+{
+    cairo_status_t status;
+    cairo_bool_t should_be_lazy = TRUE;
+
+    if (! _cairo_composite_rectangles_init (extents, surface, op, source,
+                                           clip, &should_be_lazy))
+       return CAIRO_INT_STATUS_NOTHING_TO_DO;
+
+    status = _cairo_scaled_font_glyph_device_extents (scaled_font,
+                                                     glyphs, num_glyphs,
+                                                     &extents->source,
+                                                     overlap);
+    if (unlikely (status))
+       return status;
+
+    extents->clip = _cairo_clip_copy (clip);
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
 cairo_bool_t
 _cairo_composite_rectangles_can_reduce_clip (cairo_composite_rectangles_t *composite,
                                             cairo_clip_t *clip)
index 72507b2..7b56d17 100644 (file)
@@ -86,6 +86,7 @@ struct cairo_compositor {
                                 cairo_glyph_t                  *glyphs,
                                 int                             num_glyphs,
                                 cairo_bool_t                    overlap);
+    cairo_bool_t lazy_init;
 };
 
 struct cairo_mask_compositor {
@@ -211,6 +212,9 @@ struct cairo_traps_compositor {
                                 cairo_boxes_t          *boxes);
 
     cairo_int_status_t
+       (*check_composite) (const cairo_composite_rectangles_t *extents);
+
+    cairo_int_status_t
        (*composite)            (void                   *dst,
                                 cairo_operator_t        op,
                                 cairo_surface_t        *src,
@@ -298,6 +302,10 @@ _cairo_mask_compositor_init (cairo_mask_compositor_t *compositor,
                             const cairo_compositor_t *delegate);
 
 cairo_private void
+_cairo_shape_mask_compositor_init (cairo_compositor_t *compositor,
+                                  const cairo_compositor_t  *delegate);
+
+cairo_private void
 _cairo_traps_compositor_init (cairo_traps_compositor_t *compositor,
                              const cairo_compositor_t *delegate);
 
index cf943e7..8273489 100644 (file)
@@ -38,6 +38,7 @@
 #include "cairoint.h"
 
 #include "cairo-compositor-private.h"
+#include "cairo-damage-private.h"
 #include "cairo-error-private.h"
 
 cairo_int_status_t
@@ -49,10 +50,22 @@ _cairo_compositor_paint (const cairo_compositor_t   *compositor,
 {
     cairo_composite_rectangles_t extents;
     cairo_int_status_t status;
-
-    status = _cairo_composite_rectangles_init_for_paint (&extents, surface,
-                                                        op, source,
-                                                        clip);
+    cairo_bool_t initialized = TRUE;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (compositor->lazy_init) {
+       status = _cairo_composite_rectangles_lazy_init_for_paint (&extents,
+                                                                 surface,
+                                                                 op, source,
+                                                                 clip);
+       initialized = FALSE;
+    }
+    else
+        status = _cairo_composite_rectangles_init_for_paint (&extents,
+                                                            surface,
+                                                            op, source,
+                                                            clip);
     if (unlikely (status))
        return status;
 
@@ -60,11 +73,33 @@ _cairo_compositor_paint (const cairo_compositor_t   *compositor,
        while (compositor->paint == NULL)
            compositor = compositor->delegate;
 
+       if (! compositor->lazy_init && ! initialized) {
+           /* XXX: we should do better instead of re-init */
+           _cairo_composite_rectangles_fini (&extents);
+           status = _cairo_composite_rectangles_init_for_paint (&extents,
+                                                                surface,
+                                                                op, source,
+                                                                clip);
+           initialized = TRUE;
+
+           if (unlikely (status))
+               return status;
+       }
+
        status = compositor->paint (compositor, &extents);
 
        compositor = compositor->delegate;
     } while (status == CAIRO_INT_STATUS_UNSUPPORTED);
 
+    if (status == CAIRO_INT_STATUS_SUCCESS && surface->damage) {
+       TRACE ((stderr, "%s: applying damage (%d,%d)x(%d, %d)\n",
+               __FUNCTION__,
+               extents.unbounded.x, extents.unbounded.y,
+               extents.unbounded.width, extents.unbounded.height));
+       surface->damage = _cairo_damage_add_rectangle (surface->damage,
+                                                      &extents.unbounded);
+    }
+
     _cairo_composite_rectangles_fini (&extents);
 
     return status;
@@ -80,10 +115,21 @@ _cairo_compositor_mask (const cairo_compositor_t   *compositor,
 {
     cairo_composite_rectangles_t extents;
     cairo_int_status_t status;
-
-    status = _cairo_composite_rectangles_init_for_mask (&extents, surface,
-                                                       op, source, mask,
-                                                       clip);
+    cairo_bool_t initialized = TRUE;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (compositor->lazy_init) {
+       status = _cairo_composite_rectangles_lazy_init_for_mask (&extents,
+                                                                surface,
+                                                                op, source,
+                                                                mask, clip);
+       initialized = FALSE;
+    } else
+       status = _cairo_composite_rectangles_init_for_mask (&extents,
+                                                           surface,
+                                                           op, source,
+                                                           mask, clip);
     if (unlikely (status))
        return status;
 
@@ -91,11 +137,33 @@ _cairo_compositor_mask (const cairo_compositor_t   *compositor,
        while (compositor->mask == NULL)
            compositor = compositor->delegate;
 
+       if (! compositor->lazy_init && ! initialized) {
+           /* XXX: we should do better instead of re-init */
+           _cairo_composite_rectangles_fini (&extents);
+           status = _cairo_composite_rectangles_init_for_mask (&extents,
+                                                               surface,
+                                                               op, source,
+                                                               mask, clip);
+           initialized = TRUE;
+
+           if (unlikely (status))
+               return status;
+       }
+
        status = compositor->mask (compositor, &extents);
 
        compositor = compositor->delegate;
     } while (status == CAIRO_INT_STATUS_UNSUPPORTED);
 
+    if (status == CAIRO_INT_STATUS_SUCCESS && surface->damage) {
+       TRACE ((stderr, "%s: applying damage (%d,%d)x(%d, %d)\n",
+               __FUNCTION__,
+               extents.unbounded.x, extents.unbounded.y,
+               extents.unbounded.width, extents.unbounded.height));
+       surface->damage = _cairo_damage_add_rectangle (surface->damage,
+                                                      &extents.unbounded);
+    }
+
     _cairo_composite_rectangles_fini (&extents);
 
     return status;
@@ -116,11 +184,24 @@ _cairo_compositor_stroke (const cairo_compositor_t        *compositor,
 {
     cairo_composite_rectangles_t extents;
     cairo_int_status_t status;
-
-    status = _cairo_composite_rectangles_init_for_stroke (&extents, surface,
-                                                         op, source,
-                                                         path, style, ctm,
-                                                         clip);
+    cairo_bool_t initialized = TRUE;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (compositor->lazy_init) {
+       status = _cairo_composite_rectangles_lazy_init_for_stroke (&extents,
+                                                                  surface,
+                                                                  op, source,
+                                                                  path, style,
+                                                                  ctm, clip);
+       initialized = FALSE;
+    }
+    else
+       status = _cairo_composite_rectangles_init_for_stroke (&extents,
+                                                             surface,
+                                                             op, source,
+                                                             path, style,
+                                                             ctm, clip);
     if (unlikely (status))
        return status;
 
@@ -128,6 +209,23 @@ _cairo_compositor_stroke (const cairo_compositor_t *compositor,
        while (compositor->stroke == NULL)
            compositor = compositor->delegate;
 
+       if (! compositor->lazy_init && ! initialized) {
+           /* XXX: we should do better instead of re-init */
+           _cairo_composite_rectangles_fini (&extents);
+           status = _cairo_composite_rectangles_init_for_stroke (&extents,
+                                                                 surface,
+                                                                 op,
+                                                                 source,
+                                                                 path,
+                                                                 style,
+                                                                 ctm,
+                                                                 clip);
+           initialized = TRUE;
+
+           if (unlikely (status))
+               return status;
+       }
+
        status = compositor->stroke (compositor, &extents,
                                     path, style, ctm, ctm_inverse,
                                     tolerance, antialias);
@@ -135,6 +233,15 @@ _cairo_compositor_stroke (const cairo_compositor_t *compositor,
        compositor = compositor->delegate;
     } while (status == CAIRO_INT_STATUS_UNSUPPORTED);
 
+    if (status == CAIRO_INT_STATUS_SUCCESS && surface->damage) {
+       TRACE ((stderr, "%s: applying damage (%d,%d)x(%d, %d)\n",
+               __FUNCTION__,
+               extents.unbounded.x, extents.unbounded.y,
+               extents.unbounded.width, extents.unbounded.height));
+       surface->damage = _cairo_damage_add_rectangle (surface->damage,
+                                                      &extents.unbounded);
+    }
+
     _cairo_composite_rectangles_fini (&extents);
 
     return status;
@@ -153,10 +260,22 @@ _cairo_compositor_fill (const cairo_compositor_t  *compositor,
 {
     cairo_composite_rectangles_t extents;
     cairo_int_status_t status;
-
-    status = _cairo_composite_rectangles_init_for_fill (&extents, surface,
-                                                       op, source, path,
-                                                       clip);
+    cairo_bool_t initialized = TRUE;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (compositor->lazy_init) {
+       status = _cairo_composite_rectangles_lazy_init_for_fill (&extents,
+                                                                surface,
+                                                                op, source,
+                                                                path, clip);
+       initialized = FALSE;
+    }
+    else
+       status = _cairo_composite_rectangles_init_for_fill (&extents,
+                                                           surface,
+                                                           op, source,
+                                                           path, clip);
     if (unlikely (status))
        return status;
 
@@ -164,12 +283,34 @@ _cairo_compositor_fill (const cairo_compositor_t  *compositor,
        while (compositor->fill == NULL)
            compositor = compositor->delegate;
 
+       if (! compositor->lazy_init && ! initialized) {
+           /* XXX: we should do better instead of re-init */
+           _cairo_composite_rectangles_fini (&extents);
+           status = _cairo_composite_rectangles_init_for_fill (&extents,
+                                                               surface,
+                                                               op, source,
+                                                               path, clip);
+           initialized = TRUE;
+
+           if (unlikely (status))
+               return status;
+       }
+
        status = compositor->fill (compositor, &extents,
                                   path, fill_rule, tolerance, antialias);
 
        compositor = compositor->delegate;
     } while (status == CAIRO_INT_STATUS_UNSUPPORTED);
 
+    if (status == CAIRO_INT_STATUS_SUCCESS && surface->damage) {
+       TRACE ((stderr, "%s: applying damage (%d,%d)x(%d, %d)\n",
+               __FUNCTION__,
+               extents.unbounded.x, extents.unbounded.y,
+               extents.unbounded.width, extents.unbounded.height));
+       surface->damage = _cairo_damage_add_rectangle (surface->damage,
+                                                      &extents.unbounded);
+    }
+
     _cairo_composite_rectangles_fini (&extents);
 
     return status;
@@ -188,12 +329,23 @@ _cairo_compositor_glyphs (const cairo_compositor_t                *compositor,
     cairo_composite_rectangles_t extents;
     cairo_bool_t overlap;
     cairo_int_status_t status;
-
-    status = _cairo_composite_rectangles_init_for_glyphs (&extents, surface,
-                                                         op, source,
-                                                         scaled_font,
-                                                         glyphs, num_glyphs,
-                                                         clip, &overlap);
+    cairo_bool_t initialized = TRUE;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (compositor->lazy_init) {
+       status = _cairo_composite_rectangles_lazy_init_for_glyphs (&extents, surface,
+                                                                 op, source,
+                                                                 scaled_font,
+                                                                 glyphs, num_glyphs,
+                                                                 clip, &overlap);
+       initialized = FALSE;
+    } else
+       status = _cairo_composite_rectangles_init_for_glyphs (&extents, surface,
+                                                            op, source,
+                                                            scaled_font,
+                                                            glyphs, num_glyphs,
+                                                            clip, &overlap);
     if (unlikely (status))
        return status;
 
@@ -201,12 +353,35 @@ _cairo_compositor_glyphs (const cairo_compositor_t                *compositor,
        while (compositor->glyphs == NULL)
            compositor = compositor->delegate;
 
+       if (! compositor->lazy_init && ! initialized) {
+           /* XXX: we should do better instead of re-init */
+           _cairo_composite_rectangles_fini (&extents);
+           status = _cairo_composite_rectangles_init_for_glyphs (&extents, surface,
+                                                                op, source,
+                                                                scaled_font,
+                                                                glyphs, num_glyphs,
+                                                                clip, &overlap);
+           initialized = TRUE;
+
+           if (unlikely (status))
+               return status;
+       }
+
        status = compositor->glyphs (compositor, &extents,
                                     scaled_font, glyphs, num_glyphs, overlap);
 
        compositor = compositor->delegate;
     } while (status == CAIRO_INT_STATUS_UNSUPPORTED);
 
+    if (status == CAIRO_INT_STATUS_SUCCESS && surface->damage) {
+       TRACE ((stderr, "%s: applying damage (%d,%d)x(%d, %d)\n",
+               __FUNCTION__,
+               extents.unbounded.x, extents.unbounded.y,
+               extents.unbounded.width, extents.unbounded.height));
+       surface->damage = _cairo_damage_add_rectangle (surface->damage,
+                                                      &extents.unbounded);
+    }
+
     _cairo_composite_rectangles_fini (&extents);
 
     return status;
diff --git a/src/cairo-contour-inline.h b/src/cairo-contour-inline.h
new file mode 100644 (file)
index 0000000..7972c1a
--- /dev/null
@@ -0,0 +1,80 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Intel Corporation
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#ifndef CAIRO_CONTOUR_INLINE_H
+#define CAIRO_CONTOUR_INLINE_H
+
+#include "cairo-contour-private.h"
+
+CAIRO_BEGIN_DECLS
+
+static inline cairo_int_status_t
+_cairo_contour_add_point (cairo_contour_t *contour,
+                         const cairo_point_t *point)
+{
+    struct _cairo_contour_chain *tail = contour->tail;
+
+    if (unlikely (tail->num_points == tail->size_points))
+       return __cairo_contour_add_point (contour, point);
+
+    tail->points[tail->num_points++] = *point;
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static inline cairo_point_t *
+_cairo_contour_first_point (cairo_contour_t *c)
+{
+    return &c->chain.points[0];
+}
+
+static inline cairo_point_t *
+_cairo_contour_last_point (cairo_contour_t *c)
+{
+    return &c->tail->points[c->tail->num_points-1];
+}
+
+static inline void
+_cairo_contour_remove_last_point (cairo_contour_t *contour)
+{
+    if (contour->chain.num_points == 0)
+       return;
+
+    if (--contour->tail->num_points == 0)
+       __cairo_contour_remove_last_chain (contour);
+}
+
+CAIRO_END_DECLS
+
+#endif /* CAIRO_CONTOUR_INLINE_H */
index 2eb1f60..1dfc46f 100644 (file)
@@ -93,31 +93,6 @@ cairo_private cairo_int_status_t
 __cairo_contour_add_point (cairo_contour_t *contour,
                           const cairo_point_t *point);
 
-static inline cairo_int_status_t
-_cairo_contour_add_point (cairo_contour_t *contour,
-                         const cairo_point_t *point)
-{
-    struct _cairo_contour_chain *tail = contour->tail;
-
-    if (unlikely (tail->num_points == tail->size_points))
-       return __cairo_contour_add_point (contour, point);
-
-    tail->points[tail->num_points++] = *point;
-    return CAIRO_INT_STATUS_SUCCESS;
-}
-
-static inline cairo_point_t *
-_cairo_contour_first_point (cairo_contour_t *c)
-{
-    return &c->chain.points[0];
-}
-
-static inline cairo_point_t *
-_cairo_contour_last_point (cairo_contour_t *c)
-{
-    return &c->tail->points[c->tail->num_points-1];
-}
-
 cairo_private void
 _cairo_contour_simplify (cairo_contour_t *contour, double tolerance);
 
@@ -135,16 +110,6 @@ _cairo_contour_add_reversed (cairo_contour_t *dst,
 cairo_private void
 __cairo_contour_remove_last_chain (cairo_contour_t *contour);
 
-static inline void
-_cairo_contour_remove_last_point (cairo_contour_t *contour)
-{
-    if (contour->chain.num_points == 0)
-       return;
-
-    if (--contour->tail->num_points == 0)
-       __cairo_contour_remove_last_chain (contour);
-}
-
 cairo_private void
 _cairo_contour_reset (cairo_contour_t *contour);
 
index ac3998b..d356f4f 100644 (file)
@@ -40,7 +40,8 @@
 
 #include "cairo-error-private.h"
 #include "cairo-freelist-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
+#include "cairo-contour-inline.h"
 #include "cairo-contour-private.h"
 
 void
diff --git a/src/cairo-damage-private.h b/src/cairo-damage-private.h
new file mode 100644 (file)
index 0000000..28768fd
--- /dev/null
@@ -0,0 +1,82 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#ifndef CAIRO_DAMAGE_PRIVATE_H
+#define CAIRO_DAMAGE_PRIVATE_H
+
+#include "cairo-types-private.h"
+
+#include <pixman.h>
+
+CAIRO_BEGIN_DECLS
+
+struct _cairo_damage {
+    cairo_status_t status;
+    cairo_region_t *region;
+
+    int dirty, remain;
+    struct _cairo_damage_chunk {
+       struct _cairo_damage_chunk *next;
+       cairo_box_t *base;
+       int count;
+       int size;
+    } chunks, *tail;
+    cairo_box_t boxes[32];
+};
+
+cairo_private cairo_damage_t *
+_cairo_damage_create (void);
+
+cairo_private cairo_damage_t *
+_cairo_damage_add_box (cairo_damage_t *damage,
+                      const cairo_box_t *box);
+
+cairo_private cairo_damage_t *
+_cairo_damage_add_rectangle (cairo_damage_t *damage,
+                            const cairo_rectangle_int_t *rect);
+
+cairo_private cairo_damage_t *
+_cairo_damage_add_region (cairo_damage_t *damage,
+                         const cairo_region_t *region);
+
+cairo_private cairo_damage_t *
+_cairo_damage_reduce (cairo_damage_t *damage);
+
+cairo_private void
+_cairo_damage_destroy (cairo_damage_t *damage);
+
+CAIRO_END_DECLS
+
+#endif /* CAIRO_DAMAGE_PRIVATE_H */
diff --git a/src/cairo-damage.c b/src/cairo-damage.c
new file mode 100644 (file)
index 0000000..06ef9fd
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairoint.h"
+
+#include "cairo-damage-private.h"
+#include "cairo-region-private.h"
+
+static const cairo_damage_t __cairo_damage__nil = { CAIRO_STATUS_NO_MEMORY };
+
+cairo_damage_t *
+_cairo_damage_create (void)
+{
+    cairo_damage_t *damage;
+
+    damage = malloc (sizeof (*damage));
+    if (unlikely (damage == NULL)) {
+       _cairo_error_throw(CAIRO_STATUS_NO_MEMORY);
+       return (cairo_damage_t *) &__cairo_damage__nil;
+    }
+
+    damage->status = CAIRO_STATUS_SUCCESS;
+    damage->region = NULL;
+    damage->dirty = 0;
+    damage->tail = &damage->chunks;
+    damage->chunks.base = damage->boxes;
+    damage->chunks.size = ARRAY_LENGTH(damage->boxes);
+    damage->chunks.count = 0;
+    damage->chunks.next = NULL;
+
+    damage->remain = damage->chunks.size;
+
+    return damage;
+}
+
+void
+_cairo_damage_destroy (cairo_damage_t *damage)
+{
+    struct _cairo_damage_chunk *chunk, *next;
+
+    if (damage == (cairo_damage_t *) &__cairo_damage__nil)
+       return;
+
+    for (chunk = damage->chunks.next; chunk != NULL; chunk = next) {
+       next = chunk->next;
+       free (chunk);
+    }
+    cairo_region_destroy (damage->region);
+    free (damage);
+}
+
+static cairo_damage_t *
+_cairo_damage_add_boxes(cairo_damage_t *damage,
+                       const cairo_box_t *boxes,
+                       int count)
+{
+    struct _cairo_damage_chunk *chunk;
+    int n, size;
+
+    TRACE ((stderr, "%s x%d\n", __FUNCTION__, count));
+
+    if (damage == NULL)
+       damage = _cairo_damage_create ();
+    if (damage->status)
+       return damage;
+
+
+    damage->dirty += count;
+
+    n = count;
+    if (n > damage->remain)
+       n = damage->remain;
+
+    memcpy (damage->tail->base + damage->tail->count, boxes,
+           n * sizeof (cairo_box_t));
+
+    count -= n;
+    damage->tail->count += n;
+    damage->remain -= n;
+
+    if (count == 0)
+       return damage;
+
+    size = 2 * damage->tail->size;
+    if (size < count)
+       size = (count + 64) & ~63;
+
+    chunk = malloc (sizeof (*chunk) + sizeof (cairo_box_t) * size);
+    if (unlikely (chunk == NULL)) {
+       _cairo_damage_destroy (damage);
+       return (cairo_damage_t *) &__cairo_damage__nil;
+    }
+
+    chunk->next = NULL;
+    chunk->base = (cairo_box_t *) (chunk + 1);
+    chunk->size = size;
+    chunk->count = count;
+
+    damage->tail->next = chunk;
+    damage->remain = size - count;
+
+    memcpy (damage->tail->base, boxes + n,
+           count * sizeof (cairo_box_t));
+
+    return damage;
+}
+
+cairo_damage_t *
+_cairo_damage_add_box(cairo_damage_t *damage,
+                     const cairo_box_t *box)
+{
+    TRACE ((stderr, "%s: (%d, %d),(%d, %d)\n", __FUNCTION__,
+           box->p1.x, box->p1.y, box->p2.x, box->p2.y));
+
+    return _cairo_damage_add_boxes(damage, box, 1);
+}
+
+cairo_damage_t *
+_cairo_damage_add_rectangle(cairo_damage_t *damage,
+                           const cairo_rectangle_int_t *r)
+{
+    cairo_box_t box;
+
+    TRACE ((stderr, "%s: (%d, %d)x(%d, %d)\n", __FUNCTION__,
+           r->x, r->y, r->width, r->height));
+
+    box.p1.x = r->x;
+    box.p1.y = r->y;
+    box.p2.x = r->x + r->width;
+    box.p2.y = r->y + r->height;
+
+    return _cairo_damage_add_boxes(damage, &box, 1);
+}
+
+cairo_damage_t *
+_cairo_damage_add_region (cairo_damage_t *damage,
+                         const cairo_region_t *region)
+{
+    cairo_box_t *boxes;
+    int nbox;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    boxes = _cairo_region_get_boxes (region, &nbox);
+    return _cairo_damage_add_boxes(damage, boxes, nbox);
+}
+
+cairo_damage_t *
+_cairo_damage_reduce (cairo_damage_t *damage)
+{
+    cairo_box_t *free_boxes = NULL;
+    cairo_box_t *boxes, *b;
+    struct _cairo_damage_chunk *chunk, *last;
+
+    TRACE ((stderr, "%s: dirty=%d\n", __FUNCTION__,
+           damage ? damage->dirty : -1));
+    if (damage == NULL || damage->status || !damage->dirty)
+       return damage;
+
+    if (damage->region) {
+       cairo_region_t *region;
+
+       region = damage->region;
+       damage->region = NULL;
+
+       damage = _cairo_damage_add_region (damage, region);
+       cairo_region_destroy (region);
+
+       if (unlikely (damage->status))
+           return damage;
+    }
+
+    boxes = damage->tail->base;
+    if (damage->dirty > damage->tail->size) {
+       boxes = free_boxes = malloc (damage->dirty * sizeof (cairo_box_t));
+       if (unlikely (boxes == NULL)) {
+           _cairo_damage_destroy (damage);
+           return (cairo_damage_t *) &__cairo_damage__nil;
+       }
+
+       b = boxes;
+       last = NULL;
+    } else {
+       b = boxes + damage->tail->count;
+       last = damage->tail;
+    }
+
+    for (chunk = &damage->chunks; chunk != last; chunk = chunk->next) {
+       memcpy (b, chunk->base, chunk->count * sizeof (cairo_box_t));
+       b += chunk->count;
+    }
+
+    damage->region = _cairo_region_create_from_boxes (boxes, damage->dirty);
+    free (free_boxes);
+
+    if (unlikely (damage->region->status)) {
+       _cairo_damage_destroy (damage);
+       return (cairo_damage_t *) &__cairo_damage__nil;
+    }
+
+    damage->dirty = 0;
+    return damage;
+}
index b4cde7d..33d46aa 100644 (file)
@@ -56,6 +56,8 @@
  * functions have been called as necessary). If there are active cairo
  * objects, this call is likely to cause a crash, (eg. an assertion
  * failure due to a hash table being destroyed when non-empty).
+ *
+ * Since: 1.0
  **/
 void
 cairo_debug_reset_static_data (void)
@@ -90,6 +92,10 @@ cairo_debug_reset_static_data (void)
 
     _cairo_default_context_reset_static_data ();
 
+#if CAIRO_HAS_COGL_SURFACE
+    _cairo_cogl_context_reset_static_data ();
+#endif
+
     CAIRO_MUTEX_FINALIZE ();
 }
 
index 32fd12d..fd159b4 100644 (file)
@@ -40,6 +40,8 @@
 #include "cairo-gstate-private.h"
 #include "cairo-path-fixed-private.h"
 
+CAIRO_BEGIN_DECLS
+
 typedef struct _cairo_default_context cairo_default_context_t;
 
 struct _cairo_default_context {
@@ -55,4 +57,12 @@ struct _cairo_default_context {
 cairo_private cairo_t *
 _cairo_default_context_create (void *target);
 
+cairo_private cairo_status_t
+_cairo_default_context_init (cairo_default_context_t *cr, void *target);
+
+cairo_private void
+_cairo_default_context_fini (cairo_default_context_t *cr);
+
+CAIRO_END_DECLS
+
 #endif /* CAIRO_DEFAULT_CONTEXT_PRIVATE_H */
index 98cc668..dc8c359 100644 (file)
@@ -43,6 +43,7 @@
 #include "cairo-private.h"
 #include "cairo-arc-private.h"
 #include "cairo-backend-private.h"
+#include "cairo-clip-inline.h"
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
 #include "cairo-freed-pool-private.h"
@@ -63,11 +64,9 @@ _cairo_default_context_reset_static_data (void)
     _freed_pool_reset (&context_pool);
 }
 
-static void
-_cairo_default_context_destroy (void *abstract_cr)
+void
+_cairo_default_context_fini (cairo_default_context_t *cr)
 {
-    cairo_default_context_t *cr = abstract_cr;
-
     while (cr->gstate != &cr->gstate_tail[0]) {
        if (_cairo_gstate_restore (&cr->gstate, &cr->gstate_freelist))
            break;
@@ -84,6 +83,14 @@ _cairo_default_context_destroy (void *abstract_cr)
     _cairo_path_fixed_fini (cr->path);
 
     _cairo_fini (&cr->base);
+}
+
+static void
+_cairo_default_context_destroy (void *abstract_cr)
+{
+    cairo_default_context_t *cr = abstract_cr;
+
+    _cairo_default_context_fini (cr);
 
     /* mark the context as invalid to protect against misuse */
     cr->base.status = CAIRO_STATUS_NULL_POINTER;
@@ -1381,6 +1388,19 @@ static const cairo_backend_t _cairo_default_context_backend = {
     _cairo_default_context_show_page,
 };
 
+cairo_status_t
+_cairo_default_context_init (cairo_default_context_t *cr, void *target)
+{
+    _cairo_init (&cr->base, &_cairo_default_context_backend);
+    _cairo_path_fixed_init (cr->path);
+
+    cr->gstate = &cr->gstate_tail[0];
+    cr->gstate_freelist = &cr->gstate_tail[1];
+    cr->gstate_tail[1].next = NULL;
+
+    return _cairo_gstate_init (cr->gstate, target);
+}
+
 cairo_t *
 _cairo_default_context_create (void *target)
 {
@@ -1394,14 +1414,7 @@ _cairo_default_context_create (void *target)
            return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
     }
 
-    _cairo_init (&cr->base, &_cairo_default_context_backend);
-    _cairo_path_fixed_init (cr->path);
-
-    cr->gstate = &cr->gstate_tail[0];
-    cr->gstate_freelist = &cr->gstate_tail[1];
-    cr->gstate_tail[1].next = NULL;
-
-    status = _cairo_gstate_init (cr->gstate, target);
+    status = _cairo_default_context_init (cr, target);
     if (unlikely (status)) {
        _freed_pool_put (&context_pool, cr);
        return _cairo_create_in_error (status);
index fd1ec71..098f856 100644 (file)
@@ -92,7 +92,7 @@
  * interactions with existing surface API of the device functions for
  * surfaces of that type.
  * </para></note>
- */
+ **/
 
 static const cairo_device_t _nil_device = {
     CAIRO_REFERENCE_COUNT_INVALID,
index 46c0960..fd187bd 100644 (file)
@@ -1,6 +1,6 @@
 /* cairo - a vector graphics library with display and print output
  *
- * Copyright Â© 2003 University of Southern California
+ * Copyright Â© 2012 Intel Corporation
  *
  * This library is free software; you can redistribute it and/or
  * modify it either under the terms of the GNU Lesser General Public
  *
  * The Original Code is the cairo graphics library.
  *
- * The Initial Developer of the Original Code is University of Southern
- * California.
+ * The Initial Developer of the Original Code is Chris Wilson
  *
  * Contributor(s):
- *    Michael Emmel <mike.emmel@gmail.com>
- *    Claudio Ciccani <klan@users.sf.net>
+ *    Chris Wilson <chris@chris-wilson.co.uk>
  */
 
 #include "cairoint.h"
 #include "cairo-directfb.h"
 
 #include "cairo-clip-private.h"
+#include "cairo-compositor-private.h"
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
+#include "cairo-image-surface-private.h"
 #include "cairo-pattern-private.h"
+#include "cairo-surface-backend-private.h"
+#include "cairo-surface-fallback-private.h"
 
 #include <pixman.h>
 
 #include <direct/memcpy.h>
 #include <direct/util.h>
 
-/*
- * Rectangle works fine.
- * Bugs 361377, 359553, 359243 in Gnome BTS are caused
- * by GDK/DirectFB, not by Cairo/DirectFB.
- */
-#define DFB_RECTANGLES 1
-
-/*
- * Composite works fine.
- */
-#define DFB_COMPOSITE 1
-
-/*
- * CompositeTrapezoids works (without antialiasing).
- */
-#define DFB_COMPOSITE_TRAPEZOIDS 1
-
-/*
- * ShowGlyphs works fine.
- */
-#define DFB_SHOW_GLYPHS 1
-
-#define PIXMAN_invalid (pixman_format_code_t) 0
+slim_hidden_proto(cairo_directfb_surface_create);
 
-
-D_DEBUG_DOMAIN (CairoDFB_Acquire, "CairoDFB/Acquire", "Cairo DirectFB Acquire");
-D_DEBUG_DOMAIN (CairoDFB_Clip,    "CairoDFB/Clip",    "Cairo DirectFB Clipping");
-D_DEBUG_DOMAIN (CairoDFB_Font,    "CairoDFB/Font",    "Cairo DirectFB Font Rendering");
-D_DEBUG_DOMAIN (CairoDFB_Render,  "CairoDFB/Render",  "Cairo DirectFB Rendering");
-D_DEBUG_DOMAIN (CairoDFB_Surface, "CairoDFB/Surface", "Cairo DirectFB Surface");
-
-/*****************************************************************************/
-
-typedef struct _cairo_directfb_surface {
-    cairo_surface_t    base;
-
-    pixman_format_code_t       pixman_format;
-    cairo_bool_t               supported_destination;
+typedef struct _cairo_dfb_surface {
+    cairo_image_surface_t image;
 
     IDirectFB                  *dfb;
-    IDirectFBSurface           *dfbsurface;
-    IDirectFBSurface           *tmpsurface;
-    pixman_format_code_t        tmpformat;
+    IDirectFBSurface           *dfb_surface;
 
-    int                  width;
-    int                  height;
-
-    unsigned             local : 1;
     unsigned             blit_premultiplied : 1;
-} cairo_directfb_surface_t;
-
-
-typedef struct _cairo_directfb_font_cache {
-    IDirectFB           *dfb;
-    IDirectFBSurface    *dfbsurface;
-
-    int                  width;
-    int                  height;
-
-    /* coordinates within the surface
-     * of the last loaded glyph */
-    int                  x;
-    int                  y;
-} cairo_directfb_font_cache_t;
-
-static cairo_surface_backend_t _cairo_directfb_surface_backend;
-
-/*****************************************************************************/
-
-static int _directfb_argb_font = 0;
-
-/*****************************************************************************/
-
-#define RUN_CLIPPED(surface, clip_region, clip, func) {\
-    if ((clip_region) != NULL) {\
-       int n_clips = cairo_region_num_rectangles (clip_region), n; \
-        for (n = 0; n < n_clips; n++) {\
-            if (clip) {\
-                DFBRegion  reg, *cli = (clip); \
-               cairo_rectangle_int_t rect; \
-               cairo_region_get_rectangle (clip_region, n, &rect); \
-               reg.x1 = rect.x; \
-               reg.y1 = rect.y; \
-               reg.x2 = rect.x + rect.width - 1; \
-               reg.y2 = rect.y + rect.height - 1; \
-                if (reg.x2 < cli->x1 || reg.y2 < cli->y1 ||\
-                    reg.x1 > cli->x2 || reg.y1 > cli->y2)\
-                    continue;\
-                if (reg.x1 < cli->x1)\
-                    reg.x1 = cli->x1;\
-                if (reg.y1 < cli->y1)\
-                    reg.y1 = cli->y1;\
-                if (reg.x2 > cli->x2)\
-                    reg.x2 = cli->x2;\
-                if (reg.y2 > cli->y2)\
-                    reg.y2 = cli->y2;\
-                (surface)->dfbsurface->SetClip ((surface)->dfbsurface, &reg);\
-            } else {\
-               DFBRegion reg; \
-               cairo_rectangle_int_t rect; \
-               cairo_region_get_rectangle (clip_region, n, &rect); \
-               reg.x1 = rect.x; \
-               reg.y1 = rect.y; \
-               reg.x2 = rect.x + rect.width - 1; \
-               reg.y2 = rect.y + rect.height - 1; \
-                (surface)->dfbsurface->SetClip ((surface)->dfbsurface, &reg); \
-            }\
-            func;\
-        }\
-    } else {\
-        (surface)->dfbsurface->SetClip ((surface)->dfbsurface, clip);\
-        func;\
-    }\
-}
-
-#define TRANSFORM_POINT2X(m, x, y, ret_x, ret_y) do { \
-    double _x = (x); \
-    double _y = (y); \
-    (ret_x) = (_x * (m).xx + (m).x0); \
-    (ret_y) = (_y * (m).yy + (m).y0); \
-} while (0)
-
-#define TRANSFORM_POINT3X(m, x, y, ret_x, ret_y) do { \
-    double _x = (x); \
-    double _y = (y); \
-    (ret_x) = (_x * (m).xx + _y * (m).xy + (m).x0); \
-    (ret_y) = (_x * (m).yx + _y * (m).yy + (m).y0); \
-} while (0)
-
-/* XXX: A1 has a different bits ordering in cairo.
- *      Probably we should drop it.
- */
+} cairo_dfb_surface_t;
 
 static cairo_content_t
 _directfb_format_to_content (DFBSurfacePixelFormat format)
 {
-    if (DFB_PIXELFORMAT_HAS_ALPHA (format)) {
-        if (DFB_COLOR_BITS_PER_PIXEL (format))
-            return CAIRO_CONTENT_COLOR_ALPHA;
-
-        return CAIRO_CONTENT_ALPHA;
-    }
-
-    return CAIRO_CONTENT_COLOR;
-}
+    cairo_content_t content = 0;
 
-static inline DFBSurfacePixelFormat
-_cairo_to_directfb_format (cairo_format_t format)
-{
-    switch (format) {
-    case CAIRO_FORMAT_RGB24:
-       return DSPF_RGB32;
-    case CAIRO_FORMAT_ARGB32:
-       return DSPF_ARGB;
-    case CAIRO_FORMAT_A8:
-       return DSPF_A8;
-    case CAIRO_FORMAT_A1:
-       return DSPF_A1;
-    default:
-       break;
-    }
+    if (DFB_PIXELFORMAT_HAS_ALPHA (format))
+       content |= CAIRO_CONTENT_ALPHA;
+    if (DFB_COLOR_BITS_PER_PIXEL (format))
+       content |= CAIRO_CONTENT_COLOR_ALPHA;
 
-    return -1;
+    assert(content);
+    return content;
 }
 
 static inline pixman_format_code_t
 _directfb_to_pixman_format (DFBSurfacePixelFormat format)
 {
     switch (format) {
-    case DSPF_UNKNOWN: return PIXMAN_invalid;
+    case DSPF_UNKNOWN: return 0;
     case DSPF_ARGB1555: return PIXMAN_a1r5g5b5;
     case DSPF_RGB16: return PIXMAN_r5g6b5;
     case DSPF_RGB24: return PIXMAN_r8g8b8;
@@ -229,33 +91,139 @@ _directfb_to_pixman_format (DFBSurfacePixelFormat format)
     case DSPF_A8: return PIXMAN_a8;
     case DSPF_YUY2: return PIXMAN_yuy2;
     case DSPF_RGB332: return PIXMAN_r3g3b2;
-    case DSPF_UYVY: return PIXMAN_invalid;
-    case DSPF_I420: return PIXMAN_invalid;
+    case DSPF_UYVY: return 0;
+    case DSPF_I420: return 0;
     case DSPF_YV12: return PIXMAN_yv12;
-    case DSPF_LUT8: return PIXMAN_invalid;
-    case DSPF_ALUT44: return PIXMAN_invalid;
-    case DSPF_AiRGB: return PIXMAN_invalid;
-    case DSPF_A1: return PIXMAN_a1; /* bit reversed, oops */
-    case DSPF_NV12: return PIXMAN_invalid;
-    case DSPF_NV16: return PIXMAN_invalid;
-    case DSPF_ARGB2554: return PIXMAN_invalid;
+    case DSPF_LUT8: return 0;
+    case DSPF_ALUT44: return 0;
+    case DSPF_AiRGB: return 0;
+    case DSPF_A1: return 0; /* bit reversed, oops */
+    case DSPF_NV12: return 0;
+    case DSPF_NV16: return 0;
+    case DSPF_ARGB2554: return 0;
     case DSPF_ARGB4444: return PIXMAN_a4r4g4b4;
-    case DSPF_NV21: return PIXMAN_invalid;
-    case DSPF_AYUV: return PIXMAN_invalid;
+    case DSPF_NV21: return 0;
+    case DSPF_AYUV: return 0;
     case DSPF_A4: return PIXMAN_a4;
-    case DSPF_ARGB1666: return PIXMAN_invalid;
-    case DSPF_ARGB6666: return PIXMAN_invalid;
-    case DSPF_RGB18: return PIXMAN_invalid;
-    case DSPF_LUT2: return PIXMAN_invalid;
+    case DSPF_ARGB1666: return 0;
+    case DSPF_ARGB6666: return 0;
+    case DSPF_RGB18: return 0;
+    case DSPF_LUT2: return 0;
     case DSPF_RGB444: return PIXMAN_x4r4g4b4;
     case DSPF_RGB555: return PIXMAN_x1r5g5b5;
 #if DFB_NUM_PIXELFORMATS >= 29
     case DSPF_BGR555: return PIXMAN_x1b5g5r5;
 #endif
     }
-    return PIXMAN_invalid;
+    return 0;
+}
+
+static cairo_surface_t *
+_cairo_dfb_surface_create_similar (void            *abstract_src,
+                                  cairo_content_t  content,
+                                  int              width,
+                                  int              height)
+{
+    cairo_dfb_surface_t *other  = abstract_src;
+    DFBSurfacePixelFormat     format;
+    IDirectFBSurface      *buffer;
+    DFBSurfaceDescription  dsc;
+    cairo_surface_t *surface;
+
+    if (width <= 0 || height <= 0)
+       return _cairo_image_surface_create_with_content (content, width, height);
+
+    switch (content) {
+    default:
+       ASSERT_NOT_REACHED;
+    case CAIRO_CONTENT_COLOR_ALPHA:
+       format = DSPF_ARGB;
+       break;
+    case CAIRO_CONTENT_COLOR:
+       format = DSPF_RGB32;
+       break;
+    case CAIRO_CONTENT_ALPHA:
+       format = DSPF_A8;
+       break;
+    }
+
+    dsc.flags       = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
+    dsc.caps        = DSCAPS_PREMULTIPLIED;
+    dsc.width       = width;
+    dsc.height      = height;
+    dsc.pixelformat = format;
+
+    if (other->dfb->CreateSurface (other->dfb, &dsc, &buffer))
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_DEVICE_ERROR));
+
+    surface = cairo_directfb_surface_create (other->dfb, buffer);
+    buffer->Release (buffer);
+
+    return surface;
+}
+
+static cairo_status_t
+_cairo_dfb_surface_finish (void *abstract_surface)
+{
+    cairo_dfb_surface_t *surface = abstract_surface;
+
+    surface->dfb_surface->Release (surface->dfb_surface);
+    return _cairo_image_surface_finish (abstract_surface);
+}
+
+static cairo_surface_t *
+_cairo_dfb_surface_map_to_image (void *abstract_surface,
+                                const cairo_rectangle_int_t *extents)
+{
+    cairo_dfb_surface_t *surface = abstract_surface;
+
+    if (surface->image.pixman_image == NULL) {
+       IDirectFBSurface *buffer = surface->dfb_surface;
+       pixman_image_t *image;
+       void *data;
+       int pitch;
+
+       if (buffer->Lock (buffer, DSLF_READ | DSLF_WRITE, &data, &pitch))
+           return _cairo_surface_create_in_error(_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+       image = pixman_image_create_bits (surface->image.pixman_format,
+                                         surface->image.width,
+                                         surface->image.height,
+                                         data, pitch);
+       if (image == NULL) {
+           buffer->Unlock (buffer);
+           return _cairo_surface_create_in_error(_cairo_error (CAIRO_STATUS_NO_MEMORY));
+       }
+       _cairo_image_surface_init (&surface->image, image, surface->image.pixman_format);
+    }
+
+    return _cairo_image_surface_map_to_image (&surface->image, extents);
+}
+
+static cairo_int_status_t
+_cairo_dfb_surface_unmap_image (void *abstract_surface,
+                               cairo_image_surface_t *image)
+{
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_dfb_surface_flush (void *abstract_surface)
+{
+    cairo_dfb_surface_t *surface = abstract_surface;
+
+    if (surface->image.pixman_image) {
+       surface->dfb_surface->Unlock (surface->dfb_surface);
+
+       pixman_image_unref (surface->image.pixman_image);
+       surface->image.pixman_image = NULL;
+       surface->image.data = NULL;
+    }
+
+    return CAIRO_STATUS_SUCCESS;
 }
 
+#if 0
 static inline DFBSurfacePixelFormat
 _directfb_from_pixman_format (pixman_format_code_t format)
 {
@@ -373,1598 +341,199 @@ _directfb_get_operator (cairo_operator_t         operator,
 
     return TRUE;
 }
+#define RUN_CLIPPED(surface, clip_region, clip, func) {\
+    if ((clip_region) != NULL) {\
+       int n_clips = cairo_region_num_rectangles (clip_region), n; \
+        for (n = 0; n < n_clips; n++) {\
+            if (clip) {\
+                DFBRegion  reg, *cli = (clip); \
+               cairo_rectangle_int_t rect; \
+               cairo_region_get_rectangle (clip_region, n, &rect); \
+               reg.x1 = rect.x; \
+               reg.y1 = rect.y; \
+               reg.x2 = rect.x + rect.width - 1; \
+               reg.y2 = rect.y + rect.height - 1; \
+                if (reg.x2 < cli->x1 || reg.y2 < cli->y1 ||\
+                    reg.x1 > cli->x2 || reg.y1 > cli->y2)\
+                    continue;\
+                if (reg.x1 < cli->x1)\
+                    reg.x1 = cli->x1;\
+                if (reg.y1 < cli->y1)\
+                    reg.y1 = cli->y1;\
+                if (reg.x2 > cli->x2)\
+                    reg.x2 = cli->x2;\
+                if (reg.y2 > cli->y2)\
+                    reg.y2 = cli->y2;\
+                (surface)->dfbsurface->SetClip ((surface)->dfbsurface, &reg);\
+            } else {\
+               DFBRegion reg; \
+               cairo_rectangle_int_t rect; \
+               cairo_region_get_rectangle (clip_region, n, &rect); \
+               reg.x1 = rect.x; \
+               reg.y1 = rect.y; \
+               reg.x2 = rect.x + rect.width - 1; \
+               reg.y2 = rect.y + rect.height - 1; \
+                (surface)->dfbsurface->SetClip ((surface)->dfbsurface, &reg); \
+            }\
+            func;\
+        }\
+    } else {\
+        (surface)->dfbsurface->SetClip ((surface)->dfbsurface, clip);\
+        func;\
+    }\
+}
 
-static cairo_status_t
-_directfb_buffer_surface_create (IDirectFB             *dfb,
-                                 DFBSurfacePixelFormat  format,
-                                 int                    width,
-                                 int                    height,
-                                IDirectFBSurface     **out)
+static cairo_int_status_t
+_cairo_dfb_surface_fill_rectangles (void                  *abstract_surface,
+                                         cairo_operator_t       op,
+                                         const cairo_color_t   *color,
+                                         cairo_rectangle_int_t *rects,
+                                         int                    n_rects)
 {
-    IDirectFBSurface      *buffer;
-    DFBSurfaceDescription  dsc;
-    DFBResult              ret;
+    cairo_dfb_surface_t *dst   = abstract_surface;
+    DFBSurfaceDrawingFlags    flags;
+    DFBSurfaceBlendFunction   sblend;
+    DFBSurfaceBlendFunction   dblend;
+    DFBRectangle              r[n_rects];
+    int                       i;
 
-    dsc.flags       = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
-    dsc.caps        = DSCAPS_PREMULTIPLIED;
-    dsc.width       = width;
-    dsc.height      = height;
-    dsc.pixelformat = format;
+    D_DEBUG_AT (CairoDFB_Render,
+               "%s( dst=%p, op=%d, color=%p, rects=%p, n_rects=%d ).\n",
+               __FUNCTION__, dst, op, color, rects, n_rects);
 
-    ret = dfb->CreateSurface (dfb, &dsc, &buffer);
-    if (ret) {
-        DirectFBError ("IDirectFB::CreateSurface()", ret);
-       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-    }
+    if (! dst->supported_destination)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    *out = buffer;
-    return CAIRO_STATUS_SUCCESS;
-}
+    if (! _directfb_get_operator (op, &sblend, &dblend))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
 
-static cairo_status_t
-_directfb_acquire_surface (cairo_directfb_surface_t  *surface,
-                           cairo_rectangle_int_t     *intrest_rec,
-                           cairo_image_surface_t    **image_out,
-                           cairo_rectangle_int_t     *image_rect_out,
-                           void                     **image_extra,
-                           DFBSurfaceLockFlags        lock_flags)
-{
-    IDirectFBSurface *buffer = NULL;
-    DFBRectangle source_rect;
-    cairo_surface_t *image;
-    pixman_image_t *pixman_image;
-    pixman_format_code_t pixman_format;
-    cairo_status_t status;
-    void *data;
-    int   pitch;
-
-    if (surface->pixman_format == PIXMAN_invalid) {
-        if (intrest_rec != NULL) {
-            source_rect.x = intrest_rec->x;
-            source_rect.y = intrest_rec->y;
-            source_rect.w = intrest_rec->width;
-            source_rect.h = intrest_rec->height;
-        } else {
-            source_rect.x = 0;
-            source_rect.y = 0;
-            surface->dfbsurface->GetSize (surface->dfbsurface,
-                                          &source_rect.w, &source_rect.h);
-        }
-
-        if (surface->tmpsurface != NULL) {
-            int w, h;
-
-            surface->tmpsurface->GetSize (surface->tmpsurface, &w, &h);
-            if (w < source_rect.w || h < source_rect.h) {
-                surface->tmpsurface->Release (surface->tmpsurface);
-                surface->tmpsurface = NULL;
-                surface->tmpformat = PIXMAN_invalid;
-            }
-        }
-
-        if (surface->tmpsurface == NULL) {
-           DFBSurfacePixelFormat format;
-
-            D_DEBUG_AT (CairoDFB_Acquire, "Allocating buffer for surface %p.\n", surface);
-
-           format = _cairo_to_directfb_format (_cairo_format_from_content (surface->base.content));
-            status =
-                _directfb_buffer_surface_create (surface->dfb, format,
-                                                 source_rect.w, source_rect.h,
-                                                &surface->tmpsurface);
-            if (unlikely (status))
-                goto ERROR;
-
-           surface->tmpformat = _directfb_to_pixman_format (format);
-        }
-        buffer = surface->tmpsurface;
-       pixman_format = surface->tmpformat;
-
-
-/*        surface->dfbsurface->GetCapabilities (surface->dfbsurface, &caps);
-        DFBSurfaceCapabilities caps;
-        if (caps & DSCAPS_FLIPPING) {
-            DFBRegion region = { .x1 = source_rect.x, .y1 = source_rect.y,
-                                 .x2 = source_rect.x + source_rect.w - 1,
-                                 .y2 = source_rect.y + source_rect.h - 1 };
-            surface->dfbsurface->Flip (surface->dfbsurface, &region, DSFLIP_BLIT);
-        } */
-        buffer->Blit (buffer, surface->dfbsurface, &source_rect, 0, 0);
-    } else {
-        /*might be a subsurface get the offset*/
-        surface->dfbsurface->GetVisibleRectangle (surface->dfbsurface, &source_rect);
-        pixman_format = surface->pixman_format;
-        buffer = surface->dfbsurface;
-    }
+    if (CAIRO_COLOR_IS_OPAQUE (color)) {
+       if (sblend == DSBF_SRCALPHA)
+           sblend = DSBF_ONE;
+       else if (sblend == DSBF_INVSRCALPHA)
+           sblend = DSBF_ZERO;
 
-    if (buffer->Lock (buffer, lock_flags, &data, &pitch)) {
-        D_DEBUG_AT (CairoDFB_Acquire, "Couldn't lock surface!\n");
-       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
-        goto ERROR;
+       if (dblend == DSBF_SRCALPHA)
+           dblend = DSBF_ONE;
+       else if (dblend == DSBF_INVSRCALPHA)
+           dblend = DSBF_ZERO;
     }
+    if ((dst->base.content & CAIRO_CONTENT_ALPHA) == 0) {
+       if (sblend == DSBF_DESTALPHA)
+           sblend = DSBF_ONE;
+       else if (sblend == DSBF_INVDESTALPHA)
+           sblend = DSBF_ZERO;
 
-    pixman_image = pixman_image_create_bits (pixman_format,
-                                            source_rect.w, source_rect.h,
-                                            data, pitch);
-    if (pixman_image == NULL) {
-       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
-       goto ERROR;
+       if (dblend == DSBF_DESTALPHA)
+           dblend = DSBF_ONE;
+       else if (dblend == DSBF_INVDESTALPHA)
+           dblend = DSBF_ZERO;
     }
 
-    image = _cairo_image_surface_create_for_pixman_image (pixman_image,
-                                                         pixman_format);
-    status = image->status;
-    if (status)
-        goto ERROR;
-
-    if (image_rect_out) {
-        image_rect_out->x = source_rect.x;
-        image_rect_out->y = source_rect.y;
-        image_rect_out->width = source_rect.w;
-        image_rect_out->height = source_rect.h;
-    } else {
-        /* lock for read */
-        /* might be a subsurface */
-        if (buffer == surface->dfbsurface) {
-            cairo_surface_set_device_offset (image,
-                                            source_rect.x, source_rect.y);
-       }
+    flags = (sblend == DSBF_ONE && dblend == DSBF_ZERO) ? DSDRAW_NOFX : DSDRAW_BLEND;
+    dst->dfbsurface->SetDrawingFlags (dst->dfbsurface, flags);
+    if (flags & DSDRAW_BLEND) {
+       dst->dfbsurface->SetSrcBlendFunction (dst->dfbsurface, sblend);
+       dst->dfbsurface->SetDstBlendFunction (dst->dfbsurface, dblend);
     }
 
-    *image_extra = buffer;
-    *image_out = (cairo_image_surface_t *) image;
-    return CAIRO_STATUS_SUCCESS;
+    dst->dfbsurface->SetColor (dst->dfbsurface,
+                              color->red_short >> 8,
+                              color->green_short >> 8,
+                              color->blue_short >> 8,
+                              color->alpha_short >> 8);
 
-ERROR:
-    if (buffer) {
-        buffer->Unlock (buffer);
-        if (buffer != surface->dfbsurface)
-            buffer->Release (buffer);
+    for (i = 0; i < n_rects; i++) {
+       r[i].x = rects[i].x;
+       r[i].y = rects[i].y;
+       r[i].w = rects[i].width;
+       r[i].h = rects[i].height;
     }
-    return status;
+
+    RUN_CLIPPED (dst, NULL, NULL,
+                dst->dfbsurface->FillRectangles (dst->dfbsurface, r, n_rects));
+
+    return CAIRO_STATUS_SUCCESS;
 }
+#endif
 
-static cairo_surface_t *
-_cairo_directfb_surface_create_internal (IDirectFB *dfb,
-                                        DFBSurfacePixelFormat format,
-                                        cairo_content_t content,
-                                        int              width,
-                                        int              height)
+static cairo_surface_backend_t
+_cairo_dfb_surface_backend = {
+    CAIRO_SURFACE_TYPE_DIRECTFB, /*type*/
+    _cairo_dfb_surface_finish, /*finish*/
+    _cairo_default_context_create,
+
+    _cairo_dfb_surface_create_similar,/*create_similar*/
+    NULL, /* create similar image */
+    _cairo_dfb_surface_map_to_image,
+    _cairo_dfb_surface_unmap_image,
+
+    _cairo_surface_default_source,
+    _cairo_surface_default_acquire_source_image,
+    _cairo_surface_default_release_source_image,
+    NULL,
+
+    NULL, /* copy_page */
+    NULL, /* show_page */
+
+    _cairo_image_surface_get_extents,
+    _cairo_image_surface_get_font_options,
+
+    _cairo_dfb_surface_flush,
+    NULL, /* mark_dirty_rectangle */
+
+    _cairo_surface_fallback_paint,
+    _cairo_surface_fallback_mask,
+    _cairo_surface_fallback_stroke,
+    _cairo_surface_fallback_fill,
+    NULL, /* fill-stroke */
+    _cairo_surface_fallback_glyphs,
+};
+
+cairo_surface_t *
+cairo_directfb_surface_create (IDirectFB *dfb, IDirectFBSurface *dfbsurface)
 {
-    cairo_directfb_surface_t *surface;
-    cairo_status_t           status;
+    cairo_dfb_surface_t *surface;
+    DFBSurfacePixelFormat     format;
+    DFBSurfaceCapabilities caps;
+    pixman_format_code_t pixman_format;
+    int width, height;
 
-    surface = calloc (1, sizeof (cairo_directfb_surface_t));
-    if (unlikely (surface == NULL))
-       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+    D_ASSERT (dfb != NULL);
+    D_ASSERT (dfbsurface != NULL);
 
-    surface->dfb = dfb;
+    dfbsurface->GetPixelFormat (dfbsurface, &format);
+    dfbsurface->GetSize (dfbsurface, &width, &height);
 
-    if (width < 8 || height < 8) {
-        IDirectFBSurface *tmp;
-       DFBRectangle rect = { .x=0, .y=0, .w=width, .h=height };
-
-        /* Some cards (e.g. Matrox) don't support surfaces smaller than 8x8 */
-        status =  _directfb_buffer_surface_create (dfb, format,
-                                        MAX (width, 8), MAX (height, 8),
-                                       &tmp);
-       if (status) {
-           free (surface);
-           return _cairo_surface_create_in_error (status);
-       }
+    pixman_format = _directfb_to_pixman_format (format);
+    if (! pixman_format_supported_destination (pixman_format))
+        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
 
-       tmp->GetSubSurface (tmp, &rect, &surface->dfbsurface);
-       tmp->Release (tmp);
-    } else {
-       status = _directfb_buffer_surface_create (dfb, format,
-                                                 width, height,
-                                                 &surface->dfbsurface);
-       if (status) {
-           free (surface);
-           return _cairo_surface_create_in_error (status);
-       }
-    }
+    surface = calloc (1, sizeof (cairo_dfb_surface_t));
+    if (surface == NULL)
+        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
 
-    _cairo_surface_init (&surface->base,
-                        &_cairo_directfb_surface_backend,
+    /* XXX dfb -> device */
+    _cairo_surface_init (&surface->image.base,
+                         &_cairo_dfb_surface_backend,
                         NULL, /* device */
-                        content);
-    surface->pixman_format = _directfb_to_pixman_format (format);
-    surface->supported_destination = pixman_format_supported_destination (surface->pixman_format);
-
-    surface->width   = width;
-    surface->height  = height;
-    surface->local   = TRUE;
-    surface->blit_premultiplied = TRUE;
-
-    return &surface->base;
-}
-
-static cairo_surface_t *
-_cairo_directfb_surface_create_similar (void            *abstract_src,
-                                        cairo_content_t  content,
-                                        int              width,
-                                        int              height)
-{
-    cairo_directfb_surface_t *other  = abstract_src;
-    DFBSurfacePixelFormat     format;
-
-    D_DEBUG_AT (CairoDFB_Surface,
-                "%s( src=%p, content=0x%x, width=%d, height=%d).\n",
-                __FUNCTION__, other, content, width, height);
-
-    width = (width <= 0) ? 1 : width;
-    height = (height<= 0) ? 1 : height;
-
-    format = _cairo_to_directfb_format (_cairo_format_from_content (content));
-    return _cairo_directfb_surface_create_internal (other->dfb, format,
-                                                   content, width, height);
-}
-
-static cairo_status_t
-_cairo_directfb_surface_finish (void *data)
-{
-    cairo_directfb_surface_t *surface = (cairo_directfb_surface_t *)data;
-
-    D_DEBUG_AT (CairoDFB_Surface, "%s( surface=%p ).\n", __FUNCTION__, surface);
-
-    if (surface->tmpsurface) {
-        surface->tmpsurface->Release (surface->tmpsurface);
-        surface->tmpsurface = NULL;
-    }
-
-    if (surface->dfbsurface) {
-        surface->dfbsurface->Release (surface->dfbsurface);
-        surface->dfbsurface = NULL;
-    }
-
-    if (surface->dfb)
-        surface->dfb = NULL;
-
-    return CAIRO_STATUS_SUCCESS;
-}
-
-static cairo_status_t
-_cairo_directfb_surface_acquire_source_image (void                   *abstract_surface,
-                                              cairo_image_surface_t **image_out,
-                                              void                  **image_extra)
-{
-    cairo_directfb_surface_t *surface = abstract_surface;
-
-    D_DEBUG_AT (CairoDFB_Acquire,
-               "%s( surface=%p ).\n", __FUNCTION__, surface);
-
-    return _directfb_acquire_surface (surface, NULL, image_out,
-                                     NULL, image_extra, DSLF_READ);
-}
-
-static void
-_cairo_directfb_surface_release_source_image (void                  *abstract_surface,
-                                              cairo_image_surface_t *image,
-                                              void                  *image_extra)
-{
-    IDirectFBSurface *buffer = image_extra;
-
-    D_DEBUG_AT (CairoDFB_Acquire,
-               "%s( release=%p ).\n", __FUNCTION__, abstract_surface);
-
-    buffer->Unlock (buffer);
-
-    cairo_surface_destroy (&image->base);
-}
-
-static cairo_status_t
-_cairo_directfb_surface_acquire_dest_image (void                     *abstract_surface,
-                                            cairo_rectangle_int_t    *interest_rect,
-                                            cairo_image_surface_t   **image_out,
-                                            cairo_rectangle_int_t    *image_rect_out,
-                                            void                    **image_extra)
-{
-    cairo_directfb_surface_t *surface = abstract_surface;
-
-    D_DEBUG_AT (CairoDFB_Acquire,
-               "%s( surface=%p (%dx%d), interest_rect={ %u %u %u %u } ).\n",
-               __FUNCTION__, surface, surface->width, surface->height,
-               interest_rect ? interest_rect->x : 0,
-               interest_rect ? interest_rect->y : 0,
-               interest_rect ? interest_rect->width  : (unsigned) surface->width,
-               interest_rect ? interest_rect->height : (unsigned) surface->height);
-
-    return _directfb_acquire_surface (surface, interest_rect, image_out,
-                                     image_rect_out, image_extra,
-                                     DSLF_READ | DSLF_WRITE);
-}
-
-static void
-_cairo_directfb_surface_release_dest_image (void                  *abstract_surface,
-                                            cairo_rectangle_int_t *interest_rect,
-                                            cairo_image_surface_t *image,
-                                            cairo_rectangle_int_t *image_rect,
-                                            void                  *image_extra)
-{
-    cairo_directfb_surface_t *surface = abstract_surface;
-    IDirectFBSurface *buffer = image_extra;
-
-    D_DEBUG_AT (CairoDFB_Acquire,
-               "%s( surface=%p ).\n", __FUNCTION__, surface);
-
-    buffer->Unlock (buffer);
-
-    if (surface->dfbsurface != buffer) {
-       DFBRegion region = {
-           .x1 = interest_rect->x,
-           .y1 = interest_rect->y,
-           .x2 = interest_rect->x + interest_rect->width - 1,
-           .y2 = interest_rect->y + interest_rect->height - 1
-       };
-       surface->dfbsurface->SetBlittingFlags (surface->dfbsurface, DSBLIT_NOFX);
-        surface->dfbsurface->SetClip (surface->dfbsurface, &region);
-       surface->dfbsurface->Blit (surface->dfbsurface,
-                                  buffer, NULL,
-                                  image_rect->x, image_rect->y);
-    }
-
-    cairo_surface_destroy (&image->base);
-}
-
-static cairo_status_t
-_cairo_directfb_surface_clone_similar (void             *abstract_surface,
-                                       cairo_surface_t  *src,
-                                       int               src_x,
-                                       int               src_y,
-                                       int               width,
-                                       int               height,
-                                       int              *clone_offset_x,
-                                       int              *clone_offset_y,
-                                       cairo_surface_t **clone_out)
-{
-    cairo_directfb_surface_t *surface = abstract_surface;
-    cairo_directfb_surface_t *clone;
-
-    D_DEBUG_AT (CairoDFB_Surface,
-               "%s( surface=%p, src=%p ).\n", __FUNCTION__, surface, src);
-
-    if (src->backend == surface->base.backend) {
-       *clone_offset_x = 0;
-       *clone_offset_y = 0;
-       *clone_out = cairo_surface_reference (src);
-
-       return CAIRO_STATUS_SUCCESS;
-    } else if (_cairo_surface_is_image (src)) {
-       cairo_image_surface_t *image_src = (cairo_image_surface_t *) src;
-       DFBSurfacePixelFormat format;
-       DFBResult              ret;
-       pixman_image_t        *pixman_image;
-       void *data;
-       int pitch;
-
-       format = _directfb_from_pixman_format (image_src->pixman_format);
-       if (format == 0)
-           return CAIRO_INT_STATUS_UNSUPPORTED;
-
-       clone = (cairo_directfb_surface_t *)
-           _cairo_directfb_surface_create_internal (surface->dfb, format,
-                                                    image_src->base.content,
-                                                    width, height);
-       if (unlikely (clone->base.status))
-           return clone->base.status;
-
-       ret = clone->dfbsurface->Lock (clone->dfbsurface,
-                                      DSLF_WRITE, (void *)&data, &pitch);
-       if (ret) {
-           DirectFBError ("IDirectFBSurface::Lock()", ret);
-           cairo_surface_destroy (&clone->base);
-           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-       }
-
-       pixman_image = pixman_image_create_bits (clone->pixman_format,
-                                                width, height,
-                                                data, pitch);
-       if (unlikely (pixman_image == NULL)) {
-           DirectFBError ("IDirectFBSurface::Lock()", ret);
-           cairo_surface_destroy (&clone->base);
-           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-       }
-
-       pixman_image_composite32 (PIXMAN_OP_SRC,
-                                  image_src->pixman_image,
-                                  NULL,
-                                  pixman_image,
-                                  src_x, src_y,
-                                  0, 0,
-                                  0, 0,
-                                  width, height);
-
-       pixman_image_unref (pixman_image);
-
-       clone->dfbsurface->Unlock (clone->dfbsurface);
-
-       *clone_offset_x = src_x;
-       *clone_offset_y = src_y;
-       *clone_out = &clone->base;
-       return CAIRO_STATUS_SUCCESS;
-    }
-
-    return CAIRO_INT_STATUS_UNSUPPORTED;
-}
-
-#if DFB_COMPOSITE || DFB_COMPOSITE_TRAPEZOIDS
-static cairo_int_status_t
-_directfb_prepare_composite (cairo_directfb_surface_t    *dst,
-                             const cairo_pattern_t       *src_pattern,
-                             const cairo_pattern_t       *mask_pattern,
-                             cairo_operator_t             op,
-                             int *src_x,             int *src_y,
-                             int *mask_x,            int *mask_y,
-                             unsigned int                 width,
-                             unsigned int                 height,
-                             cairo_directfb_surface_t   **ret_src,
-                             cairo_surface_attributes_t  *ret_src_attr)
-{
-    cairo_directfb_surface_t   *src;
-    cairo_surface_attributes_t  src_attr;
-    cairo_status_t              status;
-    DFBSurfaceBlittingFlags     flags;
-    DFBSurfaceBlendFunction     sblend;
-    DFBSurfaceBlendFunction     dblend;
-    const cairo_color_t        *color;
-
-    /* XXX Unbounded operators are not handled correctly */
-    if (! _cairo_operator_bounded_by_source (op))
-        return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (! _directfb_get_operator (op, &sblend, &dblend))
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (mask_pattern) {
-               return CAIRO_INT_STATUS_UNSUPPORTED;
-       if (mask_pattern->type != CAIRO_PATTERN_TYPE_SOLID) {
-           const cairo_pattern_t *tmp;
-           int              tmp_x, tmp_y;
-
-           if (src_pattern->type != CAIRO_PATTERN_TYPE_SOLID ||
-               sblend == DSBF_INVDESTALPHA) /* Doesn't work correctly */
-               return CAIRO_INT_STATUS_UNSUPPORTED;
-
-           D_DEBUG_AT (CairoDFB_Render, "Replacing src pattern by mask pattern.\n");
-
-           tmp = src_pattern;
-           tmp_x = *src_x; tmp_y = *src_y;
-
-           src_pattern = mask_pattern;
-           *src_x = *mask_x; *src_y = *mask_y;
-
-           mask_pattern = tmp;
-           *mask_x = tmp_x; *mask_y = tmp_y;
-
-           if (sblend == DSBF_ONE) {
-               sblend = DSBF_SRCALPHA;
-               /*dblend = DSBF_INVSRCALPHA;*/
-           }
-       }
-
-       color = &((cairo_solid_pattern_t *) mask_pattern)->color;
-    } else {
-       color = _cairo_stock_color (CAIRO_STOCK_WHITE);
-    }
-
-    status = _cairo_pattern_acquire_surface (src_pattern, &dst->base,
-                                            *src_x, *src_y, width, height,
-                                            CAIRO_PATTERN_ACQUIRE_NO_REFLECT,
-                                            (cairo_surface_t **) &src,
-                                            &src_attr);
-    if (status)
-       return status;
-
-    if (src->base.backend != &_cairo_directfb_surface_backend ||
-       src->dfb != dst->dfb)
-    {
-       _cairo_pattern_release_surface (src_pattern, &src->base, &src_attr);
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-    }
-
-    if ((src->base.content & CAIRO_CONTENT_ALPHA) == 0) {
-       if (sblend == DSBF_SRCALPHA)
-           sblend = DSBF_ONE;
-       else if (sblend == DSBF_INVSRCALPHA)
-           sblend = DSBF_ZERO;
-
-       if (dblend == DSBF_SRCALPHA)
-           dblend = DSBF_ONE;
-       else if (dblend == DSBF_INVSRCALPHA)
-           dblend = DSBF_ZERO;
-    }
-
-    if ((dst->base.content & CAIRO_CONTENT_ALPHA) == 0) {
-       if (sblend == DSBF_DESTALPHA)
-           sblend = DSBF_ONE;
-       else if (sblend == DSBF_INVDESTALPHA)
-           sblend = DSBF_ZERO;
-
-       if (dblend == DSBF_DESTALPHA)
-           dblend = DSBF_ONE;
-       else if (dblend == DSBF_INVDESTALPHA)
-           dblend = DSBF_ZERO;
-    }
-
-    flags = (sblend == DSBF_ONE && dblend == DSBF_ZERO)
-       ? DSBLIT_NOFX : DSBLIT_BLEND_ALPHACHANNEL;
-    if (! CAIRO_COLOR_IS_OPAQUE (color))
-       flags |= DSBLIT_BLEND_COLORALPHA;
-    if (! _cairo_color_equal (color, _cairo_stock_color (CAIRO_STOCK_WHITE)))
-       flags |= DSBLIT_COLORIZE;
-
-    dst->dfbsurface->SetBlittingFlags (dst->dfbsurface, flags);
-
-    if (flags & (DSBLIT_BLEND_ALPHACHANNEL | DSBLIT_BLEND_COLORALPHA)) {
-       dst->dfbsurface->SetSrcBlendFunction (dst->dfbsurface, sblend);
-       dst->dfbsurface->SetDstBlendFunction (dst->dfbsurface, dblend);
-    }
-
-    if (flags & (DSBLIT_BLEND_COLORALPHA | DSBLIT_COLORIZE)) {
-       if (dst->blit_premultiplied) {
-           dst->dfbsurface->SetColor (dst->dfbsurface,
-                                      color->red_short >> 8,
-                                      color->green_short >> 8,
-                                      color->blue_short >> 8,
-                                      color->alpha_short >> 8);
-       } else {
-           dst->dfbsurface->SetColor (dst->dfbsurface,
-                                      color->red * 0xff,
-                                      color->green * 0xff,
-                                      color->blue * 0xff,
-                                      color->alpha * 0xff);
-       }
-    }
-
-    *ret_src = src;
-    *ret_src_attr = src_attr;
-
-    return CAIRO_STATUS_SUCCESS;
-}
-
-static void
-_directfb_finish_composite (cairo_directfb_surface_t   *dst,
-                            const cairo_pattern_t      *src_pattern,
-                            cairo_surface_t            *src,
-                            cairo_surface_attributes_t *src_attr)
-{
-    _cairo_pattern_release_surface (src_pattern, src, src_attr);
-}
-#endif /* DFB_COMPOSITE || DFB_COMPOSITE_TRAPEZOIDS */
-
-#if DFB_COMPOSITE
-static DFBAccelerationMask
-_directfb_categorize_operation (cairo_surface_attributes_t *src_attr)
-{
-    cairo_matrix_t *m = &src_attr->matrix;
-
-    if (m->xy != 0 || m->yx != 0 || m->xx < 0 || m->yy < 0) {
-       if (src_attr->extend != CAIRO_EXTEND_NONE)
-           return DFXL_NONE;
-
-       return DFXL_TEXTRIANGLES;
-    }
-
-    if (m->xx != 1 || m->yy != 1) {
-       if (src_attr->extend != CAIRO_EXTEND_NONE)
-           return DFXL_NONE;
-
-       return DFXL_STRETCHBLIT;
-    }
-
-    switch (src_attr->extend) {
-    case CAIRO_EXTEND_NONE:
-    case CAIRO_EXTEND_REPEAT:
-       if (_cairo_matrix_is_integer_translation (&src_attr->matrix,
-                                                 NULL, NULL))
-       {
-           return DFXL_BLIT;
-       }
-       else
-       {
-           return DFXL_STRETCHBLIT;
-       }
-
-    default:
-    case CAIRO_EXTEND_REFLECT:
-    case CAIRO_EXTEND_PAD:
-       return DFXL_NONE;
-    }
-}
-
-static cairo_int_status_t
-_cairo_directfb_surface_composite (cairo_operator_t  op,
-                                   const cairo_pattern_t  *src_pattern,
-                                   const cairo_pattern_t  *mask_pattern,
-                                   void             *abstract_dst,
-                                   int  src_x,  int  src_y,
-                                   int  mask_x, int  mask_y,
-                                   int  dst_x,  int  dst_y,
-                                   unsigned int      width,
-                                   unsigned int      height,
-                                  cairo_region_t   *clip_region)
-{
-    cairo_directfb_surface_t   *dst = abstract_dst;
-    cairo_directfb_surface_t   *src;
-    cairo_surface_attributes_t  src_attr;
-    cairo_bool_t                is_integer_translation;
-    DFBAccelerationMask         accel, mask;
-    cairo_int_status_t          status;
-    int                         tx, ty;
-
-    D_DEBUG_AT (CairoDFB_Render,
-               "%s( op=%d, src_pattern=%p, mask_pattern=%p, dst=%p,"
-               " src_x=%d, src_y=%d, mask_x=%d, mask_y=%d, dst_x=%d,"
-               " dst_y=%d, width=%u, height=%u ).\n",
-               __FUNCTION__, op, src_pattern, mask_pattern, dst,
-               src_x, src_y, mask_x, mask_y, dst_x, dst_y, width, height);
-
-    if (! dst->supported_destination)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    status = _directfb_prepare_composite (dst, src_pattern, mask_pattern, op,
-                                         &src_x, &src_y, &mask_x, &mask_y,
-                                         width, height, &src, &src_attr);
-    if (status)
-       return status;
-
-    accel = _directfb_categorize_operation (&src_attr);
-    if (accel == DFXL_NONE) {
-       _directfb_finish_composite (dst, src_pattern, &src->base, &src_attr);
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-    }
-
-    dst->dfbsurface->GetAccelerationMask (dst->dfbsurface,
-                                         src->dfbsurface,
-                                         &mask);
-    if ((mask & accel) == 0) {
-       D_DEBUG_AT (CairoDFB_Render, "No acceleration (%08x)!\n", accel);
-       if (accel != DFXL_BLIT) {
-           _directfb_finish_composite (dst, src_pattern, &src->base, &src_attr);
-           return CAIRO_INT_STATUS_UNSUPPORTED;
-       }
-    }
-
-    src_x += src_attr.x_offset;
-    src_y += src_attr.y_offset;
-
-    switch ((int) accel) {
-    case DFXL_BLIT:
-       {
-           DFBRectangle sr;
-
-           is_integer_translation =
-               _cairo_matrix_is_integer_translation (&src_attr.matrix,
-                                                     &tx, &ty);
-           assert (is_integer_translation);
-
-           sr.x = src_x + tx;
-           sr.y = src_y + ty;
-           sr.w = width;
-           sr.h = height;
-
-           if (src_attr.extend == CAIRO_EXTEND_NONE) {
-               D_DEBUG_AT (CairoDFB_Render, "Running Blit().\n");
-
-               RUN_CLIPPED (dst, clip_region, NULL,
-                            dst->dfbsurface->Blit (dst->dfbsurface,
-                                                   src->dfbsurface,
-                                                   &sr, dst_x, dst_y));
-           } else if (src_attr.extend == CAIRO_EXTEND_REPEAT) {
-               DFBRegion clip;
-
-               clip.x1 = dst_x;
-               clip.y1 = dst_y;
-               clip.x2 = dst_x + width  - 1;
-               clip.y2 = dst_y + height - 1;
-
-               D_DEBUG_AT (CairoDFB_Render, "Running TileBlit().\n");
-
-               RUN_CLIPPED (dst, clip_region, &clip,
-                            dst->dfbsurface->TileBlit (dst->dfbsurface,
-                                                       src->dfbsurface,
-                                                       &sr, dst_x, dst_y));
-           }
-           break;
-       }
-
-    case DFXL_STRETCHBLIT:
-       {
-           DFBRectangle sr, dr;
-           double       x1, y1, x2, y2;
-
-           TRANSFORM_POINT2X (src_attr.matrix,
-                              src_x, src_y, x1, y1);
-           TRANSFORM_POINT2X (src_attr.matrix,
-                              src_x+width, src_y+height, x2, y2);
-
-           sr.x = floor (x1);
-           sr.y = floor (y1);
-           sr.w = ceil (x2) - sr.x;
-           sr.h = ceil (y2) - sr.y;
-
-           dr.x = dst_x;
-           dr.y = dst_y;
-           dr.w = width;
-           dr.h = height;
-
-           D_DEBUG_AT (CairoDFB_Render, "Running StretchBlit().\n");
-
-           RUN_CLIPPED (dst, clip_region, NULL,
-                        dst->dfbsurface->StretchBlit (dst->dfbsurface,
-                                                      src->dfbsurface,
-                                                      &sr, &dr));
-           break;
-       }
-
-    case DFXL_TEXTRIANGLES:
-       {
-           DFBRegion clip;
-           DFBVertex v[4];
-           float     x1, y1, x2, y2;
-           int       w, h;
-
-           status = cairo_matrix_invert (&src_attr.matrix);
-           /* guaranteed by cairo_pattern_set_matrix (); */
-           assert (status == CAIRO_STATUS_SUCCESS);
-
-           x1 = src_x;
-           y1 = src_y;
-           x2 = width  + x1;
-           y2 = height + y1;
-
-           src->dfbsurface->GetSize (src->dfbsurface, &w, &h);
-
-           TRANSFORM_POINT3X (src_attr.matrix, x1, y1, v[0].x, v[0].y);
-           v[0].z = 0;
-           v[0].w = 1;
-           v[0].s = x1 / w;
-           v[0].t = y1 / h;
-
-           TRANSFORM_POINT3X (src_attr.matrix, x2, y1, v[1].x, v[1].y);
-           v[1].z = 0;
-           v[1].w = 1;
-           v[1].s = x2 / w;
-           v[1].t = y1 / h;
-
-           TRANSFORM_POINT3X (src_attr.matrix, x2, y2, v[2].x, v[2].y);
-           v[2].z = 0;
-           v[2].w = 1;
-           v[2].s = x2 / w;
-           v[2].t = y2 / h;
-
-           TRANSFORM_POINT3X (src_attr.matrix, x1, y2, v[3].x, v[3].y);
-           v[3].z = 0;
-           v[3].w = 1;
-           v[3].s = x1 / w;
-           v[3].t = y2 / h;
-
-           clip.x1 = dst_x;
-           clip.y1 = dst_y;
-           clip.x2 = dst_x + width  - 1;
-           clip.y2 = dst_y + height - 1;
-
-           D_DEBUG_AT (CairoDFB_Render, "Running TextureTriangles().\n");
-
-           RUN_CLIPPED (dst, clip_region, &clip,
-                        dst->dfbsurface->TextureTriangles (dst->dfbsurface,
-                                                           src->dfbsurface,
-                                                           v, NULL,
-                                                           4, DTTF_FAN));
-           break;
-       }
-
-    default:
-       D_BUG ("Unexpected operation");
-       break;
-    }
-
-    _directfb_finish_composite (dst, src_pattern, &src->base, &src_attr);
-
-    return CAIRO_STATUS_SUCCESS;
-}
-#endif /* DFB_COMPOSITE */
-
-#if DFB_RECTANGLES
-static cairo_int_status_t
-_cairo_directfb_surface_fill_rectangles (void                  *abstract_surface,
-                                         cairo_operator_t       op,
-                                         const cairo_color_t   *color,
-                                         cairo_rectangle_int_t *rects,
-                                         int                    n_rects)
-{
-    cairo_directfb_surface_t *dst   = abstract_surface;
-    DFBSurfaceDrawingFlags    flags;
-    DFBSurfaceBlendFunction   sblend;
-    DFBSurfaceBlendFunction   dblend;
-    DFBRectangle              r[n_rects];
-    int                       i;
-
-    D_DEBUG_AT (CairoDFB_Render,
-               "%s( dst=%p, op=%d, color=%p, rects=%p, n_rects=%d ).\n",
-               __FUNCTION__, dst, op, color, rects, n_rects);
-
-    if (! dst->supported_destination)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (! _directfb_get_operator (op, &sblend, &dblend))
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (CAIRO_COLOR_IS_OPAQUE (color)) {
-       if (sblend == DSBF_SRCALPHA)
-           sblend = DSBF_ONE;
-       else if (sblend == DSBF_INVSRCALPHA)
-           sblend = DSBF_ZERO;
-
-       if (dblend == DSBF_SRCALPHA)
-           dblend = DSBF_ONE;
-       else if (dblend == DSBF_INVSRCALPHA)
-           dblend = DSBF_ZERO;
-    }
-    if ((dst->base.content & CAIRO_CONTENT_ALPHA) == 0) {
-       if (sblend == DSBF_DESTALPHA)
-           sblend = DSBF_ONE;
-       else if (sblend == DSBF_INVDESTALPHA)
-           sblend = DSBF_ZERO;
-
-       if (dblend == DSBF_DESTALPHA)
-           dblend = DSBF_ONE;
-       else if (dblend == DSBF_INVDESTALPHA)
-           dblend = DSBF_ZERO;
-    }
-
-    flags = (sblend == DSBF_ONE && dblend == DSBF_ZERO) ? DSDRAW_NOFX : DSDRAW_BLEND;
-    dst->dfbsurface->SetDrawingFlags (dst->dfbsurface, flags);
-    if (flags & DSDRAW_BLEND) {
-       dst->dfbsurface->SetSrcBlendFunction (dst->dfbsurface, sblend);
-       dst->dfbsurface->SetDstBlendFunction (dst->dfbsurface, dblend);
-    }
-
-    dst->dfbsurface->SetColor (dst->dfbsurface,
-                              color->red_short >> 8,
-                              color->green_short >> 8,
-                              color->blue_short >> 8,
-                              color->alpha_short >> 8);
-
-    for (i = 0; i < n_rects; i++) {
-       r[i].x = rects[i].x;
-       r[i].y = rects[i].y;
-       r[i].w = rects[i].width;
-       r[i].h = rects[i].height;
-    }
-
-    RUN_CLIPPED (dst, NULL, NULL,
-                dst->dfbsurface->FillRectangles (dst->dfbsurface, r, n_rects));
-
-    return CAIRO_STATUS_SUCCESS;
-}
-#endif
-
-#if DFB_COMPOSITE_TRAPEZOIDS
-static cairo_int_status_t
-_cairo_directfb_surface_composite_trapezoids (cairo_operator_t   op,
-                                              const cairo_pattern_t   *pattern,
-                                              void              *abstract_dst,
-                                              cairo_antialias_t  antialias,
-                                              int  src_x,   int  src_y,
-                                              int  dst_x,   int  dst_y,
-                                              unsigned int       width,
-                                              unsigned int       height,
-                                              cairo_trapezoid_t *traps,
-                                              int                num_traps,
-                                             cairo_region_t    *clip_region)
-{
-    cairo_directfb_surface_t   *dst = abstract_dst;
-    cairo_directfb_surface_t   *src;
-    cairo_surface_attributes_t  src_attr;
-    cairo_status_t              status;
-    DFBAccelerationMask         accel;
-
-    D_DEBUG_AT (CairoDFB_Render,
-                "%s( op=%d, pattern=%p, dst=%p, antialias=%d,"
-                   " src_x=%d, src_y=%d, dst_x=%d, dst_y=%d,"
-                   " width=%u, height=%u, traps=%p, num_traps=%d ).\n",
-                __FUNCTION__, op, pattern, dst, antialias,
-                src_x, src_y, dst_x, dst_y, width, height, traps, num_traps);
-
-    if (! dst->supported_destination)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (antialias != CAIRO_ANTIALIAS_NONE)
-        return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    /* Textures are not supported yet. */
-    if (pattern->type != CAIRO_PATTERN_TYPE_SOLID)
-        return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    status = _directfb_prepare_composite (dst, pattern, NULL, op,
-                                         &src_x, &src_y, NULL, NULL,
-                                         width, height, &src, &src_attr);
-    if (status)
-        return status;
-
-    dst->dfbsurface->GetAccelerationMask (dst->dfbsurface,
-                                         src->dfbsurface,
-                                         &accel);
-
-    status = CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (accel & DFXL_TEXTRIANGLES) {
-        DFBVertex  vertex[6*num_traps];
-        DFBVertex *v = &vertex[0];
-        int        n = 0;
-
-#define ADD_TRI_V(V, X, Y) do { \
-    (V)->x = (X); (V)->y = (Y); (V)->w = 1; (V)->z = (V)->s = (V)->t = 0; \
-} while (0)
-#define ADD_TRI(id, x1, y1, x2, y2, x3, y3) do {\
-    const int p = (id)*3;\
-    ADD_TRI_V (v+p+0, x1, y1); \
-    ADD_TRI_V (v+p+1, x2, y2); \
-    ADD_TRI_V (v+p+2, x3, y3); \
-} while (0)
-       while (num_traps--) {
-            double lx1, ly1, lx2, ly2;
-            double rx1, ry1, rx2, ry2;
-
-            lx1 = _cairo_fixed_to_double (traps->left.p1.x);
-            ly1 = _cairo_fixed_to_double (traps->left.p1.y);
-            lx2 = _cairo_fixed_to_double (traps->left.p2.x);
-            ly2 = _cairo_fixed_to_double (traps->left.p2.y);
-            rx1 = _cairo_fixed_to_double (traps->right.p1.x);
-            ry1 = _cairo_fixed_to_double (traps->right.p1.y);
-            rx2 = _cairo_fixed_to_double (traps->right.p2.x);
-            ry2 = _cairo_fixed_to_double (traps->right.p2.y);
-
-            if (traps->left.p1.y < traps->top) {
-                double y = _cairo_fixed_to_double (traps->top);
-                if (lx2 != lx1)
-                    lx1 = (y - ly1) * (lx2 - lx1) / (ly2 - ly1) + lx1;
-                ly1 = y;
-            }
-            if (traps->left.p2.y > traps->bottom) {
-                double y = _cairo_fixed_to_double (traps->bottom);
-                if (lx2 != lx1)
-                    lx2 = (y - ly1) * (lx2 - lx1) / (ly2 - ly1) + lx1;
-                ly2 = y;
-            }
-
-            if (traps->right.p1.y < traps->top) {
-                double y = _cairo_fixed_to_double (traps->top);
-                if (rx2 != rx1)
-                    rx1 = (y - ry1) * (rx2 - rx1) / (ry2 - ry1) + rx1;
-                ry1 = y;
-            }
-            if (traps->right.p2.y > traps->bottom) {
-                double y = _cairo_fixed_to_double (traps->bottom);
-                if (rx2 != rx1)
-                    rx2 = (y - ry1) * (rx2 - rx1) / (ry2 - ry1) + rx1;
-                ry2 = y;
-            }
-
-            if (lx1 == rx1 && ly1 == ry1) {
-                ADD_TRI (0, lx2, ly2, lx1, ly1, rx2, ry2);
-                v += 3;
-                n += 3;
-            } else if (lx2 == rx2 && ly2 == ry2) {
-                ADD_TRI (0, lx1, ly1, lx2, ly2, rx1, ry1);
-                v += 3;
-                n += 3;
-            } else {
-                ADD_TRI (0, lx1, ly1, rx1, ry1, lx2, ly2);
-                ADD_TRI (1, lx2, ly2, rx1, ry1, rx2, ry2);
-                v += 6;
-                n += 6;
-            }
-
-            traps++;
-        }
-#undef ADD_TRI
-#undef ADD_TRI_V
-
-        D_DEBUG_AT (CairoDFB_Render, "Running TextureTriangles().\n");
-
-        RUN_CLIPPED (dst, clip_region, NULL,
-                     dst->dfbsurface->TextureTriangles (dst->dfbsurface,
-                                                       src->dfbsurface,
-                                                       vertex, NULL, n,
-                                                       DTTF_LIST));
-
-        status = CAIRO_STATUS_SUCCESS;
-    }
-
-    _directfb_finish_composite (dst, pattern, &src->base, &src_attr);
-
-    return status;
-}
-#endif /* DFB_COMPOSITE_TRAPEZOIDS */
-
-static cairo_bool_t
-_cairo_directfb_abstract_surface_get_extents (void                  *abstract_surface,
-                                              cairo_rectangle_int_t *rectangle)
-{
-    cairo_directfb_surface_t *surface = abstract_surface;
-
-    D_DEBUG_AT (CairoDFB_Surface,
-               "%s( surface=%p, rectangle=%p ).\n",
-               __FUNCTION__, surface, rectangle);
-
-    if (!surface->local) {
-       surface->dfbsurface->GetSize (surface->dfbsurface,
-                                     &surface->width, &surface->height);
-    }
-
-    rectangle->x = 0;
-    rectangle->y = 0;
-    rectangle->width  = surface->width;
-    rectangle->height = surface->height;
-
-    return TRUE;
-}
-
-#if DFB_SHOW_GLYPHS
-static cairo_status_t
-_directfb_allocate_font_cache (IDirectFB *dfb,
-                              int width, int height,
-                              cairo_directfb_font_cache_t **out)
-{
-    cairo_directfb_font_cache_t *cache;
-    cairo_status_t status;
-
-    cache = calloc (1, sizeof (cairo_directfb_font_cache_t));
-    if (cache == NULL)
-        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-
-    cache->dfb = dfb;
-    status = _directfb_buffer_surface_create (dfb,
-                            _directfb_argb_font ? DSPF_ARGB : DSPF_A8,
-                           width, height,
-                           &cache->dfbsurface);
-    if (status) {
-        free (cache);
-       return status;
-    }
-
-    cache->width  = width;
-    cache->height = height;
-    *out = cache;
-    return CAIRO_STATUS_SUCCESS;
-}
-
-static void
-_directfb_destroy_font_cache (cairo_directfb_font_cache_t *cache)
-{
-    cache->dfbsurface->Release (cache->dfbsurface);
-    free (cache);
-}
-
-/* XXX hook into rtree font cache from drm */
-static cairo_status_t
-_directfb_acquire_font_cache (cairo_directfb_surface_t     *surface,
-                              cairo_scaled_font_t          *scaled_font,
-                              const cairo_glyph_t          *glyphs,
-                              int                           num_glyphs,
-                              cairo_directfb_font_cache_t **ret_cache,
-                              DFBRectangle                 *rects,
-                              DFBPoint                     *points,
-                             int                          *ret_num)
-{
-    cairo_status_t               status;
-    cairo_scaled_glyph_t        *chars[num_glyphs];
-    int                          num_chars = 0;
-    cairo_directfb_font_cache_t *cache     = NULL;
-    int                          n         = 0;
-    int                          x         = 0;
-    int                          y         = 0;
-    int                          w         = 8;
-    int                          h         = 8;
-    int                          i;
-
-    D_DEBUG_AT (CairoDFB_Font, "%s( %p [%d] )\n", __FUNCTION__, glyphs, num_glyphs );
-
-    _cairo_scaled_font_freeze_cache (scaled_font);
-
-    if (scaled_font->surface_private) {
-       cache = scaled_font->surface_private;
-       x = cache->x;
-       y = cache->y;
-    }
-
-    for (i = 0; i < num_glyphs; i++) {
-       cairo_scaled_glyph_t  *scaled_glyph;
-       cairo_image_surface_t *img;
-
-       D_DEBUG_AT (CairoDFB_Font, "  -> [%2d] = %4lu\n", i, glyphs[i].index );
-
-       status = _cairo_scaled_glyph_lookup (scaled_font, glyphs[i].index,
-                                         CAIRO_SCALED_GLYPH_INFO_SURFACE,
-                                         &scaled_glyph);
-       if (status) {
-           _cairo_scaled_font_thaw_cache (scaled_font);
-           return status;
-       }
-
-       img = scaled_glyph->surface;
-       switch (img->format) {
-       case CAIRO_FORMAT_A1:
-       case CAIRO_FORMAT_A8:
-       case CAIRO_FORMAT_ARGB32:
-           break;
-       case CAIRO_FORMAT_RGB24:
-       default:
-           D_DEBUG_AT (CairoDFB_Font,
-                       "  -> Unsupported font format %d!\n", img->format);
-           _cairo_scaled_font_thaw_cache (scaled_font);
-           return CAIRO_INT_STATUS_UNSUPPORTED;
-       }
-
-       points[n].x = _cairo_lround (glyphs[i].x - img->base.device_transform.x0);
-       points[n].y = _cairo_lround (glyphs[i].y - img->base.device_transform.y0);
-
-       //        D_DEBUG_AT (CairoDFB_Font, "            (%4d,%4d) [%2d]\n", points[n].x, points[n].y, n );
-
-       if (points[n].x >= surface->width  ||
-           points[n].y >= surface->height ||
-           points[n].x+img->width  <= 0   ||
-           points[n].y+img->height <= 0)
-       {
-           continue;
-       }
-
-       if (scaled_glyph->surface_private == NULL) {
-           DFBRectangle *rect;
-
-           if (x+img->width > 2048) {
-               x = 0;
-               y = h;
-               h = 0;
-           }
-
-           rects[n].x = x;
-           rects[n].y = y;
-           rects[n].w = img->width;
-           rects[n].h = img->height;
-
-           x += img->width;
-           h  = MAX (h, img->height);
-           w  = MAX (w, x);
-
-           /* Remember glyph location */
-           rect = malloc (sizeof (DFBRectangle));
-           if (rect == NULL) {
-               _cairo_scaled_font_thaw_cache (scaled_font);
-               return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-           }
-           *rect = rects[n];
-
-           scaled_glyph->surface_private = rect;
-           chars[num_chars++] = scaled_glyph;
-
-           D_DEBUG_AT (CairoDFB_Font, "  -> loading at %4d,%2d <- rect %p, img %p, entry %p\n",
-                       rects[n].x, rects[n].y, rect, scaled_glyph->surface, scaled_glyph);
-       } else {
-           rects[n] = *(DFBRectangle *) scaled_glyph->surface_private;
-
-           D_DEBUG_AT (CairoDFB_Font, "  -> exists at  %4d,%2d\n", rects[n].x, rects[n].y);
-       }
-
-       n++;
-    }
-
-    if (n == 0) {
-       _cairo_scaled_font_thaw_cache (scaled_font);
-       return CAIRO_INT_STATUS_NOTHING_TO_DO;
-    }
-
-    h += y;
-    w = MAX (w, 8);
-    h = MAX (h, 8);
-
-    /* XXX query maximum surface size */
-    if (w > 2048 || h > 2048) {
-       _cairo_scaled_font_thaw_cache (scaled_font);
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-    }
-
-    if (cache) {
-       if (cache->width < w || cache->height < h) {
-           cairo_directfb_font_cache_t *new_cache;
-
-           w = MAX (w, cache->width);
-           h = MAX (h, cache->height);
-
-           D_DEBUG_AT (CairoDFB_Font, "  -> Reallocating font cache (%dx%d).\n", w, h);
-
-           status = _directfb_allocate_font_cache (surface->dfb,
-                                                   w, h,
-                                                   &new_cache);
-           if (status) {
-               _cairo_scaled_font_thaw_cache (scaled_font);
-               return status;
-           }
-
-           new_cache->dfbsurface->Blit (new_cache->dfbsurface,
-                                        cache->dfbsurface, NULL, 0, 0);
-
-           _directfb_destroy_font_cache (cache);
-           scaled_font->surface_private = cache = new_cache;
-       }
-    } else {
-       D_DEBUG_AT (CairoDFB_Font, "  -> Allocating font cache (%dx%d).\n", w, h);
-
-       status = _directfb_allocate_font_cache (surface->dfb, w, h, &cache);
-       if (status) {
-           _cairo_scaled_font_thaw_cache (scaled_font);
-           return status;
-       }
-
-       scaled_font->surface_backend = &_cairo_directfb_surface_backend;
-       scaled_font->surface_private = cache;
-    }
-
-    if (num_chars) {
-       unsigned char *data;
-       int            pitch;
-
-       if (cache->dfbsurface->Lock (cache->dfbsurface,
-                                    DSLF_WRITE, (void *)&data, &pitch))
-       {
-           _cairo_scaled_font_thaw_cache (scaled_font);
-           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-       }
-
-       D_DEBUG_AT (CairoDFB_Font, "  => %d chars to load, cache %dx%d\n", num_chars, cache->width, cache->height);
-
-       for (i = 0; i < num_chars; i++) {
-           cairo_image_surface_t *img  = chars[i]->surface;
-           DFBRectangle          *rect = chars[i]->surface_private;
-           unsigned char         *dst  = data;
-           unsigned char         *src;
-           int                    j;
-
-           D_DEBUG_AT (CairoDFB_Font, "  -> loading [%2d] <- rect %p, img %p, entry %p\n", i, rect, img, chars[i]);
-
-           src = img->data;
-
-           D_DEBUG_AT (CairoDFB_Font, "     from %p\n", src);
-
-           dst += rect->y * pitch + (_directfb_argb_font ? (rect->x<<2) : rect->x);
-
-           D_DEBUG_AT (CairoDFB_Font, "     to %4d,%2d (%p)\n", rect->x, rect->y, dst);
-
-           if (img->format == CAIRO_FORMAT_A1) {
-               for (h = rect->h; h; h--) {
-                   if (_directfb_argb_font) {
-                       for (j = 0; j < rect->w; j++)
-                           ((uint32_t *) dst)[j] = (src[j>>3] & (1 << (j&7))) ? 0xffffffff : 0;
-                   } else {
-                       for (j = 0; j < rect->w; j++)
-                           dst[j] = (src[j>>3] & (1 << (j&7))) ? 0xff : 0;
-                   }
-
-                   dst += pitch;
-                   src += img->stride;
-               }
-           } else if (img->format == CAIRO_FORMAT_A8) {
-               for (h = rect->h; h; h--) {
-                   if (_directfb_argb_font) {
-                       for (j = 0; j < rect->w; j++)
-                           ((uint32_t *) dst)[j] = src[j] * 0x01010101;
-                   } else {
-                       direct_memcpy (dst, src, rect->w);
-                   }
-
-                   dst += pitch;
-                   src += img->stride;
-               }
-           } else { /* ARGB32 */
-               for (h = rect->h; h; h--) {
-                   if (_directfb_argb_font) {
-                       direct_memcpy (dst, src, rect->w<<2);
-                   } else {
-                       for (j = 0; j < rect->w; j++)
-                           dst[j] = ((uint32_t *) src)[j] >> 24;
-                   }
-
-                   dst += pitch;
-                   src += img->stride;
-               }
-           }
-       }
-
-       cache->dfbsurface->Unlock (cache->dfbsurface);
-    }
-
-    _cairo_scaled_font_thaw_cache (scaled_font);
-
-    cache->x = x;
-    cache->y = y;
-
-    D_DEBUG_AT (CairoDFB_Font, "  => cache %d,%d, %p [%d]\n", x, y, cache, n);
-
-    *ret_cache = cache;
-    *ret_num   = n;
-
-    return CAIRO_STATUS_SUCCESS;
-}
-
-static void
-_cairo_directfb_surface_scaled_font_fini (cairo_scaled_font_t *scaled_font)
-{
-    cairo_directfb_font_cache_t *cache = scaled_font->surface_private;
-
-    D_DEBUG_AT (CairoDFB_Font,
-               "%s( scaled_font=%p ).\n", __FUNCTION__, scaled_font);
-
-    if (cache != NULL) {
-       _directfb_destroy_font_cache (cache);
-       scaled_font->surface_private = NULL;
-    }
-}
-
-static void
-_cairo_directfb_surface_scaled_glyph_fini (cairo_scaled_glyph_t *scaled_glyph,
-                                           cairo_scaled_font_t  *scaled_font)
-{
-     D_DEBUG_AT (CairoDFB_Font,
-                 "%s( scaled_glyph=%p, scaled_font=%p ).\n",
-                 __FUNCTION__, scaled_glyph, scaled_font);
-
-     free (scaled_glyph->surface_private);
-     scaled_glyph->surface_private = NULL;
-}
-
-static cairo_int_status_t
-_cairo_directfb_surface_show_glyphs (void                  *abstract_dst,
-                                     cairo_operator_t       op,
-                                     const cairo_pattern_t  *pattern,
-                                     cairo_glyph_t         *glyphs,
-                                     int                    num_glyphs,
-                                     cairo_scaled_font_t    *scaled_font,
-                                    const cairo_clip_t     *clip,
-                                    int                    *remaining_glyphs)
-{
-    cairo_directfb_surface_t    *dst = abstract_dst;
-    cairo_directfb_font_cache_t *cache;
-    cairo_status_t               status;
-    DFBSurfaceBlittingFlags      flags;
-    DFBSurfaceBlendFunction      sblend;
-    DFBSurfaceBlendFunction      dblend;
-    DFBRectangle                 rects[num_glyphs];
-    DFBPoint                     points[num_glyphs];
-    int                          num;
-    const cairo_color_t         *color;
-    cairo_region_t             *clip_region = NULL;
-
-    D_DEBUG_AT (CairoDFB_Font,
-               "%s( dst=%p, op=%d, pattern=%p, glyphs=%p, num_glyphs=%d, scaled_font=%p ).\n",
-               __FUNCTION__, dst, op, pattern, glyphs, num_glyphs, scaled_font);
-
-    if (! dst->supported_destination)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (pattern->type != CAIRO_PATTERN_TYPE_SOLID)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    /* Fallback if we need to emulate clip regions */
-    if (clip != NULL) {
-       clip_region = _cairo_clip_get_region (clip);
-       if (unlikely (clip_region == NULL))
-           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-    }
-
-    /* XXX Unbounded operators are not handled correctly */
-    if (! _cairo_operator_bounded_by_mask (op))
-        return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (! _directfb_get_operator (op, &sblend, &dblend) ||
-       sblend == DSBF_DESTALPHA || sblend == DSBF_INVDESTALPHA)
-    {
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-    }
-
-    status = _directfb_acquire_font_cache (dst, scaled_font, glyphs, num_glyphs,
-                                          &cache, &rects[0], &points[0], &num);
-    if (status) {
-       if (status == CAIRO_INT_STATUS_NOTHING_TO_DO)
-           status = CAIRO_STATUS_SUCCESS;
-       return status;
-    }
-
-    color = &((cairo_solid_pattern_t *) pattern)->color;
-
-    flags = DSBLIT_BLEND_ALPHACHANNEL | DSBLIT_COLORIZE;
-    if (! CAIRO_COLOR_IS_OPAQUE (color))
-       flags |= DSBLIT_BLEND_COLORALPHA;
-
-    if (!_directfb_argb_font) {
-       if (sblend == DSBF_ONE) {
-           sblend = DSBF_SRCALPHA;
-           if (dblend == DSBF_ZERO)
-               dblend = DSBF_INVSRCALPHA;
-       }
-    }
-
-    dst->dfbsurface->SetBlittingFlags (dst->dfbsurface, flags);
-    dst->dfbsurface->SetSrcBlendFunction (dst->dfbsurface, sblend);
-    dst->dfbsurface->SetDstBlendFunction (dst->dfbsurface, dblend);
-    if (dst->blit_premultiplied) {
-       dst->dfbsurface->SetColor (dst->dfbsurface,
-                                  color->red_short >> 8,
-                                  color->green_short >> 8,
-                                  color->blue_short >> 8,
-                                  color->alpha_short >> 8);
-    } else {
-       dst->dfbsurface->SetColor (dst->dfbsurface,
-                                  color->red * 0xff,
-                                  color->green * 0xff,
-                                  color->blue * 0xff,
-                                  color->alpha * 0xff);
-    }
-
-    D_DEBUG_AT (CairoDFB_Font, "Running BatchBlit().\n");
-
-    RUN_CLIPPED (dst, clip_region, NULL,
-                dst->dfbsurface->BatchBlit (dst->dfbsurface,
-                                            cache->dfbsurface, rects, points, num));
-
-    return CAIRO_STATUS_SUCCESS;
-}
-#endif /* DFB_SHOW_GLYPHS */
-
-
-static cairo_bool_t
-_cairo_directfb_surface_is_similar (void *surface_a, void *surface_b)
-{
-    cairo_directfb_surface_t *a = (cairo_directfb_surface_t *) surface_a;
-    cairo_directfb_surface_t *b = (cairo_directfb_surface_t *) surface_b;
-
-    return a->dfb == b->dfb;
-}
-
-static cairo_surface_backend_t
-_cairo_directfb_surface_backend = {
-         CAIRO_SURFACE_TYPE_DIRECTFB, /*type*/
-        _cairo_directfb_surface_finish, /*finish*/
-
-        _cairo_default_context_create,
-
-        _cairo_directfb_surface_create_similar,/*create_similar*/
-       NULL, /* create similar image */
-       NULL, /* map to image */
-       NULL, /* unmap image */
-
-        _cairo_directfb_surface_acquire_source_image,/*acquire_source_image*/
-        _cairo_directfb_surface_release_source_image,/*release_source_image*/
-        _cairo_directfb_surface_acquire_dest_image,/*acquire_dest_image*/
-        _cairo_directfb_surface_release_dest_image,/*release_dest_image*/
-        _cairo_directfb_surface_clone_similar,/*clone_similar*/
-#if DFB_COMPOSITE
-        _cairo_directfb_surface_composite,/*composite*/
-#else
-        NULL,/*composite*/
-#endif
-#if DFB_RECTANGLES
-        _cairo_directfb_surface_fill_rectangles,/*fill_rectangles*/
-#else
-        NULL,/*fill_rectangles*/
-#endif
-#if DFB_COMPOSITE_TRAPEZOIDS
-        _cairo_directfb_surface_composite_trapezoids,/*composite_trapezoids*/
-#else
-        NULL,/*composite_trapezoids*/
-#endif
-        NULL, /* create_span_renderer */
-        NULL, /* check_span_renderer */
-        NULL, /* copy_page */
-        NULL, /* show_page */
-        _cairo_directfb_abstract_surface_get_extents,/* get_extents */
-        NULL, /* old_show_glyphs */
-        NULL, /* get_font_options */
-        NULL, /* flush */
-        NULL, /* mark_dirty_rectangle */
-#if DFB_SHOW_GLYPHS
-        _cairo_directfb_surface_scaled_font_fini,/* scaled_font_fini */
-        _cairo_directfb_surface_scaled_glyph_fini,/* scaled_glyph_fini */
-#else
-        NULL,
-        NULL,
-#endif
-        NULL, /* paint */
-        NULL, /* mask */
-        NULL, /* stroke */
-        NULL, /* fill */
-#if DFB_SHOW_GLYPHS
-        _cairo_directfb_surface_show_glyphs,/* show_glyphs */
-#else
-        NULL, /* show_glyphs */
-#endif
-        NULL, /* snapshot */
-        _cairo_directfb_surface_is_similar,
-};
-
-
-static void
-cairo_directfb_surface_backend_init (IDirectFB *dfb)
-{
-    static int done = 0;
-
-    if (done)
-       return;
-
-    if (getenv ("CAIRO_DIRECTFB_NO_ACCEL")) {
-#if DFB_RECTANGLES
-       _cairo_directfb_surface_backend.fill_rectangles = NULL;
-#endif
-#if DFB_COMPOSITE
-       _cairo_directfb_surface_backend.composite = NULL;
-#endif
-#if DFB_COMPOSITE_TRAPEZOIDS
-       _cairo_directfb_surface_backend.composite_trapezoids = NULL;
-#endif
-#if DFB_SHOW_GLYPHS
-       _cairo_directfb_surface_backend.scaled_font_fini = NULL;
-       _cairo_directfb_surface_backend.scaled_glyph_fini = NULL;
-       _cairo_directfb_surface_backend.show_glyphs = NULL;
-#endif
-       D_DEBUG_AT (CairoDFB_Surface, "Acceleration disabled.\n");
-    } else {
-       DFBGraphicsDeviceDescription dsc;
-
-       dfb->GetDeviceDescription (dfb, &dsc);
-
-#if DFB_COMPOSITE
-       //        if (!(dsc.acceleration_mask & DFXL_BLIT))
-       //            _cairo_directfb_surface_backend.composite = NULL;
-#endif
-
-#if DFB_COMPOSITE_TRAPEZOIDS
-       //        if (!(dsc.acceleration_mask & DFXL_TEXTRIANGLES))
-       //            _cairo_directfb_surface_backend.composite_trapezoids = NULL;
-#endif
-    }
-
-    if (getenv ("CAIRO_DIRECTFB_ARGB_FONT")) {
-       _directfb_argb_font = 1;
-       D_DEBUG_AT (CairoDFB_Surface, "Using ARGB fonts.\n");
-    }
-
-    done = 1;
-}
-
-cairo_surface_t *
-cairo_directfb_surface_create (IDirectFB *dfb, IDirectFBSurface *dfbsurface)
-{
-    cairo_directfb_surface_t *surface;
-    DFBSurfacePixelFormat     format;
-    DFBSurfaceCapabilities caps;
-
-    D_ASSERT (dfb != NULL);
-    D_ASSERT (dfbsurface != NULL);
+                        _directfb_format_to_content (format));
 
-    cairo_directfb_surface_backend_init (dfb);
+    surface->image.pixman_format = pixman_format;
+    surface->image.format = _cairo_format_from_pixman_format (pixman_format);
 
-    surface = calloc (1, sizeof (cairo_directfb_surface_t));
-    if (surface == NULL)
-        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+    surface->image.width = width;
+    surface->image.height = height;
+    surface->image.depth = PIXMAN_FORMAT_DEPTH(pixman_format);
 
-    dfbsurface->AddRef (dfbsurface);
-    dfbsurface->GetPixelFormat (dfbsurface, &format);
-    dfbsurface->GetSize (dfbsurface, &surface->width, &surface->height);
     surface->dfb = dfb;
-    surface->dfbsurface = dfbsurface;
-    surface->pixman_format = _directfb_to_pixman_format (format);
-    surface->supported_destination = pixman_format_supported_destination (surface->pixman_format);
+    surface->dfb_surface = dfbsurface;
+    dfbsurface->AddRef (dfbsurface);
 
     dfbsurface->GetCapabilities (dfbsurface, &caps);
     if (caps & DSCAPS_PREMULTIPLIED)
        surface->blit_premultiplied = TRUE;
 
-    _cairo_surface_init (&surface->base,
-                         &_cairo_directfb_surface_backend,
-                        NULL, /* device */
-                        _directfb_format_to_content (format));
-
-    return &surface->base;
+    return &surface->image.base;
 }
+slim_hidden_def(cairo_directfb_surface_create);
index ec23852..74565e5 100644 (file)
@@ -49,6 +49,10 @@ typedef struct _cairo_egl_context {
     EGLContext context;
 
     EGLSurface dummy_surface;
+
+    EGLDisplay previous_display;
+    EGLContext previous_context;
+    EGLSurface previous_surface;
 } cairo_egl_context_t;
 
 typedef struct _cairo_egl_surface {
@@ -58,20 +62,44 @@ typedef struct _cairo_egl_surface {
 } cairo_egl_surface_t;
 
 
-static void
-_egl_acquire (void *abstract_ctx)
+static cairo_bool_t
+_context_acquisition_changed_egl_state (cairo_egl_context_t *ctx,
+                                       EGLSurface current_surface)
 {
-    cairo_egl_context_t *ctx = abstract_ctx;
-    EGLSurface current_surface;
+    return !(ctx->previous_display == ctx->display &&
+            ctx->previous_surface == current_surface &&
+            ctx->previous_context == ctx->context);
+}
 
+static EGLSurface
+_egl_get_current_surface (cairo_egl_context_t *ctx)
+{
     if (ctx->base.current_target == NULL ||
         _cairo_gl_surface_is_texture (ctx->base.current_target)) {
-        current_surface = ctx->dummy_surface;
-    } else {
-        cairo_egl_surface_t *surface = (cairo_egl_surface_t *) ctx->base.current_target;
-        current_surface = surface->egl ;
+       return  ctx->dummy_surface;
     }
 
+    return ((cairo_egl_surface_t *) ctx->base.current_target)->egl;
+}
+
+static void
+_egl_query_current_state (cairo_egl_context_t * ctx)
+{
+    ctx->previous_display = eglGetCurrentDisplay ();
+    ctx->previous_surface = eglGetCurrentSurface (EGL_DRAW);
+    ctx->previous_context = eglGetCurrentContext ();
+}
+
+static void
+_egl_acquire (void *abstract_ctx)
+{
+    cairo_egl_context_t *ctx = abstract_ctx;
+    EGLSurface current_surface = _egl_get_current_surface (ctx);
+
+    _egl_query_current_state (ctx);
+    if (!_context_acquisition_changed_egl_state (ctx, current_surface))
+       return;
+
     eglMakeCurrent (ctx->display,
                    current_surface, current_surface, ctx->context);
 }
@@ -80,9 +108,12 @@ static void
 _egl_release (void *abstract_ctx)
 {
     cairo_egl_context_t *ctx = abstract_ctx;
+    if (!ctx->base.thread_aware)
+       return;
+
+    eglMakeCurrent (ctx->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
+                    EGL_NO_CONTEXT);
 
-    eglMakeCurrent (ctx->display,
-                   EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
 }
 
 static void
@@ -110,9 +141,11 @@ _egl_destroy (void *abstract_ctx)
 {
     cairo_egl_context_t *ctx = abstract_ctx;
 
-    eglMakeCurrent (ctx->display,
-                   EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-    eglDestroySurface (ctx->display, ctx->dummy_surface);
+    eglMakeCurrent (ctx->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
+                    EGL_NO_CONTEXT);
+
+    if (ctx->dummy_surface != EGL_NO_SURFACE)
+        eglDestroySurface (ctx->display, ctx->dummy_surface);
 }
 
 static cairo_bool_t
@@ -199,7 +232,7 @@ cairo_egl_device_create (EGLDisplay dpy, EGLContext egl)
        return _cairo_gl_context_create_in_error (status);
     }
 
-    eglMakeCurrent (dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    ctx->base.release (ctx);
 
     return &ctx->base.base;
 }
@@ -218,6 +251,9 @@ cairo_gl_surface_create_for_egl (cairo_device_t     *device,
     if (device->backend->type != CAIRO_DEVICE_TYPE_GL)
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
 
+    if (width <= 0 || height <= 0)
+        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
+
     surface = calloc (1, sizeof (cairo_egl_surface_t));
     if (unlikely (surface == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
diff --git a/src/cairo-error-inline.h b/src/cairo-error-inline.h
new file mode 100644 (file)
index 0000000..9126c5e
--- /dev/null
@@ -0,0 +1,52 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2002 University of Southern California
+ * Copyright Â© 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is University of Southern
+ * California.
+ *
+ * Contributor(s):
+ *     Carl D. Worth <cworth@cworth.org>
+ */
+
+#ifndef _CAIRO_ERROR_INLINE_H_
+#define _CAIRO_ERROR_INLINE_H_
+
+#include "cairo-error-private.h"
+
+CAIRO_BEGIN_DECLS
+
+static inline cairo_status_t
+_cairo_public_status (cairo_int_status_t status)
+{
+    assert (status <= CAIRO_INT_STATUS_LAST_STATUS);
+    return (cairo_status_t) status;
+}
+
+#endif /* _CAIRO_ERROR_INLINE_H_ */
index a548a35..ea9c2ea 100644 (file)
@@ -109,13 +109,6 @@ typedef enum _cairo_int_status cairo_int_status_t;
 #define _cairo_int_status_is_error(status) \
     (status != CAIRO_INT_STATUS_SUCCESS && status < CAIRO_INT_STATUS_LAST_STATUS)
 
-static inline cairo_status_t
-_cairo_public_status (cairo_int_status_t status)
-{
-    assert (status <= CAIRO_INT_STATUS_LAST_STATUS);
-    return (cairo_status_t) status;
-}
-
 cairo_private cairo_status_t
 _cairo_error (cairo_status_t status);
 
index 105859d..efc8a79 100644 (file)
@@ -53,10 +53,11 @@ _cairo_fallback_compositor_paint (const cairo_compositor_t  *_compositor,
     cairo_surface_t *image;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     image = cairo_surface_map_to_image (extents->surface, &extents->unbounded);
     status = _cairo_surface_offset_paint (image,
-                                         -extents->unbounded.x,
-                                         -extents->unbounded.y,
+                                         extents->unbounded.x,
+                                         extents->unbounded.y,
                                          extents->op,
                                          &extents->source_pattern.base,
                                          extents->clip);
@@ -72,6 +73,7 @@ _cairo_fallback_compositor_mask (const cairo_compositor_t     *_compositor,
     cairo_surface_t *image;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     image = cairo_surface_map_to_image (extents->surface, &extents->unbounded);
     status = _cairo_surface_offset_mask (image,
                                         extents->unbounded.x,
@@ -98,6 +100,7 @@ _cairo_fallback_compositor_stroke (const cairo_compositor_t  *_compositor,
     cairo_surface_t *image;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     image = cairo_surface_map_to_image (extents->surface, &extents->unbounded);
     status = _cairo_surface_offset_stroke (image,
                                           extents->unbounded.x,
@@ -125,6 +128,7 @@ _cairo_fallback_compositor_fill (const cairo_compositor_t   *_compositor,
     cairo_surface_t *image;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     image = cairo_surface_map_to_image (extents->surface, &extents->unbounded);
     status = _cairo_surface_offset_fill (image,
                                         extents->unbounded.x,
@@ -150,6 +154,7 @@ _cairo_fallback_compositor_glyphs (const cairo_compositor_t *_compositor,
     cairo_surface_t *image;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     image = cairo_surface_map_to_image (extents->surface, &extents->unbounded);
     status = _cairo_surface_offset_glyphs (image,
                                           extents->unbounded.x,
index 9a16a03..b6cc6be 100644 (file)
@@ -52,6 +52,8 @@
 #define CAIRO_FIXED_ONE_DOUBLE ((double)(1 << CAIRO_FIXED_FRAC_BITS))
 #define CAIRO_FIXED_EPSILON    ((cairo_fixed_t)(1))
 
+#define CAIRO_FIXED_ERROR_DOUBLE (1. / (2 * CAIRO_FIXED_ONE_DOUBLE))
+
 #define CAIRO_FIXED_FRAC_MASK  ((cairo_fixed_t)(((cairo_fixed_unsigned_t)(-1)) >> (CAIRO_FIXED_BITS - CAIRO_FIXED_FRAC_BITS)))
 #define CAIRO_FIXED_WHOLE_MASK (~CAIRO_FIXED_FRAC_MASK)
 
index e379b25..b93bd8c 100644 (file)
@@ -56,7 +56,7 @@
  * or implicitly using the <firstterm>toy</firstterm> text API by way of
  * cairo_select_font_face().  The resulting face can be accessed using
  * cairo_get_font_face().
- */
+ **/
 
 /* #cairo_font_face_t */
 
@@ -108,6 +108,8 @@ _cairo_font_face_init (cairo_font_face_t               *font_face,
  * cairo_font_face_get_reference_count().
  *
  * Return value: the referenced #cairo_font_face_t.
+ *
+ * Since: 1.0
  **/
 cairo_font_face_t *
 cairo_font_face_reference (cairo_font_face_t *font_face)
@@ -133,6 +135,8 @@ slim_hidden_def (cairo_font_face_reference);
  * Decreases the reference count on @font_face by one. If the result
  * is zero, then @font_face and all associated resources are freed.
  * See cairo_font_face_reference().
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_face_destroy (cairo_font_face_t *font_face)
@@ -212,6 +216,8 @@ cairo_font_face_get_reference_count (cairo_font_face_t *font_face)
  *
  * Return value: %CAIRO_STATUS_SUCCESS or another error such as
  *   %CAIRO_STATUS_NO_MEMORY.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_font_face_status (cairo_font_face_t *font_face)
@@ -230,6 +236,8 @@ cairo_font_face_status (cairo_font_face_t *font_face)
  * function returns %NULL.
  *
  * Return value: the user data previously attached or %NULL.
+ *
+ * Since: 1.0
  **/
 void *
 cairo_font_face_get_user_data (cairo_font_face_t          *font_face,
@@ -255,6 +263,8 @@ slim_hidden_def (cairo_font_face_get_user_data);
  *
  * Return value: %CAIRO_STATUS_SUCCESS or %CAIRO_STATUS_NO_MEMORY if a
  * slot could not be allocated for the user data.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_font_face_set_user_data (cairo_font_face_t          *font_face,
index 521d371..ad28745 100644 (file)
@@ -47,7 +47,7 @@
  * time the font options implied by a surface are just right and do not 
  * need any changes, but for pixel-based targets tweaking font options 
  * may result in superior output on a particular display.
- */
+ **/
 
 static const cairo_font_options_t _cairo_font_options_nil = {
     CAIRO_ANTIALIAS_DEFAULT,
@@ -98,6 +98,8 @@ _cairo_font_options_init_copy (cairo_font_options_t           *options,
  *   valid pointer; if memory cannot be allocated, then a special
  *   error object is returned where all operations on the object do nothing.
  *   You can check for this with cairo_font_options_status().
+ *
+ * Since: 1.0
  **/
 cairo_font_options_t *
 cairo_font_options_create (void)
@@ -127,6 +129,8 @@ cairo_font_options_create (void)
  *   valid pointer; if memory cannot be allocated, then a special
  *   error object is returned where all operations on the object do nothing.
  *   You can check for this with cairo_font_options_status().
+ *
+ * Since: 1.0
  **/
 cairo_font_options_t *
 cairo_font_options_copy (const cairo_font_options_t *original)
@@ -153,6 +157,8 @@ cairo_font_options_copy (const cairo_font_options_t *original)
  *
  * Destroys a #cairo_font_options_t object created with
  * cairo_font_options_create() or cairo_font_options_copy().
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_options_destroy (cairo_font_options_t *options)
@@ -171,6 +177,8 @@ cairo_font_options_destroy (cairo_font_options_t *options)
  * font options object
  *
  * Return value: %CAIRO_STATUS_SUCCESS or %CAIRO_STATUS_NO_MEMORY
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_font_options_status (cairo_font_options_t *options)
@@ -193,6 +201,8 @@ slim_hidden_def (cairo_font_options_status);
  * existing values. This operation can be thought of as somewhat
  * similar to compositing @other onto @options with the operation
  * of %CAIRO_OPERATOR_OVER.
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_options_merge (cairo_font_options_t       *options,
@@ -229,6 +239,8 @@ slim_hidden_def (cairo_font_options_merge);
  * Return value: %TRUE if all fields of the two font options objects match.
  *     Note that this function will return %FALSE if either object is in
  *     error.
+ *
+ * Since: 1.0
  **/
 cairo_bool_t
 cairo_font_options_equal (const cairo_font_options_t *options,
@@ -262,6 +274,8 @@ slim_hidden_def (cairo_font_options_equal);
  * Return value: the hash value for the font options object.
  *   The return value can be cast to a 32-bit type if a
  *   32-bit hash value is needed.
+ *
+ * Since: 1.0
  **/
 unsigned long
 cairo_font_options_hash (const cairo_font_options_t *options)
@@ -284,6 +298,8 @@ slim_hidden_def (cairo_font_options_hash);
  *
  * Sets the antialiasing mode for the font options object. This
  * specifies the type of antialiasing to do when rendering text.
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_options_set_antialias (cairo_font_options_t *options,
@@ -303,6 +319,8 @@ slim_hidden_def (cairo_font_options_set_antialias);
  * Gets the antialiasing mode for the font options object.
  *
  * Return value: the antialiasing mode
+ *
+ * Since: 1.0
  **/
 cairo_antialias_t
 cairo_font_options_get_antialias (const cairo_font_options_t *options)
@@ -323,6 +341,8 @@ cairo_font_options_get_antialias (const cairo_font_options_t *options)
  * the display device when rendering with an antialiasing mode of
  * %CAIRO_ANTIALIAS_SUBPIXEL. See the documentation for
  * #cairo_subpixel_order_t for full details.
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_options_set_subpixel_order (cairo_font_options_t   *options,
@@ -343,6 +363,8 @@ slim_hidden_def (cairo_font_options_set_subpixel_order);
  * See the documentation for #cairo_subpixel_order_t for full details.
  *
  * Return value: the subpixel order for the font options object
+ *
+ * Since: 1.0
  **/
 cairo_subpixel_order_t
 cairo_font_options_get_subpixel_order (const cairo_font_options_t *options)
@@ -362,8 +384,6 @@ cairo_font_options_get_subpixel_order (const cairo_font_options_t *options)
  * specifies how pixels are filtered when rendered with an antialiasing
  * mode of %CAIRO_ANTIALIAS_SUBPIXEL. See the documentation for
  * #cairo_lcd_filter_t for full details.
- *
- * Since: 1.8
  **/
 void
 _cairo_font_options_set_lcd_filter (cairo_font_options_t *options,
@@ -383,8 +403,6 @@ _cairo_font_options_set_lcd_filter (cairo_font_options_t *options,
  * See the documentation for #cairo_lcd_filter_t for full details.
  *
  * Return value: the LCD filter for the font options object
- *
- * Since: 1.8
  **/
 cairo_lcd_filter_t
 _cairo_font_options_get_lcd_filter (const cairo_font_options_t *options)
@@ -402,8 +420,6 @@ _cairo_font_options_get_lcd_filter (const cairo_font_options_t *options)
  *
  * Sets the rounding options for the font options object. If rounding is set, a
  * glyph's position will be rounded to integer values.
- *
- * Since: 1.12
  **/
 void
 _cairo_font_options_set_round_glyph_positions (cairo_font_options_t *options,
@@ -422,8 +438,6 @@ _cairo_font_options_set_round_glyph_positions (cairo_font_options_t *options,
  * Gets the glyph position rounding option for the font options object.
  *
  * Return value: The round glyph posistions flag for the font options object.
- *
- * Since: 1.12
  **/
 cairo_round_glyph_positions_t
 _cairo_font_options_get_round_glyph_positions (const cairo_font_options_t *options)
@@ -443,6 +457,8 @@ _cairo_font_options_get_round_glyph_positions (const cairo_font_options_t *optio
  * This controls whether to fit font outlines to the pixel grid,
  * and if so, whether to optimize for fidelity or contrast.
  * See the documentation for #cairo_hint_style_t for full details.
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_options_set_hint_style (cairo_font_options_t *options,
@@ -463,6 +479,8 @@ slim_hidden_def (cairo_font_options_set_hint_style);
  * See the documentation for #cairo_hint_style_t for full details.
  *
  * Return value: the hint style for the font options object
+ *
+ * Since: 1.0
  **/
 cairo_hint_style_t
 cairo_font_options_get_hint_style (const cairo_font_options_t *options)
@@ -482,6 +500,8 @@ cairo_font_options_get_hint_style (const cairo_font_options_t *options)
  * controls whether metrics are quantized to integer values in
  * device units.
  * See the documentation for #cairo_hint_metrics_t for full details.
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_options_set_hint_metrics (cairo_font_options_t *options,
@@ -502,6 +522,8 @@ slim_hidden_def (cairo_font_options_set_hint_metrics);
  * See the documentation for #cairo_hint_metrics_t for full details.
  *
  * Return value: the metrics hinting mode for the font options object
+ *
+ * Since: 1.0
  **/
 cairo_hint_metrics_t
 cairo_font_options_get_hint_metrics (const cairo_font_options_t *options)
index 2edcd0d..fba8025 100644 (file)
  *
  * The FreeType font backend is primarily used to render text on GNU/Linux
  * systems, but can be used on other platforms too.
- */
+ **/
 
 /**
  * CAIRO_HAS_FT_FONT:
  *
  * Defined if the FreeType font backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.0
+ **/
 
 /**
  * CAIRO_HAS_FC_FONT:
  * Defined if the Fontconfig-specific functions of the FreeType font backend
  * are available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.10
+ **/
 
 /*
  * The simple 2x2 matrix is converted into separate scale and shape
@@ -169,20 +173,10 @@ _cairo_ft_unscaled_font_keys_equal (const void *key_a,
 static void
 _cairo_ft_unscaled_font_fini (cairo_ft_unscaled_font_t *unscaled);
 
-#ifdef TIZEN_ENABLE_SET_EXTRA_FLAGS
-/* This enum is moved to cairo-ft.h for support to set extra_flags from application */
-#if 0
-typedef enum _cairo_ft_extra_flags {
-    CAIRO_FT_OPTIONS_HINT_METRICS = (1 << 0),
-    CAIRO_FT_OPTIONS_EMBOLDEN = (1 << 1)
-} cairo_ft_extra_flags_t;
-#endif
-#endif
-
 typedef struct _cairo_ft_options {
-    cairo_font_options_t    base;
-    int                            load_flags;  /* flags for FT_Load_Glyph */
-    cairo_ft_extra_flags_t  extra_flags; /* other flags that affect results */
+    cairo_font_options_t base;
+    unsigned int load_flags; /* flags for FT_Load_Glyph */
+    unsigned int synth_flags;
 } cairo_ft_options_t;
 
 struct _cairo_ft_font_face {
@@ -1349,25 +1343,26 @@ _render_glyph_outline (FT_Face                    face,
 
        switch (render_mode) {
        case FT_RENDER_MODE_LCD:
-           if (font_options->subpixel_order == CAIRO_SUBPIXEL_ORDER_BGR) {
+           if (font_options->subpixel_order == CAIRO_SUBPIXEL_ORDER_BGR)
                rgba = FC_RGBA_BGR;
-           } else {
+           else
                rgba = FC_RGBA_RGB;
-           }
+           break;
+
        case FT_RENDER_MODE_LCD_V:
-           if (font_options->subpixel_order == CAIRO_SUBPIXEL_ORDER_VBGR) {
+           if (font_options->subpixel_order == CAIRO_SUBPIXEL_ORDER_VBGR)
                rgba = FC_RGBA_VBGR;
-           } else {
+           else
                rgba = FC_RGBA_VRGB;
-               }
            break;
+
        case FT_RENDER_MODE_MONO:
        case FT_RENDER_MODE_LIGHT:
        case FT_RENDER_MODE_NORMAL:
        case FT_RENDER_MODE_MAX:
        default:
            break;
-           }
+       }
 
 #if HAVE_FT_LIBRARY_SETLCDFILTER
        FT_Library_SetLcdFilter (library, lcd_filter);
@@ -1480,7 +1475,7 @@ _transform_glyph_bitmap (cairo_matrix_t         * shape,
      * the "shape" portion of the font transform
      */
     original_to_transformed = *shape;
-
+    
     cairo_surface_get_device_offset (&(*surface)->base, &origin_x, &origin_y);
     orig_width = (*surface)->width;
     orig_height = (*surface)->height;
@@ -1600,7 +1595,7 @@ _get_pattern_ft_options (FcPattern *pattern, cairo_ft_options_t *ret)
 
     _cairo_font_options_init_default (&ft_options.base);
     ft_options.load_flags = FT_LOAD_DEFAULT;
-    ft_options.extra_flags = 0;
+    ft_options.synth_flags = 0;
 
 #ifndef FC_EMBEDDED_BITMAP
 #define FC_EMBEDDED_BITMAP "embeddedbitmap"
@@ -1615,7 +1610,7 @@ _get_pattern_ft_options (FcPattern *pattern, cairo_ft_options_t *ret)
     if (FcPatternGetBool (pattern,
                          FC_ANTIALIAS, 0, &antialias) != FcResultMatch)
        antialias = FcTrue;
-
+    
     if (antialias) {
        cairo_subpixel_order_t subpixel_order;
        int lcd_filter;
@@ -1736,7 +1731,7 @@ _get_pattern_ft_options (FcPattern *pattern, cairo_ft_options_t *ret)
        embolden = FcFalse;
 
     if (embolden)
-       ft_options.extra_flags |= CAIRO_FT_OPTIONS_EMBOLDEN;
+       ft_options.synth_flags |= CAIRO_FT_SYNTHESIZE_BOLD;
 
     *ret = ft_options;
 }
@@ -1816,9 +1811,7 @@ _cairo_ft_options_merge (cairo_ft_options_t *options,
     }
 
     options->load_flags = load_flags | load_target;
-    options->extra_flags = other->extra_flags;
-    if (options->base.hint_metrics != CAIRO_HINT_METRICS_OFF)
-       options->extra_flags |= CAIRO_FT_OPTIONS_HINT_METRICS;
+    options->synth_flags = other->synth_flags;
 }
 
 static cairo_status_t
@@ -2173,14 +2166,19 @@ _cairo_ft_scaled_glyph_init (void                       *abstract_font,
 
     glyph = face->glyph;
 
-#if HAVE_FT_GLYPHSLOT_EMBOLDEN
     /*
-     * embolden glyphs if requested
+     * synthesize glyphs if requested
      */
-    if (scaled_font->ft_options.extra_flags & CAIRO_FT_OPTIONS_EMBOLDEN)
+#if HAVE_FT_GLYPHSLOT_EMBOLDEN
+    if (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_BOLD)
        FT_GlyphSlot_Embolden (glyph);
 #endif
 
+#if HAVE_FT_GLYPHSLOT_OBLIQUE
+    if (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_OBLIQUE)
+       FT_GlyphSlot_Oblique (glyph);
+#endif
+
     if (vertical_layout)
        _cairo_ft_scaled_glyph_vertical_layout_bearing_fix (scaled_font, glyph);
 
@@ -2325,12 +2323,13 @@ _cairo_ft_scaled_glyph_init (void                       *abstract_font,
                goto FAIL;
            }
 #if HAVE_FT_GLYPHSLOT_EMBOLDEN
-           /*
-            * embolden glyphs if requested
-            */
-           if (scaled_font->ft_options.extra_flags & CAIRO_FT_OPTIONS_EMBOLDEN)
+           if (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_BOLD)
                FT_GlyphSlot_Embolden (glyph);
 #endif
+#if HAVE_FT_GLYPHSLOT_OBLIQUE
+           if (scaled_font->ft_options.synth_flags & CAIRO_FT_SYNTHESIZE_OBLIQUE)
+               FT_GlyphSlot_Oblique (glyph);
+#endif
            if (vertical_layout)
                _cairo_ft_scaled_glyph_vertical_layout_bearing_fix (scaled_font, glyph);
 
@@ -2450,11 +2449,7 @@ static cairo_bool_t
 _cairo_ft_is_synthetic (void           *abstract_font)
 {
     cairo_ft_scaled_font_t *scaled_font = abstract_font;
-
-    if (scaled_font->ft_options.extra_flags & CAIRO_FT_OPTIONS_EMBOLDEN)
-       return TRUE;
-    else
-       return FALSE;
+    return scaled_font->ft_options.synth_flags != 0;
 }
 
 static cairo_int_status_t
@@ -2848,7 +2843,7 @@ _cairo_ft_font_face_create (cairo_ft_unscaled_font_t *unscaled,
         prev_font_face = &font_face->next, font_face = font_face->next)
     {
        if (font_face->ft_options.load_flags == ft_options->load_flags &&
-           font_face->ft_options.extra_flags == ft_options->extra_flags &&
+           font_face->ft_options.synth_flags == ft_options->synth_flags &&
            cairo_font_options_equal (&font_face->ft_options.base, &ft_options->base))
        {
            if (font_face->base.status) {
@@ -3038,6 +3033,8 @@ _cairo_ft_font_options_substitute (const cairo_font_options_t *options,
  * so you should call this function after calling FcConfigSubstitute() (the
  * user's settings should override options based on the surface type), but
  * before calling FcDefaultSubstitute().
+ *
+ * Since: 1.0
  **/
 void
 cairo_ft_font_options_substitute (const cairo_font_options_t *options,
@@ -3167,11 +3164,13 @@ FREE_PATTERN:
  * If the FC_FT_FACE element of @pattern is set, the user is responsible
  * for making sure that the referenced FT_Face remains valid for the life
  * time of the returned #cairo_font_face_t.  See
- * cairo_ft_font_face_create_for_ft_face() for an exmaple of how to couple
+ * cairo_ft_font_face_create_for_ft_face() for an example of how to couple
  * the life time of the FT_Face to that of the cairo font-face.
  *
  * Return value: a newly created #cairo_font_face_t. Free with
  *  cairo_font_face_destroy() when you are done using it.
+ *
+ * Since: 1.0
  **/
 cairo_font_face_t *
 cairo_ft_font_face_create_for_pattern (FcPattern *pattern)
@@ -3243,6 +3242,8 @@ cairo_ft_font_face_create_for_pattern (FcPattern *pattern)
  *
  * Return value: a newly created #cairo_font_face_t. Free with
  *  cairo_font_face_destroy() when you are done using it.
+ *
+ * Since: 1.0
  **/
 cairo_font_face_t *
 cairo_ft_font_face_create_for_ft_face (FT_Face         face,
@@ -3258,7 +3259,7 @@ cairo_ft_font_face_create_for_ft_face (FT_Face         face,
        return (cairo_font_face_t *)&_cairo_font_face_nil;
 
     ft_options.load_flags = load_flags;
-    ft_options.extra_flags = 0;
+    ft_options.synth_flags = 0;
     _cairo_font_options_init_default (&ft_options.base);
 
     font_face = _cairo_ft_font_face_create (unscaled, &ft_options);
@@ -3268,6 +3269,74 @@ cairo_ft_font_face_create_for_ft_face (FT_Face         face,
 }
 
 /**
+ * cairo_ft_font_face_set_synthesize:
+ * @font_face: The #cairo_ft_font_face_t object to modify
+ * @synth_flags: the set of synthesis options to enable
+ *
+ * FreeType provides the ability to synthesize different glyphs from a base
+ * font, which is useful if you lack those glyphs from a true bold or oblique
+ * font. See also #cairo_ft_synthesize_t.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_ft_font_face_set_synthesize (cairo_font_face_t *font_face,
+                                  unsigned int synth_flags)
+{
+    cairo_ft_font_face_t *ft;
+
+    if (font_face->backend->type != CAIRO_FONT_TYPE_FT)
+       return;
+
+    ft = (cairo_ft_font_face_t *) font_face;
+    ft->ft_options.synth_flags |= synth_flags;
+}
+
+/**
+ * cairo_ft_font_face_unset_synthesize:
+ * @font_face: The #cairo_ft_font_face_t object to modify
+ * @synth_flags: the set of synthesis options to disable
+ *
+ * See cairo_ft_font_face_set_synthesize().
+ *
+ * Since: 1.12
+ **/
+void
+cairo_ft_font_face_unset_synthesize (cairo_font_face_t *font_face,
+                                    unsigned int synth_flags)
+{
+    cairo_ft_font_face_t *ft;
+
+    if (font_face->backend->type != CAIRO_FONT_TYPE_FT)
+       return;
+
+    ft = (cairo_ft_font_face_t *) font_face;
+    ft->ft_options.synth_flags &= ~synth_flags;
+}
+
+/**
+ * cairo_ft_font_face_get_synthesize:
+ * @font_face: The #cairo_ft_font_face_t object to query
+ *
+ * See #cairo_ft_synthesize_t.
+ *
+ * Returns: the current set of synthesis options.
+ *
+ * Since: 1.12
+ **/
+unsigned int
+cairo_ft_font_face_get_synthesize (cairo_font_face_t *font_face)
+{
+    cairo_ft_font_face_t *ft;
+
+    if (font_face->backend->type != CAIRO_FONT_TYPE_FT)
+       return 0;
+
+    ft = (cairo_ft_font_face_t *) font_face;
+    return ft->ft_options.synth_flags;
+}
+
+/**
  * cairo_ft_scaled_font_lock_face:
  * @scaled_font: A #cairo_scaled_font_t from the FreeType font backend. Such an
  *   object can be created by calling cairo_scaled_font_create() on a
@@ -3296,6 +3365,8 @@ cairo_ft_font_face_create_for_ft_face (FT_Face         face,
  * Return value: The #FT_Face object for @font, scaled appropriately,
  * or %NULL if @scaled_font is in an error state (see
  * cairo_scaled_font_status()) or there is insufficient memory.
+ *
+ * Since: 1.0
  **/
 FT_Face
 cairo_ft_scaled_font_lock_face (cairo_scaled_font_t *abstract_font)
@@ -3345,6 +3416,8 @@ cairo_ft_scaled_font_lock_face (cairo_scaled_font_t *abstract_font)
  *   cairo_ft_font_face_create_for_ft_face()).
  *
  * Releases a face obtained with cairo_ft_scaled_font_lock_face().
+ *
+ * Since: 1.0
  **/
 void
 cairo_ft_scaled_font_unlock_face (cairo_scaled_font_t *abstract_font)
@@ -3399,19 +3472,3 @@ _cairo_ft_font_reset_static_data (void)
 {
     _cairo_ft_unscaled_font_map_destroy ();
 }
-
-#ifdef TIZEN_ENABLE_SET_EXTRA_FLAGS
-/* Set extra_flags to cairo_ft_font_face_t's ft_options from application */
-void
-cairo_ft_font_option_set_extra_flags (cairo_font_face_t * font_face,
-                               cairo_ft_extra_flags_t extra_flags)
-{
-    cairo_ft_font_face_t *ft_font_face =(cairo_ft_font_face_t *) font_face;
-
-    if (extra_flags & CAIRO_FT_OPTIONS_HINT_METRICS)
-        ft_font_face->ft_options.extra_flags |= CAIRO_FT_OPTIONS_HINT_METRICS;
-    if (extra_flags & CAIRO_FT_OPTIONS_EMBOLDEN)
-        ft_font_face->ft_options.extra_flags |= CAIRO_FT_OPTIONS_EMBOLDEN;
-}
-#endif
-
index a0f09e5..29c43c9 100644 (file)
@@ -56,6 +56,42 @@ cairo_public cairo_font_face_t *
 cairo_ft_font_face_create_for_ft_face (FT_Face         face,
                                       int             load_flags);
 
+/**
+ * cairo_ft_synthesize_t:
+ * @CAIRO_FT_SYNTHESIZE_BOLD: Embolden the glyphs (redraw with a pixel offset)
+ * @CAIRO_FT_SYNTHESIZE_OBLIQUE: Slant the glyph outline by 12 degrees to the
+ * right.
+ *
+ * A set of synthesis options to control how FreeType renders the glyphs
+ * for a particular font face.
+ *
+ * Individual synthesis features of a #cairo_ft_font_face_t can be set
+ * using cairo_ft_font_face_set_synthesize(), or disabled using
+ * cairo_ft_font_face_unset_synthesize(). The currently enabled set of
+ * synthesis options can be queried with cairo_ft_font_face_get_synthesize().
+ *
+ * Note: that when synthesizing glyphs, the font metrics returned will only
+ * be estimates.
+ *
+ * Since: 1.12
+ **/
+typedef enum {
+    CAIRO_FT_SYNTHESIZE_BOLD = 1 << 0,
+    CAIRO_FT_SYNTHESIZE_OBLIQUE = 1 << 1
+} cairo_ft_synthesize_t;
+
+cairo_public void
+cairo_ft_font_face_set_synthesize (cairo_font_face_t *font_face,
+                                  unsigned int synth_flags);
+
+cairo_public void
+cairo_ft_font_face_unset_synthesize (cairo_font_face_t *font_face,
+                                    unsigned int synth_flags);
+
+cairo_public unsigned int
+cairo_ft_font_face_get_synthesize (cairo_font_face_t *font_face);
+
+
 cairo_public FT_Face
 cairo_ft_scaled_font_lock_face (cairo_scaled_font_t *scaled_font);
 
@@ -73,23 +109,6 @@ cairo_ft_font_options_substitute (const cairo_font_options_t *options,
 
 #endif
 
-#ifndef TIZEN_ENABLE_SET_EXTRA_FLAGS
-/* For support to set extra_flags from application */
-#define TIZEN_ENABLE_SET_EXTRA_FLAGS
-#endif
-
-#ifdef TIZEN_ENABLE_SET_EXTRA_FLAGS
-/* This enum is moved from cairo-ft-font.c to cairo-ft.h for support to set extra_flags from application */
-typedef enum _cairo_ft_extra_flags {
-    CAIRO_FT_OPTIONS_HINT_METRICS = (1 << 0),
-    CAIRO_FT_OPTIONS_EMBOLDEN = (1 << 1)
-} cairo_ft_extra_flags_t;
-
-/* Set extra_flags to cairo_ft_font_face_t's ft_options from application */
-cairo_public void cairo_ft_font_option_set_extra_flags (cairo_font_face_t * font_face,
-                               cairo_ft_extra_flags_t extra_flags);
-#endif
-
 CAIRO_END_DECLS
 
 #else  /* CAIRO_HAS_FT_FONT */
index 5bce04d..bc3f99d 100644 (file)
@@ -4,6 +4,7 @@
  * Copyright Â© 2009 Chris Wilson
  * Copyright Â© 2005,2010 Red Hat, Inc
  * Copyright Â© 2011 Linaro Limited
+ * Copyright Â© 2011 Samsung Electronics
  *
  * This library is free software; you can redistribute it and/or
  * modify it either under the terms of the GNU Lesser General Public
@@ -38,6 +39,8 @@
  *     Chris Wilson <chris@chris-wilson.co.uk>
  *     Eric Anholt <eric@anholt.net>
  *     Alexandros Frantzis <alexandros.frantzis@linaro.org>
+ *     Henry Song <hsong@sisa.samsung.com>
+ *     Martin Robinson <mrobinson@igalia.com>
  */
 
 #include "cairoint.h"
 #include "cairo-clip-private.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-traps-private.h"
 
 cairo_int_status_t
 _cairo_gl_composite_set_source (cairo_gl_composite_t *setup,
                                const cairo_pattern_t *pattern,
-                                int src_x, int src_y,
-                                int dst_x, int dst_y,
-                                int width, int height)
+                               const cairo_rectangle_int_t *sample,
+                               const cairo_rectangle_int_t *extents,
+                               cairo_bool_t use_color_attribute)
 {
     _cairo_gl_operand_destroy (&setup->src);
-    return _cairo_gl_operand_init (&setup->src, pattern,
-                                   setup->dst,
-                                   src_x, src_y,
-                                   dst_x, dst_y,
-                                   width, height);
+    return _cairo_gl_operand_init (&setup->src, pattern, setup->dst,
+                                  sample, extents, use_color_attribute);
 }
 
 void
@@ -83,19 +84,28 @@ _cairo_gl_composite_set_solid_source (cairo_gl_composite_t *setup,
 cairo_int_status_t
 _cairo_gl_composite_set_mask (cairo_gl_composite_t *setup,
                              const cairo_pattern_t *pattern,
-                              int src_x, int src_y,
-                              int dst_x, int dst_y,
-                              int width, int height)
+                             const cairo_rectangle_int_t *sample,
+                             const cairo_rectangle_int_t *extents)
 {
+    cairo_int_status_t status;
+
     _cairo_gl_operand_destroy (&setup->mask);
     if (pattern == NULL)
         return CAIRO_STATUS_SUCCESS;
 
-    return _cairo_gl_operand_init (&setup->mask, pattern,
-                                   setup->dst,
-                                   src_x, src_y,
-                                   dst_x, dst_y,
-                                   width, height);
+    /* XXX: shoot me - we need to set component_alpha to be true
+       if op is CAIRO_OPERATOR_CLEAR AND pattern is a surface_pattern
+     */
+    status = _cairo_gl_operand_init (&setup->mask, pattern, setup->dst,
+                                     sample, extents, FALSE);
+    if (unlikely (status))
+       return status;
+
+    if (setup->op == CAIRO_OPERATOR_CLEAR &&
+       !  _cairo_pattern_is_opaque (pattern, sample))
+       setup->mask.texture.attributes.has_component_alpha = TRUE;
+
+    return status;
 }
 
 void
@@ -120,6 +130,13 @@ _cairo_gl_composite_set_clip_region (cairo_gl_composite_t *setup,
     setup->clip_region = clip_region;
 }
 
+void
+_cairo_gl_composite_set_clip (cairo_gl_composite_t *setup,
+                             cairo_clip_t *clip)
+{
+    setup->clip = clip;
+}
+
 static void
 _cairo_gl_composite_bind_to_shader (cairo_gl_context_t   *ctx,
                                    cairo_gl_composite_t *setup)
@@ -156,34 +173,42 @@ _cairo_gl_texture_set_filter (cairo_gl_context_t *ctx,
 static void
 _cairo_gl_texture_set_extend (cairo_gl_context_t *ctx,
                               GLuint              target,
-                              cairo_extend_t      extend)
+                              cairo_extend_t      extend,
+                              cairo_bool_t           use_atlas)
 {
+    GLint wrap_mode;
     assert (! _cairo_gl_device_requires_power_of_two_textures (&ctx->base) ||
             (extend != CAIRO_EXTEND_REPEAT && extend != CAIRO_EXTEND_REFLECT));
 
     switch (extend) {
     case CAIRO_EXTEND_NONE:
-       if (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES) {
-           glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-           glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-       }
-       else {
-           glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
-           glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
-       }
+       if (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES)
+           wrap_mode = GL_CLAMP_TO_EDGE;
+       else
+           wrap_mode = GL_CLAMP_TO_BORDER;
        break;
     case CAIRO_EXTEND_PAD:
-       glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-       glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+       wrap_mode = GL_CLAMP_TO_EDGE;
        break;
     case CAIRO_EXTEND_REPEAT:
-       glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_REPEAT);
-       glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_REPEAT);
+       if (ctx->has_npot_repeat)
+           wrap_mode = GL_REPEAT;
+       else
+           wrap_mode = GL_CLAMP_TO_EDGE;
        break;
     case CAIRO_EXTEND_REFLECT:
-       glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
-       glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
+       if (ctx->has_npot_repeat)
+           wrap_mode = GL_MIRRORED_REPEAT;
+       else
+           wrap_mode = GL_CLAMP_TO_EDGE;
        break;
+    default:
+       wrap_mode = 0;
+    }
+
+    if (likely (wrap_mode)) {
+       glTexParameteri (target, GL_TEXTURE_WRAP_S, wrap_mode);
+       glTexParameteri (target, GL_TEXTURE_WRAP_T, wrap_mode);
     }
 }
 
@@ -197,15 +222,18 @@ _cairo_gl_context_setup_operand (cairo_gl_context_t *ctx,
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
     cairo_bool_t needs_setup;
+    cairo_bool_t needs_flush = TRUE;
+    void *attrib_location = (void *) ((uintptr_t) vertex_offset);
 
     /* XXX: we need to do setup when switching from shaders
      * to no shaders (or back) */
     needs_setup = ctx->vertex_size != vertex_size;
     needs_setup |= _cairo_gl_operand_needs_setup (&ctx->operands[tex_unit],
                                                  operand,
-                                                 vertex_offset);
+                                                 vertex_offset,
+                                                 &needs_flush);
 
-    if (needs_setup) {
+    if (needs_setup && needs_flush) {
         _cairo_gl_composite_flush (ctx);
         _cairo_gl_context_destroy_operand (ctx, tex_unit);
     }
@@ -216,6 +244,9 @@ _cairo_gl_context_setup_operand (cairo_gl_context_t *ctx,
     if (! needs_setup)
         return;
 
+    if (! ctx->has_map_buffer)
+       attrib_location = (void *) (ctx->vb_mem + vertex_offset);
+
     switch (operand->type) {
     default:
     case CAIRO_GL_OPERAND_COUNT:
@@ -224,19 +255,39 @@ _cairo_gl_context_setup_operand (cairo_gl_context_t *ctx,
         break;
         /* fall through */
     case CAIRO_GL_OPERAND_CONSTANT:
+        if (operand->use_color_attribute) {
+            dispatch->VertexAttribPointer (CAIRO_GL_COLOR_ATTRIB_INDEX, 4,
+                                           GL_FLOAT, GL_FALSE, vertex_size,
+                                           attrib_location);
+            dispatch->EnableVertexAttribArray (CAIRO_GL_COLOR_ATTRIB_INDEX);
+        }
         break;
     case CAIRO_GL_OPERAND_TEXTURE:
         glActiveTexture (GL_TEXTURE0 + tex_unit);
         glBindTexture (ctx->tex_target, operand->texture.tex);
         _cairo_gl_texture_set_extend (ctx, ctx->tex_target,
-                                      operand->texture.attributes.extend);
+                                      operand->texture.attributes.extend,
+                                      operand->texture.use_atlas);
         _cairo_gl_texture_set_filter (ctx, ctx->tex_target,
                                       operand->texture.attributes.filter);
 
        dispatch->VertexAttribPointer (CAIRO_GL_TEXCOORD0_ATTRIB_INDEX + tex_unit, 2,
                                        GL_FLOAT, GL_FALSE, vertex_size,
-                                       (void *) (uintptr_t) vertex_offset);
+                                       attrib_location);
        dispatch->EnableVertexAttribArray (CAIRO_GL_TEXCOORD0_ATTRIB_INDEX + tex_unit);
+
+       if (operand->texture.use_atlas) {
+           dispatch->VertexAttribPointer (CAIRO_GL_START_COORD0_ATTRIB_INDEX + tex_unit,
+                                          2, GL_FLOAT, GL_FALSE,
+                                          vertex_size,
+                                          (char *)attrib_location + 2 * sizeof (float));
+           dispatch->EnableVertexAttribArray (CAIRO_GL_START_COORD0_ATTRIB_INDEX + tex_unit);
+           dispatch->VertexAttribPointer (CAIRO_GL_STOP_COORD0_ATTRIB_INDEX + tex_unit,
+                                          2, GL_FLOAT, GL_FALSE,
+                                          vertex_size,
+                                          (char *)attrib_location + 4 * sizeof (float));
+           dispatch->EnableVertexAttribArray (CAIRO_GL_STOP_COORD0_ATTRIB_INDEX + tex_unit);
+       }
         break;
     case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
@@ -244,12 +295,13 @@ _cairo_gl_context_setup_operand (cairo_gl_context_t *ctx,
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT:
         glActiveTexture (GL_TEXTURE0 + tex_unit);
         glBindTexture (ctx->tex_target, operand->gradient.gradient->tex);
-        _cairo_gl_texture_set_extend (ctx, ctx->tex_target, operand->gradient.extend);
+        _cairo_gl_texture_set_extend (ctx, ctx->tex_target,
+                                     operand->gradient.extend, FALSE);
         _cairo_gl_texture_set_filter (ctx, ctx->tex_target, CAIRO_FILTER_BILINEAR);
 
        dispatch->VertexAttribPointer (CAIRO_GL_TEXCOORD0_ATTRIB_INDEX + tex_unit, 2,
                                       GL_FLOAT, GL_FALSE, vertex_size,
-                                      (void *) (uintptr_t) vertex_offset);
+                                      attrib_location);
        dispatch->EnableVertexAttribArray (CAIRO_GL_TEXCOORD0_ATTRIB_INDEX + tex_unit);
        break;
     }
@@ -261,11 +313,16 @@ _cairo_gl_context_setup_spans (cairo_gl_context_t *ctx,
                               unsigned int        vertex_offset)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
+    void *attrib_location = (void *) ((uintptr_t) vertex_offset);
+
+    if (! ctx->has_map_buffer)
+       attrib_location = (void *) (ctx->vb_mem + vertex_offset);
 
-    dispatch->VertexAttribPointer (CAIRO_GL_COLOR_ATTRIB_INDEX, 4,
+    dispatch->VertexAttribPointer (CAIRO_GL_COVERAGE_ATTRIB_INDEX, 4,
                                   GL_UNSIGNED_BYTE, GL_TRUE, vertex_size,
-                                  (void *) (uintptr_t) vertex_offset);
-    dispatch->EnableVertexAttribArray (CAIRO_GL_COLOR_ATTRIB_INDEX);
+                                  attrib_location);
+    dispatch->EnableVertexAttribArray (CAIRO_GL_COVERAGE_ATTRIB_INDEX);
+    ctx->spans = TRUE;
 }
 
 void
@@ -273,7 +330,9 @@ _cairo_gl_context_destroy_operand (cairo_gl_context_t *ctx,
                                    cairo_gl_tex_t tex_unit)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
-    assert (_cairo_gl_context_is_flushed (ctx));
+
+    if  (!_cairo_gl_context_is_flushed (ctx))
+       _cairo_gl_composite_flush (ctx);
 
     switch (ctx->operands[tex_unit].type) {
     default:
@@ -283,9 +342,15 @@ _cairo_gl_context_destroy_operand (cairo_gl_context_t *ctx,
         break;
         /* fall through */
     case CAIRO_GL_OPERAND_CONSTANT:
+        if (ctx->operands[tex_unit].use_color_attribute)
+            ctx->dispatch.DisableVertexAttribArray (CAIRO_GL_COLOR_ATTRIB_INDEX);
         break;
     case CAIRO_GL_OPERAND_TEXTURE:
         dispatch->DisableVertexAttribArray (CAIRO_GL_TEXCOORD0_ATTRIB_INDEX + tex_unit);
+       if (ctx->operands[tex_unit].texture.use_atlas) {
+           dispatch->DisableVertexAttribArray (CAIRO_GL_START_COORD0_ATTRIB_INDEX + tex_unit);
+           dispatch->DisableVertexAttribArray (CAIRO_GL_STOP_COORD0_ATTRIB_INDEX + tex_unit);
+       }
         break;
     case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
@@ -462,15 +527,192 @@ _cairo_gl_composite_begin_component_alpha  (cairo_gl_context_t *ctx,
     return CAIRO_STATUS_SUCCESS;
 }
 
+void
+_cairo_gl_scissor_to_extents (cairo_gl_surface_t       *surface,
+                             const cairo_rectangle_int_t       *extents)
+{
+    int x1, y1, height;
+
+    x1 = extents->x;
+    y1 = extents->y;
+    height = extents->height;
+
+    if (_cairo_gl_surface_is_texture (surface) == FALSE)
+       y1 = surface->height - (y1 + height);
+    glScissor (x1, y1, extents->width, height);
+    glEnable (GL_SCISSOR_TEST);
+}
+
+static void
+_scissor_to_box (cairo_gl_surface_t    *surface,
+                const cairo_box_t      *box)
+{
+    double x1, y1, x2, y2, height;
+    _cairo_box_to_doubles (box, &x1, &y1, &x2, &y2);
+
+    height = y2 - y1;
+    if (_cairo_gl_surface_is_texture (surface) == FALSE)
+       y1 = surface->height - (y1 + height);
+    glScissor (x1, y1, x2 - x1, height);
+    glEnable (GL_SCISSOR_TEST);
+}
+
+static void
+_cairo_gl_composite_setup_vbo (cairo_gl_context_t *ctx,
+                              unsigned int size_per_vertex)
+{
+    void *attrib_location = NULL;
+
+    if (! ctx->has_map_buffer)
+       attrib_location = (void *) ctx->vb_mem;
+
+    if (ctx->vertex_size != size_per_vertex)
+        _cairo_gl_composite_flush (ctx);
+
+    if (_cairo_gl_context_is_flushed (ctx)) {
+       if (ctx->has_map_buffer)
+        ctx->dispatch.BindBuffer (GL_ARRAY_BUFFER, ctx->vbo);
+
+       ctx->dispatch.VertexAttribPointer (CAIRO_GL_VERTEX_ATTRIB_INDEX, 2,
+                                          GL_FLOAT, GL_FALSE, size_per_vertex, attrib_location);
+       ctx->dispatch.EnableVertexAttribArray (CAIRO_GL_VERTEX_ATTRIB_INDEX);
+    }
+    ctx->vertex_size = size_per_vertex;
+}
+
+void
+_disable_stencil_buffer (void)
+{
+    if (glIsEnabled (GL_STENCIL_TEST))
+        glDisable (GL_STENCIL_TEST);
+    glDepthMask (GL_FALSE);
+}
+
+void
+_disable_scissor_buffer (void)
+{
+    if (glIsEnabled (GL_SCISSOR_TEST))
+        glDisable (GL_SCISSOR_TEST);
+}
+
+static cairo_int_status_t
+_cairo_gl_composite_setup_painted_clipping (cairo_gl_composite_t *setup,
+                                           cairo_gl_context_t *ctx,
+                                           int vertex_size,
+                                           cairo_bool_t equal_clip)
+{
+    cairo_int_status_t status = CAIRO_INT_STATUS_SUCCESS;
+
+    cairo_gl_surface_t *dst = setup->dst;
+    cairo_clip_t *clip = setup->clip;
+    cairo_traps_t traps;
+    const cairo_rectangle_int_t *clip_extents;
+
+    if (clip->num_boxes == 1 && clip->path == NULL) {
+       _scissor_to_box (dst, &clip->boxes[0]);
+       goto disable_stencil_buffer_and_return;
+    }
+
+    if (! _cairo_gl_ensure_stencil (ctx, setup->dst)) {
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+       goto disable_stencil_buffer_and_return;
+    }
+
+    glDepthMask (GL_TRUE);
+    glEnable (GL_STENCIL_TEST);
+    clip_extents = _cairo_clip_get_extents ((const cairo_clip_t *)clip);
+    _cairo_gl_scissor_to_extents (dst, clip_extents);
+
+    if (equal_clip)
+       return CAIRO_INT_STATUS_SUCCESS;
+
+    glClearStencil (0);
+    glClear (GL_STENCIL_BUFFER_BIT);
+    glStencilOp (GL_REPLACE, GL_REPLACE, GL_REPLACE);
+    glStencilFunc (GL_EQUAL, 1, 0xffffffff);
+    glColorMask (0, 0, 0, 0);
+
+    _cairo_traps_init (&traps);
+    status = _cairo_gl_msaa_compositor_draw_clip (ctx, setup, clip, &traps);
+    _cairo_traps_fini (&traps);
+
+    if (unlikely (status)) {
+       glColorMask (1, 1, 1, 1);
+       goto disable_stencil_buffer_and_return;
+    }
+
+    /* We want to only render to the stencil buffer, so draw everything now.
+       Flushing also unbinds the VBO, which we want to rebind for regular
+       drawing. */
+    _cairo_gl_composite_flush (ctx);
+    _cairo_gl_composite_setup_vbo (ctx, vertex_size);
+
+    glColorMask (1, 1, 1, 1);
+    glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
+    glStencilFunc (GL_EQUAL, 1, 0xffffffff);
+    return CAIRO_INT_STATUS_SUCCESS;
+
+disable_stencil_buffer_and_return:
+    _disable_stencil_buffer ();
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_composite_setup_clipping (cairo_gl_composite_t *setup,
+                                   cairo_gl_context_t *ctx,
+                                   int vertex_size)
+{
+    cairo_bool_t same_clip;
+
+    if (! ctx->clip && ! setup->clip && ! ctx->clip_region)
+       goto finish;
+
+    same_clip = _cairo_clip_equal (ctx->clip, setup->clip);
+    if (! _cairo_gl_context_is_flushed (ctx) &&
+       (! cairo_region_equal (ctx->clip_region, setup->clip_region) ||
+        ! same_clip))
+       _cairo_gl_composite_flush (ctx);
+
+    cairo_region_destroy (ctx->clip_region);
+    ctx->clip_region = cairo_region_reference (setup->clip_region);
+
+    assert (!setup->clip_region || !setup->clip);
+
+    if (! same_clip) {
+       _cairo_clip_destroy (ctx->clip);
+       ctx->clip = _cairo_clip_copy (setup->clip);
+    }
+
+    if (ctx->clip_region) {
+       _disable_stencil_buffer ();
+       glEnable (GL_SCISSOR_TEST);
+       return CAIRO_INT_STATUS_SUCCESS;
+    }
+
+    if (setup->clip)
+           return _cairo_gl_composite_setup_painted_clipping (setup, ctx,
+                                                           vertex_size,
+                                                           same_clip);
+
+finish:
+    _disable_stencil_buffer ();
+    _disable_scissor_buffer ();
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+
 cairo_status_t
-_cairo_gl_composite_begin (cairo_gl_composite_t *setup,
-                           cairo_gl_context_t **ctx_out)
+_cairo_gl_composite_begin_multisample (cairo_gl_composite_t *setup,
+                                      cairo_gl_context_t **ctx_out,
+                                      cairo_bool_t multisampling)
 {
     unsigned int dst_size, src_size, mask_size, vertex_size;
     cairo_gl_context_t *ctx;
     cairo_status_t status;
     cairo_bool_t component_alpha;
     cairo_gl_shader_t *shader;
+    cairo_operator_t op = setup->op;
+    cairo_surface_t *mask_surface = NULL;
 
     assert (setup->dst);
 
@@ -478,10 +720,13 @@ _cairo_gl_composite_begin (cairo_gl_composite_t *setup,
     if (unlikely (status))
        return status;
 
+    _cairo_gl_context_set_destination (ctx, setup->dst, multisampling);
+
     glEnable (GL_BLEND);
 
-    component_alpha = ((setup->mask.type == CAIRO_GL_OPERAND_TEXTURE) &&
-                       setup->mask.texture.attributes.has_component_alpha);
+    component_alpha =
+       setup->mask.type == CAIRO_GL_OPERAND_TEXTURE &&
+       setup->mask.texture.attributes.has_component_alpha;
 
     /* Do various magic for component alpha */
     if (component_alpha) {
@@ -513,34 +758,38 @@ _cairo_gl_composite_begin (cairo_gl_composite_t *setup,
     status = CAIRO_STATUS_SUCCESS;
 
     dst_size  = 2 * sizeof (GLfloat);
-    src_size  = _cairo_gl_operand_get_vertex_size (setup->src.type);
-    mask_size = _cairo_gl_operand_get_vertex_size (setup->mask.type);
-
+    src_size  = _cairo_gl_operand_get_vertex_size (&setup->src);
+    mask_size = _cairo_gl_operand_get_vertex_size (&setup->mask);
     vertex_size = dst_size + src_size + mask_size;
-    if (ctx->vertex_size != vertex_size) {
-        _cairo_gl_composite_flush (ctx);
-    }
-
-    _cairo_gl_context_set_destination (ctx, setup->dst);
 
-    if (_cairo_gl_context_is_flushed (ctx)) {
-        ctx->dispatch.BindBuffer (GL_ARRAY_BUFFER, ctx->vbo);
+    if (setup->spans)
+           vertex_size += sizeof (GLfloat);
 
-       ctx->dispatch.VertexAttribPointer (CAIRO_GL_VERTEX_ATTRIB_INDEX, 2,
-                                          GL_FLOAT, GL_FALSE, vertex_size, NULL);
-       ctx->dispatch.EnableVertexAttribArray (CAIRO_GL_VERTEX_ATTRIB_INDEX);
-    }
+    _cairo_gl_composite_setup_vbo (ctx, vertex_size);
 
     _cairo_gl_context_setup_operand (ctx, CAIRO_GL_TEX_SOURCE, &setup->src, vertex_size, dst_size);
     _cairo_gl_context_setup_operand (ctx, CAIRO_GL_TEX_MASK, &setup->mask, vertex_size, dst_size + src_size);
     if (setup->spans)
        _cairo_gl_context_setup_spans (ctx, vertex_size, dst_size + src_size + mask_size);
-    else
-       ctx->dispatch.DisableVertexAttribArray (CAIRO_GL_COLOR_ATTRIB_INDEX);
+    else {
+        ctx->dispatch.DisableVertexAttribArray (CAIRO_GL_COVERAGE_ATTRIB_INDEX);
+        ctx->spans = FALSE;
+    }
 
-    _cairo_gl_set_operator (ctx, setup->op, component_alpha);
+    /* XXX: Shoot me - we have converted CLEAR to DEST_OUT,
+       so the dst_factor would be GL_ONE_MINUS_SRC_ALPHA, if the
+       mask is a surface and mask content not content_alpha, we want to use
+       GL_ONE_MINUS_SRC_COLOR, otherwise, we use GL_ONE_MINUS_SRC_ALPHA
+     */
+    if (setup->mask.type == CAIRO_GL_OPERAND_TEXTURE)
+       mask_surface = &setup->mask.texture.surface->base;
+    if (op == CAIRO_OPERATOR_CLEAR &&
+       component_alpha &&
+       mask_surface != NULL &&
+       cairo_surface_get_content (mask_surface) == CAIRO_CONTENT_ALPHA)
+       component_alpha = FALSE;
 
-    ctx->vertex_size = vertex_size;
+    _cairo_gl_set_operator (ctx, setup->op, component_alpha);
 
     if (_cairo_gl_context_is_flushed (ctx)) {
         if (ctx->pre_shader) {
@@ -551,15 +800,9 @@ _cairo_gl_composite_begin (cairo_gl_composite_t *setup,
         _cairo_gl_composite_bind_to_shader (ctx, setup);
     }
 
-    if (! _cairo_gl_context_is_flushed (ctx) &&
-        ! cairo_region_equal (ctx->clip_region, setup->clip_region))
-        _cairo_gl_composite_flush (ctx);
-    cairo_region_destroy (ctx->clip_region);
-    ctx->clip_region = cairo_region_reference (setup->clip_region);
-    if (ctx->clip_region)
-       glEnable (GL_SCISSOR_TEST);
-    else
-       glDisable (GL_SCISSOR_TEST);
+    status = _cairo_gl_composite_setup_clipping (setup, ctx, vertex_size);
+    if (unlikely (status))
+       goto FAIL;
 
     *ctx_out = ctx;
 
@@ -570,6 +813,60 @@ FAIL:
     return status;
 }
 
+cairo_status_t
+_cairo_gl_composite_begin (cairo_gl_composite_t *setup,
+                           cairo_gl_context_t **ctx_out)
+{
+    return _cairo_gl_composite_begin_multisample (setup, ctx_out, FALSE);
+}
+
+static inline void
+_cairo_gl_composite_draw_tristrip (cairo_gl_context_t *ctx)
+{
+    cairo_array_t* indices = &ctx->tristrip_indices;
+    const unsigned short *indices_array = _cairo_array_index_const (indices, 0);
+
+
+    if (ctx->pre_shader) {
+       cairo_gl_shader_t *prev_shader = ctx->current_shader;
+
+       _cairo_gl_set_shader (ctx, ctx->pre_shader);
+       _cairo_gl_set_operator (ctx, CAIRO_OPERATOR_DEST_OUT, TRUE);
+       glDrawElements (GL_TRIANGLE_STRIP, _cairo_array_num_elements (indices), GL_UNSIGNED_SHORT, indices_array);
+
+       _cairo_gl_set_shader (ctx, prev_shader);
+       _cairo_gl_set_operator (ctx, CAIRO_OPERATOR_ADD, TRUE);
+    }
+
+    glDrawElements (GL_TRIANGLE_STRIP, _cairo_array_num_elements (indices), GL_UNSIGNED_SHORT, indices_array);
+    _cairo_array_truncate (indices, 0);
+}
+
+static inline void
+_cairo_gl_composite_draw_line (cairo_gl_context_t *ctx)
+{
+    GLenum type = GL_LINE_STRIP;
+    cairo_array_t* indices = &ctx->tristrip_indices;
+    const unsigned short *indices_array = _cairo_array_index_const (indices, 0);
+
+    if (ctx->draw_mode == CAIRO_GL_LINES)
+       type = GL_LINES;
+
+    if (ctx->pre_shader) {
+       cairo_gl_shader_t *prev_shader = ctx->current_shader;
+
+       _cairo_gl_set_shader (ctx, ctx->pre_shader);
+       _cairo_gl_set_operator (ctx, CAIRO_OPERATOR_DEST_OUT, TRUE);
+       glDrawElements (type, _cairo_array_num_elements (indices), GL_UNSIGNED_SHORT, indices_array);
+
+       _cairo_gl_set_shader (ctx, prev_shader);
+       _cairo_gl_set_operator (ctx, CAIRO_OPERATOR_ADD, TRUE);
+    }
+
+    glDrawElements (type, _cairo_array_num_elements (indices), GL_UNSIGNED_SHORT, indices_array);
+    _cairo_array_truncate (indices, 0);
+}
+
 static inline void
 _cairo_gl_composite_draw (cairo_gl_context_t *ctx,
                          unsigned int count)
@@ -589,26 +886,35 @@ _cairo_gl_composite_draw (cairo_gl_context_t *ctx,
     }
 }
 
+static void
+_cairo_gl_composite_unmap_vertex_buffer (cairo_gl_context_t *ctx)
+{
+    if (ctx->has_map_buffer)
+       ctx->dispatch.UnmapBuffer (GL_ARRAY_BUFFER);
+
+    ctx->vb = NULL;
+    ctx->vb_offset = 0;
+}
+
 void
 _cairo_gl_composite_flush (cairo_gl_context_t *ctx)
 {
     unsigned int count;
+    int i;
 
     if (_cairo_gl_context_is_flushed (ctx))
         return;
 
     count = ctx->vb_offset / ctx->vertex_size;
-
-    if (ctx->has_map_buffer)
-       ctx->dispatch.UnmapBuffer (GL_ARRAY_BUFFER);
-    else
-       ctx->dispatch.BufferData (GL_ARRAY_BUFFER, ctx->vb_offset,
-                                 ctx->vb, GL_DYNAMIC_DRAW);
-
-    ctx->vb = NULL;
-    ctx->vb_offset = 0;
-
-    if (ctx->clip_region) {
+    _cairo_gl_composite_unmap_vertex_buffer (ctx);
+
+    if ( _cairo_array_num_elements (&ctx->tristrip_indices) > 0) {
+       if (ctx->draw_mode == CAIRO_GL_LINE_STRIP ||
+           ctx->draw_mode == CAIRO_GL_LINES)
+           _cairo_gl_composite_draw_line (ctx);
+       else
+           _cairo_gl_composite_draw_tristrip (ctx);
+    } else if (ctx->clip_region) {
        int i, num_rectangles = cairo_region_num_rectangles (ctx->clip_region);
 
        for (i = 0; i < num_rectangles; i++) {
@@ -622,14 +928,34 @@ _cairo_gl_composite_flush (cairo_gl_context_t *ctx)
     } else {
         _cairo_gl_composite_draw (ctx, count);
     }
+
+    for (i = 0; i < ARRAY_LENGTH (&ctx->glyph_cache); i++)
+       _cairo_gl_glyph_cache_unlock (&ctx->glyph_cache[i]);
+
+    _cairo_gl_image_cache_unlock (ctx);
 }
 
+typedef enum cairo_gl_geometry {
+    CAIRO_GL_GEOMETRY_TYPE_TRIANGLES,
+    CAIRO_GL_GEOMETRY_TYPE_TRISTRIPS
+} cairo_gl_geometry_t;
+
 static void
 _cairo_gl_composite_prepare_buffer (cairo_gl_context_t *ctx,
-                                    unsigned int n_vertices)
+                                   unsigned int n_vertices,
+                                   cairo_gl_geometry_t geometry_type)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
 
+    size_t tristrip_indices =_cairo_array_num_elements (&ctx->tristrip_indices);
+    if (geometry_type == CAIRO_GL_GEOMETRY_TYPE_TRIANGLES &&
+       tristrip_indices != 0) {
+       _cairo_gl_composite_flush (ctx);
+    } else if (geometry_type == CAIRO_GL_GEOMETRY_TYPE_TRISTRIPS &&
+            ! _cairo_gl_context_is_flushed (ctx) && tristrip_indices == 0) {
+       _cairo_gl_composite_flush (ctx);
+    }
+
     if (ctx->vb_offset + n_vertices * ctx->vertex_size > CAIRO_GL_VBO_SIZE)
        _cairo_gl_composite_flush (ctx);
 
@@ -646,6 +972,61 @@ _cairo_gl_composite_prepare_buffer (cairo_gl_context_t *ctx,
 }
 
 static inline void
+_cairo_gl_composite_operand_emit (cairo_gl_operand_t *operand,
+                        GLfloat ** vb,
+                        GLfloat x,
+                        GLfloat y)
+{
+    switch (operand->type) {
+    default:
+    case CAIRO_GL_OPERAND_COUNT:
+        ASSERT_NOT_REACHED;
+    case CAIRO_GL_OPERAND_NONE:
+        break;
+    case CAIRO_GL_OPERAND_CONSTANT:
+        if (operand->use_color_attribute) {
+            *(*vb)++ = operand->constant.color[0];
+            *(*vb)++ = operand->constant.color[1];
+            *(*vb)++ = operand->constant.color[2];
+            *(*vb)++ = operand->constant.color[3];
+        }
+        break;
+    case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
+    case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
+    case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
+    case CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT:
+        {
+           double s = x;
+           double t = y;
+
+           cairo_matrix_transform_point (&operand->gradient.m, &s, &t);
+
+           *(*vb)++ = s;
+           *(*vb)++ = t;
+        }
+       break;
+    case CAIRO_GL_OPERAND_TEXTURE:
+        {
+            cairo_surface_attributes_t *src_attributes = &operand->texture.attributes;
+            double s = x;
+            double t = y;
+
+            cairo_matrix_transform_point (&src_attributes->matrix, &s, &t);
+            *(*vb)++ = s;
+            *(*vb)++ = t;
+
+           if (operand->texture.use_atlas) {
+               *(*vb)++ = operand->texture.p1.x;
+               *(*vb)++ = operand->texture.p1.y;
+               *(*vb)++ = operand->texture.p2.x;
+               *(*vb)++ = operand->texture.p2.y;
+           }
+        }
+        break;
+    }
+}
+
+static inline void
 _cairo_gl_composite_emit_vertex (cairo_gl_context_t *ctx,
                                  GLfloat x,
                                  GLfloat y,
@@ -656,8 +1037,8 @@ _cairo_gl_composite_emit_vertex (cairo_gl_context_t *ctx,
     *vb++ = x;
     *vb++ = y;
 
-    _cairo_gl_operand_emit (&ctx->operands[CAIRO_GL_TEX_SOURCE], &vb, x, y);
-    _cairo_gl_operand_emit (&ctx->operands[CAIRO_GL_TEX_MASK  ], &vb, x, y);
+    _cairo_gl_composite_operand_emit (&ctx->operands[CAIRO_GL_TEX_SOURCE], &vb, x, y);
+    _cairo_gl_composite_operand_emit (&ctx->operands[CAIRO_GL_TEX_MASK  ], &vb, x, y);
 
     if (ctx->spans) {
        union fi {
@@ -675,6 +1056,17 @@ _cairo_gl_composite_emit_vertex (cairo_gl_context_t *ctx,
     ctx->vb_offset += ctx->vertex_size;
 }
 
+static inline void
+_cairo_gl_composite_emit_point (cairo_gl_context_t     *ctx,
+                               const cairo_point_t     *point,
+                               uint8_t alpha)
+{
+    _cairo_gl_composite_emit_vertex (ctx,
+                                    _cairo_fixed_to_double (point->x),
+                                    _cairo_fixed_to_double (point->y),
+                                    alpha);
+}
+
 void
 _cairo_gl_composite_emit_rect (cairo_gl_context_t *ctx,
                                GLfloat x1,
@@ -683,7 +1075,13 @@ _cairo_gl_composite_emit_rect (cairo_gl_context_t *ctx,
                                GLfloat y2,
                                uint8_t alpha)
 {
-    _cairo_gl_composite_prepare_buffer (ctx, 6);
+    if (ctx->draw_mode != CAIRO_GL_VERTEX) {
+       _cairo_gl_composite_flush (ctx);
+       ctx->draw_mode = CAIRO_GL_VERTEX;
+    }
+
+    _cairo_gl_composite_prepare_buffer (ctx, 6,
+                                       CAIRO_GL_GEOMETRY_TYPE_TRIANGLES);
 
     _cairo_gl_composite_emit_vertex (ctx, x1, y1, alpha);
     _cairo_gl_composite_emit_vertex (ctx, x2, y1, alpha);
@@ -706,7 +1104,7 @@ _cairo_gl_composite_emit_glyph_vertex (cairo_gl_context_t *ctx,
     *vb++ = x;
     *vb++ = y;
 
-    _cairo_gl_operand_emit (&ctx->operands[CAIRO_GL_TEX_SOURCE], &vb, x, y);
+    _cairo_gl_composite_operand_emit (&ctx->operands[CAIRO_GL_TEX_SOURCE], &vb, x, y);
 
     *vb++ = glyph_x;
     *vb++ = glyph_y;
@@ -725,7 +1123,13 @@ _cairo_gl_composite_emit_glyph (cairo_gl_context_t *ctx,
                                 GLfloat glyph_x2,
                                 GLfloat glyph_y2)
 {
-    _cairo_gl_composite_prepare_buffer (ctx, 6);
+    if (ctx->draw_mode != CAIRO_GL_VERTEX) {
+       _cairo_gl_composite_flush (ctx);
+       ctx->draw_mode = CAIRO_GL_VERTEX;
+    }
+
+    _cairo_gl_composite_prepare_buffer (ctx, 6,
+                                       CAIRO_GL_GEOMETRY_TYPE_TRIANGLES);
 
     _cairo_gl_composite_emit_glyph_vertex (ctx, x1, y1, glyph_x1, glyph_y1);
     _cairo_gl_composite_emit_glyph_vertex (ctx, x2, y1, glyph_x2, glyph_y1);
@@ -747,8 +1151,7 @@ cairo_status_t
 _cairo_gl_composite_init (cairo_gl_composite_t *setup,
                           cairo_operator_t op,
                           cairo_gl_surface_t *dst,
-                          cairo_bool_t assume_component_alpha,
-                          const cairo_rectangle_int_t *rect)
+                          cairo_bool_t assume_component_alpha)
 {
     memset (setup, 0, sizeof (cairo_gl_composite_t));
 
@@ -764,6 +1167,110 @@ _cairo_gl_composite_init (cairo_gl_composite_t *setup,
 
     setup->dst = dst;
     setup->op = op;
+    setup->clip_region = dst->clip_region;
 
     return CAIRO_STATUS_SUCCESS;
 }
+
+static cairo_int_status_t
+_cairo_gl_composite_append_vertex_indices (cairo_gl_context_t  *ctx,
+                                          int                   number_of_new_indices,
+                                          cairo_bool_t          is_connected)
+{
+    cairo_int_status_t status = CAIRO_INT_STATUS_SUCCESS;
+    cairo_array_t *indices = &ctx->tristrip_indices;
+    int number_of_indices = _cairo_array_num_elements (indices);
+    unsigned short current_vertex_index = 0;
+    int i;
+
+    assert (number_of_new_indices > 0);
+
+    /* If any preexisting triangle triangle strip indices exist on this
+       context, we insert a set of degenerate triangles from the last
+       preexisting vertex to our first one. */
+    if (number_of_indices > 0 && is_connected) {
+       const unsigned short *indices_array = _cairo_array_index_const (indices, 0);
+       current_vertex_index = indices_array[number_of_indices - 1];
+
+       status = _cairo_array_append (indices, &current_vertex_index);
+       if (unlikely (status))
+           return status;
+
+       current_vertex_index++;
+       status =_cairo_array_append (indices, &current_vertex_index);
+       if (unlikely (status))
+           return status;
+    } else
+       current_vertex_index = (unsigned short) number_of_indices;
+
+    for (i = 0; i < number_of_new_indices; i++) {
+       status = _cairo_array_append (indices, &current_vertex_index);
+       current_vertex_index++;
+       if (unlikely (status))
+           return status;
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_int_status_t
+_cairo_gl_composite_emit_quad_as_tristrip (cairo_gl_context_t  *ctx,
+                                          cairo_gl_composite_t *setup,
+                                          const cairo_point_t  quad[4])
+{
+    if (ctx->draw_mode != CAIRO_GL_VERTEX) {
+       _cairo_gl_composite_flush (ctx);
+       ctx->draw_mode = CAIRO_GL_VERTEX;
+    }
+
+    _cairo_gl_composite_prepare_buffer (ctx, 4,
+                                       CAIRO_GL_GEOMETRY_TYPE_TRISTRIPS);
+
+    _cairo_gl_composite_emit_point (ctx, &quad[0], 0);
+    _cairo_gl_composite_emit_point (ctx, &quad[1], 0);
+
+    /* Cairo stores quad vertices in counter-clockwise order, but we need to
+       emit them from top to bottom in the triangle strip, so we need to reverse
+       the order of the last two vertices. */
+    _cairo_gl_composite_emit_point (ctx, &quad[3], 0);
+    _cairo_gl_composite_emit_point (ctx, &quad[2], 0);
+
+    return _cairo_gl_composite_append_vertex_indices (ctx, 4, TRUE);
+}
+
+cairo_int_status_t
+_cairo_gl_composite_emit_triangle_as_tristrip (cairo_gl_context_t      *ctx,
+                                              cairo_gl_composite_t     *setup,
+                                              const cairo_point_t       triangle[3])
+{
+    if (ctx->draw_mode != CAIRO_GL_VERTEX) {
+       _cairo_gl_composite_flush (ctx);
+       ctx->draw_mode = CAIRO_GL_VERTEX;
+    }
+
+    _cairo_gl_composite_prepare_buffer (ctx, 3,
+                                       CAIRO_GL_GEOMETRY_TYPE_TRISTRIPS);
+
+    _cairo_gl_composite_emit_point (ctx, &triangle[0], 0);
+    _cairo_gl_composite_emit_point (ctx, &triangle[1], 0);
+    _cairo_gl_composite_emit_point (ctx, &triangle[2], 0);
+    return _cairo_gl_composite_append_vertex_indices (ctx, 3, TRUE);
+}
+
+cairo_int_status_t
+_cairo_gl_composite_emit_point_as_single_line (cairo_gl_context_t  *ctx,
+                                              const cairo_point_t point[2])
+{
+    int num_indices = 2;
+    if (ctx->draw_mode != CAIRO_GL_LINES)
+       _cairo_gl_composite_flush (ctx);
+
+    ctx->draw_mode = CAIRO_GL_LINES;
+
+    _cairo_gl_composite_prepare_buffer (ctx, 2,
+                                       CAIRO_GL_GEOMETRY_TYPE_TRISTRIPS);
+
+    _cairo_gl_composite_emit_point (ctx, &point[0], 0);
+    _cairo_gl_composite_emit_point (ctx, &point[1], 0);
+    return _cairo_gl_composite_append_vertex_indices (ctx, num_indices, FALSE);
+}
index f20850e..a4ec15c 100644 (file)
 
 #include "cairo-error-private.h"
 #include "cairo-gl-private.h"
+#include "cairo-rtree-private.h"
+
+#define MAX_MSAA_SAMPLES 4
+
+cairo_int_status_t
+_cairo_gl_image_cache_init (cairo_gl_context_t *ctx)
+{
+    cairo_surface_t *cache_surface = _cairo_gl_surface_create_scratch (ctx,
+                                               CAIRO_CONTENT_COLOR_ALPHA,
+                                               IMAGE_CACHE_WIDTH,
+                                               IMAGE_CACHE_HEIGHT,
+                                               FALSE);
+    if (unlikely (cache_surface->status)) {
+       cairo_surface_destroy (cache_surface);
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+
+    _cairo_surface_release_device_reference (cache_surface);
+    ctx->image_cache.surface = (cairo_gl_surface_t *)cache_surface;
+
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static void
+_cairo_gl_image_cache_fini (cairo_gl_context_t *ctx)
+{
+    _cairo_rtree_fini (&ctx->image_cache.rtree);
+    cairo_surface_destroy (&ctx->image_cache.surface->base);
+}
 
 static void
 _gl_lock (void *device)
@@ -89,7 +119,7 @@ _gl_flush (void *device)
 
     ctx->dispatch.BindBuffer (GL_ARRAY_BUFFER, 0);
 
-    glDisable (GL_SCISSOR_TEST);
+    _disable_scissor_buffer ();
     glDisable (GL_BLEND);
 
     return _cairo_gl_context_release (ctx, status);
@@ -99,6 +129,7 @@ static void
 _gl_finish (void *device)
 {
     cairo_gl_context_t *ctx = device;
+    int n;
 
     _gl_lock (device);
 
@@ -106,6 +137,16 @@ _gl_finish (void *device)
 
     _cairo_gl_context_fini_shaders (ctx);
 
+    if (ctx->shared_depth_stencil)
+       ctx->dispatch.DeleteRenderbuffers (1, &ctx->shared_depth_stencil);
+    if (ctx->shared_msaa_depth_stencil)
+       ctx->dispatch.DeleteRenderbuffers (1, &ctx->shared_msaa_depth_stencil);
+
+    for (n = 0; n < ARRAY_LENGTH (ctx->glyph_cache); n++)
+        _cairo_gl_glyph_cache_fini (ctx, &ctx->glyph_cache[n]);
+
+    _cairo_gl_image_cache_fini (ctx);
+
     _gl_unlock (device);
 }
 
@@ -113,7 +154,6 @@ static void
 _gl_destroy (void *device)
 {
     cairo_gl_context_t *ctx = device;
-    int n;
 
     ctx->acquire (ctx);
 
@@ -129,10 +169,10 @@ _gl_destroy (void *device)
        free (font);
     }
 
-    for (n = 0; n < ARRAY_LENGTH (ctx->glyph_cache); n++)
-       _cairo_gl_glyph_cache_fini (ctx, &ctx->glyph_cache[n]);
+    _cairo_array_fini (&ctx->tristrip_indices);
 
     cairo_region_destroy (ctx->clip_region);
+    _cairo_clip_destroy (ctx->clip);
 
     free (ctx->vb_mem);
 
@@ -152,6 +192,13 @@ static const cairo_device_backend_t _cairo_gl_device_backend = {
     _gl_destroy,
 };
 
+static cairo_bool_t
+_cairo_gl_msaa_compositor_enabled (void)
+{
+    const char *env = getenv ("CAIRO_GL_COMPOSITOR");
+    return env && strcmp(env, "msaa") == 0;
+}
+
 cairo_status_t
 _cairo_gl_context_init (cairo_gl_context_t *ctx)
 {
@@ -163,7 +210,17 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
 
     _cairo_device_init (&ctx->base, &_cairo_gl_device_backend);
 
-    ctx->compositor = _cairo_gl_span_compositor_get ();
+    /* XXX The choice of compositor should be made automatically at runtime.
+     * However, it is useful to force one particular compositor whilst
+     * testing.
+     */
+     if (_cairo_gl_msaa_compositor_enabled ())
+       ctx->compositor = _cairo_gl_msaa_compositor_get ();
+    else
+       ctx->compositor = _cairo_gl_span_compositor_get ();
+
+
+    ctx->thread_aware = TRUE;
 
     memset (ctx->glyph_cache, 0, sizeof (ctx->glyph_cache));
     cairo_list_init (&ctx->fonts);
@@ -174,18 +231,20 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
 
     /* Check for required extensions */
     if (gl_flavor == CAIRO_GL_FLAVOR_DESKTOP) {
-       if (_cairo_gl_has_extension ("GL_ARB_texture_non_power_of_two"))
+       if (_cairo_gl_has_extension ("GL_ARB_texture_non_power_of_two")) {
            ctx->tex_target = GL_TEXTURE_2D;
-       else if (_cairo_gl_has_extension ("GL_ARB_texture_rectangle"))
+           ctx->has_npot_repeat = TRUE;
+       } else if (_cairo_gl_has_extension ("GL_ARB_texture_rectangle")) {
            ctx->tex_target = GL_TEXTURE_RECTANGLE;
-       else
+           ctx->has_npot_repeat = FALSE;
+       } else
            return _cairo_error (CAIRO_STATUS_DEVICE_ERROR);
-    }
-    else {
+    } else {
+       ctx->tex_target = GL_TEXTURE_2D;
        if (_cairo_gl_has_extension ("GL_OES_texture_npot"))
-           ctx->tex_target = GL_TEXTURE_2D;
+           ctx->has_npot_repeat = TRUE;
        else
-           return _cairo_error (CAIRO_STATUS_DEVICE_ERROR);
+           ctx->has_npot_repeat = FALSE;
     }
 
     if (gl_flavor == CAIRO_GL_FLAVOR_DESKTOP &&
@@ -204,6 +263,32 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
     ctx->has_mesa_pack_invert =
        _cairo_gl_has_extension ("GL_MESA_pack_invert");
 
+    ctx->has_packed_depth_stencil =
+       ((gl_flavor == CAIRO_GL_FLAVOR_DESKTOP &&
+        _cairo_gl_has_extension ("GL_EXT_packed_depth_stencil")) ||
+       (gl_flavor == CAIRO_GL_FLAVOR_ES &&
+        _cairo_gl_has_extension ("GL_OES_packed_depth_stencil")));
+
+    ctx->num_samples = 1;
+
+#if CAIRO_HAS_GL_SURFACE
+    if (ctx->has_packed_depth_stencil &&
+       _cairo_gl_has_extension ("GL_ARB_framebuffer_object")) {
+       glGetIntegerv(GL_MAX_SAMPLES_EXT, &ctx->num_samples);
+    }
+#endif
+
+#if CAIRO_HAS_GLESV2_SURFACE && defined(GL_MAX_SAMPLES_EXT)
+    if (ctx->has_packed_depth_stencil &&
+       _cairo_gl_has_extension ("GL_EXT_multisampled_render_to_texture")) {
+       glGetIntegerv(GL_MAX_SAMPLES_EXT, &ctx->num_samples);
+    }
+#endif
+    ctx->supports_msaa = ctx->num_samples > 1;
+    if (ctx->num_samples > MAX_MSAA_SAMPLES)
+       ctx->num_samples = MAX_MSAA_SAMPLES;
+
+
     ctx->current_operator = -1;
     ctx->gl_flavor = gl_flavor;
 
@@ -227,6 +312,8 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
        }
     }
 
+    _cairo_array_init (&ctx->tristrip_indices, sizeof (unsigned short));
+
     /* PBO for any sort of texture upload */
     dispatch->GenBuffers (1, &ctx->texture_load_pbo);
     dispatch->GenBuffers (1, &ctx->vbo);
@@ -241,6 +328,12 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
     for (n = 0; n < ARRAY_LENGTH (ctx->glyph_cache); n++)
        _cairo_gl_glyph_cache_init (&ctx->glyph_cache[n]);
 
+    ctx->image_cache.surface = NULL;
+    _cairo_rtree_init (&ctx->image_cache.rtree, IMAGE_CACHE_WIDTH,
+                      IMAGE_CACHE_HEIGHT, IMAGE_CACHE_MIN_SIZE,
+                      sizeof (cairo_gl_image_t),
+                      _cairo_gl_image_node_destroy);
+
     return CAIRO_STATUS_SUCCESS;
 }
 
@@ -251,7 +344,7 @@ _cairo_gl_context_activate (cairo_gl_context_t *ctx,
     if (ctx->max_textures <= (GLint) tex_unit) {
         if (tex_unit < 2) {
             _cairo_gl_composite_flush (ctx);
-            _cairo_gl_context_destroy_operand (ctx, ctx->max_textures - 1);   
+            _cairo_gl_context_destroy_operand (ctx, ctx->max_textures - 1);
         }
         glActiveTexture (ctx->max_textures - 1);
     } else {
@@ -259,7 +352,49 @@ _cairo_gl_context_activate (cairo_gl_context_t *ctx,
     }
 }
 
+static GLenum
+_get_depth_stencil_format (cairo_gl_context_t *ctx)
+{
+    /* This is necessary to properly handle the situation where both
+       OpenGL and OpenGLES are active and returning a sane default. */
+#if CAIRO_HAS_GL_SURFACE
+    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP)
+       return GL_DEPTH_STENCIL;
+#endif
+
+#if CAIRO_HAS_GLESV2_SURFACE
+    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP)
+       return GL_DEPTH24_STENCIL8_OES;
+#endif
+
+#if CAIRO_HAS_GL_SURFACE
+    return GL_DEPTH_STENCIL;
+#elif CAIRO_HAS_GLESV2_SURFACE
+    return GL_DEPTH24_STENCIL8_OES;
+#endif
+}
+
+#if CAIRO_HAS_GLESV2_SURFACE
 static void
+_cairo_gl_ensure_msaa_gles_framebuffer (cairo_gl_context_t *ctx,
+                                       cairo_gl_surface_t *surface)
+{
+    if (surface->msaa_active)
+       return;
+
+    ctx->dispatch.FramebufferTexture2DMultisample(GL_FRAMEBUFFER,
+                                                 GL_COLOR_ATTACHMENT0,
+                                                 ctx->tex_target,
+                                                 surface->tex,
+                                                 0,
+                                                 ctx->num_samples);
+
+    /* From now on MSAA will always be active on this surface. */
+    surface->msaa_active = TRUE;
+}
+#endif
+
+void
 _cairo_gl_ensure_framebuffer (cairo_gl_context_t *ctx,
                               cairo_gl_surface_t *surface)
 {
@@ -274,11 +409,22 @@ _cairo_gl_ensure_framebuffer (cairo_gl_context_t *ctx,
      */
     dispatch->GenFramebuffers (1, &surface->fb);
     dispatch->BindFramebuffer (GL_FRAMEBUFFER, surface->fb);
-    dispatch->FramebufferTexture2D (GL_FRAMEBUFFER,
-                                   GL_COLOR_ATTACHMENT0,
-                                   ctx->tex_target,
-                                   surface->tex,
-                                   0);
+
+    /* Unlike for desktop GL we only maintain one multisampling framebuffer
+       for OpenGLES since the EXT_multisampled_render_to_texture extension
+       does not require an explicit multisample resolution. */
+#if CAIRO_HAS_GLESV2_SURFACE
+    if (surface->supports_msaa && _cairo_gl_msaa_compositor_enabled () &&
+       ctx->gl_flavor == CAIRO_GL_FLAVOR_ES) {
+       _cairo_gl_ensure_msaa_gles_framebuffer (ctx, surface);
+    } else
+#endif
+       dispatch->FramebufferTexture2D (GL_FRAMEBUFFER,
+                                       GL_COLOR_ATTACHMENT0,
+                                       ctx->tex_target,
+                                       surface->tex,
+                                       0);
+
 #if CAIRO_HAS_GL_SURFACE
     glDrawBuffer (GL_COLOR_ATTACHMENT0);
     glReadBuffer (GL_COLOR_ATTACHMENT0);
@@ -304,6 +450,189 @@ _cairo_gl_ensure_framebuffer (cairo_gl_context_t *ctx,
     }
 }
 
+#if CAIRO_HAS_GL_SURFACE
+static void
+_cairo_gl_ensure_multisampling (cairo_gl_context_t *ctx,
+                               cairo_gl_surface_t *surface)
+{
+    assert (surface->supports_msaa);
+    assert (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP);
+
+    if (surface->msaa_fb)
+       return;
+
+    /* We maintain a separate framebuffer for multisampling operations.
+       This allows us to do a fast paint to the non-multisampling framebuffer
+       when mulitsampling is disabled. */
+    ctx->dispatch.GenFramebuffers (1, &surface->msaa_fb);
+    ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, surface->msaa_fb);
+    ctx->dispatch.GenRenderbuffers (1, &surface->msaa_rb);
+    ctx->dispatch.BindRenderbuffer (GL_RENDERBUFFER, surface->msaa_rb);
+
+    /* FIXME: For now we assume that textures passed from the outside have GL_RGBA
+       format, but eventually we need to expose a way for the API consumer to pass
+       this information. */
+    ctx->dispatch.RenderbufferStorageMultisample (GL_RENDERBUFFER,
+                                                 ctx->num_samples,
+                                                 GL_RGBA,
+                                                 surface->width,
+                                                 surface->height);
+    ctx->dispatch.FramebufferRenderbuffer (GL_FRAMEBUFFER,
+                                          GL_COLOR_ATTACHMENT0,
+                                          GL_RENDERBUFFER,
+                                          surface->msaa_rb);
+
+    /* Cairo surfaces start out initialized to transparent (black) */
+    _disable_scissor_buffer ();
+    glClearColor (0, 0, 0, 0);
+    glClear (GL_COLOR_BUFFER_BIT);
+}
+#endif
+
+static void
+_cairo_gl_replace_msaa_depth_stencil_buffer (cairo_gl_context_t *ctx,
+                                            int width,
+                                            int height)
+{
+    cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
+
+    if (ctx->shared_msaa_depth_stencil)
+       dispatch->DeleteRenderbuffers (1, &ctx->shared_msaa_depth_stencil);
+
+    dispatch->GenRenderbuffers (1, &ctx->shared_msaa_depth_stencil);
+    dispatch->BindRenderbuffer (GL_RENDERBUFFER, ctx->shared_msaa_depth_stencil);
+    dispatch->RenderbufferStorageMultisample (GL_RENDERBUFFER, ctx->num_samples,
+                                             _get_depth_stencil_format (ctx),
+                                             width, height);
+    ctx->shared_msaa_depth_stencil_width = width;
+    ctx->shared_msaa_depth_stencil_height = height;
+}
+
+static cairo_bool_t
+_cairo_gl_ensure_msaa_depth_stencil_buffer (cairo_gl_context_t *ctx,
+                                           cairo_gl_surface_t *surface)
+{
+    cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
+    _cairo_gl_ensure_framebuffer (ctx, surface);
+#if CAIRO_HAS_GL_SURFACE
+    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP)
+       _cairo_gl_ensure_multisampling (ctx, surface);
+#endif
+
+    if (! ctx->shared_msaa_depth_stencil ||
+        ctx->shared_msaa_depth_stencil_width < surface->width ||
+        ctx->shared_msaa_depth_stencil_height < surface->height) {
+       _cairo_gl_replace_msaa_depth_stencil_buffer (ctx,
+                                                    surface->width,
+                                                    surface->height);
+    }
+
+    assert (ctx->shared_msaa_depth_stencil);
+    if (surface->msaa_depth_stencil == ctx->shared_msaa_depth_stencil)
+       return TRUE;
+
+#if CAIRO_HAS_GL_SURFACE
+    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP) {
+       dispatch->FramebufferRenderbuffer (GL_FRAMEBUFFER,
+                                          GL_DEPTH_STENCIL_ATTACHMENT,
+                                          GL_RENDERBUFFER,
+                                          ctx->shared_msaa_depth_stencil);
+    }
+#endif
+
+#if CAIRO_HAS_GLESV2_SURFACE
+    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES) {
+       dispatch->FramebufferRenderbuffer (GL_FRAMEBUFFER,
+                                          GL_DEPTH_ATTACHMENT,
+                                          GL_RENDERBUFFER,
+                                          ctx->shared_msaa_depth_stencil);
+       dispatch->FramebufferRenderbuffer (GL_FRAMEBUFFER,
+                                          GL_STENCIL_ATTACHMENT,
+                                          GL_RENDERBUFFER,
+                                          ctx->shared_msaa_depth_stencil);
+    }
+#endif
+
+    surface->msaa_depth_stencil = ctx->shared_msaa_depth_stencil;
+
+    if (dispatch->CheckFramebufferStatus (GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
+       dispatch->DeleteRenderbuffers (1, &surface->msaa_depth_stencil);
+       surface->msaa_depth_stencil = 0;
+       return FALSE;
+    }
+
+    return TRUE;
+}
+
+static void
+_cairo_gl_replace_depth_stencil_buffer (cairo_gl_context_t *ctx,
+                                       int width,
+                                       int height)
+{
+    cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
+
+    if (ctx->shared_depth_stencil)
+       dispatch->DeleteRenderbuffers (1, &ctx->shared_depth_stencil);
+
+    dispatch->GenRenderbuffers (1, &ctx->shared_depth_stencil);
+    dispatch->BindRenderbuffer (GL_RENDERBUFFER, ctx->shared_depth_stencil);
+    dispatch->RenderbufferStorage (GL_RENDERBUFFER,
+                                  _get_depth_stencil_format (ctx),
+                                  width, height);
+    ctx->shared_depth_stencil_width = width;
+    ctx->shared_depth_stencil_height = height;
+}
+
+static cairo_bool_t
+_cairo_gl_ensure_depth_stencil_buffer (cairo_gl_context_t *ctx,
+                                      cairo_gl_surface_t *surface)
+{
+    cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
+
+    _cairo_gl_ensure_framebuffer (ctx, surface);
+
+    if (! ctx->shared_depth_stencil ||
+        ctx->shared_depth_stencil_width < surface->width ||
+        ctx->shared_depth_stencil_height < surface->height) {
+       _cairo_gl_replace_depth_stencil_buffer (ctx,
+                                               surface->width,
+                                               surface->height);
+    }
+
+    if (surface->depth_stencil == ctx->shared_depth_stencil)
+       return TRUE;
+
+    dispatch->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
+                                      GL_RENDERBUFFER, ctx->shared_depth_stencil);
+    dispatch->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
+                                      GL_RENDERBUFFER, ctx->shared_depth_stencil);
+    surface->depth_stencil = ctx->shared_depth_stencil;
+
+    if (dispatch->CheckFramebufferStatus (GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
+       dispatch->DeleteRenderbuffers (1, &surface->depth_stencil);
+       surface->depth_stencil = 0;
+       return FALSE;
+    }
+
+    return TRUE;
+}
+
+cairo_bool_t
+_cairo_gl_ensure_stencil (cairo_gl_context_t *ctx,
+                         cairo_gl_surface_t *surface)
+{
+    if (! _cairo_gl_surface_is_texture (surface))
+       return TRUE; /* best guess for now, will check later */
+
+    if (! ctx->has_packed_depth_stencil)
+       return FALSE;
+
+    if (surface->msaa_active)
+       return _cairo_gl_ensure_msaa_depth_stencil_buffer (ctx, surface);
+    else
+       return _cairo_gl_ensure_depth_stencil_buffer (ctx, surface);
+}
+
 /*
  * Stores a parallel projection transformation in matrix 'm',
  * using column-major order.
@@ -344,12 +673,82 @@ _gl_identity_ortho (GLfloat *m,
 #undef M
 }
 
+#if CAIRO_HAS_GL_SURFACE
+static void
+_cairo_gl_activate_surface_as_multisampling (cairo_gl_context_t *ctx,
+                                            cairo_gl_surface_t *surface)
+{
+    assert (surface->supports_msaa);
+    assert (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP);
+
+    _cairo_gl_ensure_framebuffer (ctx, surface);
+    _cairo_gl_ensure_multisampling (ctx, surface);
+
+
+    if (surface->msaa_active) {
+       glEnable (GL_MULTISAMPLE);
+       ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, surface->msaa_fb);
+       return;
+    }
+
+    _cairo_gl_composite_flush (ctx);
+    glEnable (GL_MULTISAMPLE);
+
+    /* The last time we drew to the surface, we were not using multisampling,
+       so we need to blit from the non-multisampling framebuffer into the
+       multisampling framebuffer. */
+    ctx->dispatch.BindFramebuffer (GL_DRAW_FRAMEBUFFER, surface->msaa_fb);
+    ctx->dispatch.BindFramebuffer (GL_READ_FRAMEBUFFER, surface->fb);
+    ctx->dispatch.BlitFramebuffer (0, 0, surface->width, surface->height,
+                                  0, 0, surface->width, surface->height,
+                                  GL_COLOR_BUFFER_BIT, GL_NEAREST);
+    ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, surface->msaa_fb);
+    surface->msaa_active = TRUE;
+}
+#endif
+
+void
+_cairo_gl_activate_surface_as_nonmultisampling (cairo_gl_context_t *ctx,
+                                               cairo_gl_surface_t *surface)
+{
+    assert (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP);
+    _cairo_gl_ensure_framebuffer (ctx, surface);
+
+#if CAIRO_HAS_GL_SURFACE
+    if (! surface->msaa_active) {
+       glDisable (GL_MULTISAMPLE);
+       ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, surface->fb);
+       return;
+    }
+
+    _cairo_gl_composite_flush (ctx);
+    glDisable (GL_MULTISAMPLE);
+
+    /* The last time we drew to the surface, we were using multisampling,
+       so we need to blit from the multisampling framebuffer into the
+       non-multisampling framebuffer. */
+    ctx->dispatch.BindFramebuffer (GL_DRAW_FRAMEBUFFER, surface->fb);
+    ctx->dispatch.BindFramebuffer (GL_READ_FRAMEBUFFER, surface->msaa_fb);
+    ctx->dispatch.BlitFramebuffer (0, 0, surface->width, surface->height,
+                                  0, 0, surface->width, surface->height,
+                                  GL_COLOR_BUFFER_BIT, GL_NEAREST);
+    ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, surface->fb);
+    surface->msaa_active = FALSE;
+#endif
+}
+
 void
 _cairo_gl_context_set_destination (cairo_gl_context_t *ctx,
-                                   cairo_gl_surface_t *surface)
+                                   cairo_gl_surface_t *surface,
+                                   cairo_bool_t multisampling)
 {
-    if (ctx->current_target == surface && ! surface->needs_update)
-        return;
+    /* OpenGL ES surfaces are always in MSAA mode once it's been turned on,
+     * so we don't need to check whether we are switching modes for that
+     * surface type. */
+    if (ctx->current_target == surface && ! surface->needs_update &&
+       (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES ||
+        surface->msaa_active == multisampling))
+       return;
 
     _cairo_gl_composite_flush (ctx);
 
@@ -357,11 +756,29 @@ _cairo_gl_context_set_destination (cairo_gl_context_t *ctx,
     surface->needs_update = FALSE;
 
     if (_cairo_gl_surface_is_texture (surface)) {
-        _cairo_gl_ensure_framebuffer (ctx, surface);
-        ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, surface->fb);
+       if (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES) {
+           _cairo_gl_ensure_framebuffer (ctx, surface);
+           ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, surface->fb);
+#if CAIRO_HAS_GL_SURFACE
+       } else if (multisampling)
+           _cairo_gl_activate_surface_as_multisampling (ctx, surface);
+       else {
+           _cairo_gl_activate_surface_as_nonmultisampling (ctx, surface);
+#endif
+       }
     } else {
         ctx->make_current (ctx, surface);
+
+#if CAIRO_HAS_GL_SURFACE
+       if (multisampling)
+           glEnable(GL_MULTISAMPLE);
+       else
+           glDisable(GL_MULTISAMPLE);
+#endif
+
+        surface->msaa_active = multisampling;
         ctx->dispatch.BindFramebuffer (GL_FRAMEBUFFER, 0);
+
 #if CAIRO_HAS_GL_SURFACE
         glDrawBuffer (GL_BACK_LEFT);
         glReadBuffer (GL_BACK_LEFT);
@@ -377,3 +794,14 @@ _cairo_gl_context_set_destination (cairo_gl_context_t *ctx,
        _gl_identity_ortho (ctx->modelviewprojection_matrix,
                            0, surface->width, surface->height, 0);
 }
+
+void
+cairo_gl_device_set_thread_aware (cairo_device_t       *device,
+                                 cairo_bool_t           thread_aware)
+{
+    if (device->backend->type != CAIRO_DEVICE_TYPE_GL) {
+       _cairo_error_throw (CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
+       return;
+    }
+    ((cairo_gl_context_t *) device)->thread_aware = thread_aware;
+}
index 751913c..0c5dc39 100644 (file)
@@ -53,6 +53,8 @@ typedef struct _cairo_gl_dispatch_entry {
                                   offsetof(cairo_gl_dispatch_t, name) }
 #define DISPATCH_ENTRY_ARB_OES(name) { { "gl"#name, "gl"#name"ARB", "gl"#name"OES" }, \
                                       offsetof(cairo_gl_dispatch_t, name) }
+#define DISPATCH_ENTRY_EXT_EXT(name) { { "gl"#name, "gl"#name"EXT", "gl"#name"EXT" }, \
+                                      offsetof(cairo_gl_dispatch_t, name) }
 #define DISPATCH_ENTRY_CUSTOM(name, name2) { { "gl"#name, "gl"#name2, "gl"#name }, \
                                             offsetof(cairo_gl_dispatch_t, name)}
 #define DISPATCH_ENTRY_LAST { { NULL, NULL, NULL }, 0 }
@@ -109,6 +111,14 @@ cairo_private cairo_gl_dispatch_entry_t dispatch_fbo_entries[] = {
     DISPATCH_ENTRY_EXT (FramebufferTexture2D),
     DISPATCH_ENTRY_EXT (CheckFramebufferStatus),
     DISPATCH_ENTRY_EXT (DeleteFramebuffers),
+    DISPATCH_ENTRY_EXT (GenRenderbuffers),
+    DISPATCH_ENTRY_EXT (BindRenderbuffer),
+    DISPATCH_ENTRY_EXT (RenderbufferStorage),
+    DISPATCH_ENTRY_EXT (FramebufferRenderbuffer),
+    DISPATCH_ENTRY_EXT (DeleteRenderbuffers),
+    DISPATCH_ENTRY_EXT (BlitFramebuffer),
+    DISPATCH_ENTRY_EXT_EXT (RenderbufferStorageMultisample),
+    DISPATCH_ENTRY_EXT_EXT (FramebufferTexture2DMultisample),
     DISPATCH_ENTRY_LAST
 };
 
index ee5c543..4627fd7 100644 (file)
 typedef struct _cairo_gl_glyph {
     cairo_rtree_node_t node;
     cairo_scaled_glyph_private_t base;
+    cairo_scaled_glyph_t *glyph;
     cairo_gl_glyph_cache_t *cache;
     struct { float x, y; } p1, p2;
 } cairo_gl_glyph_t;
 
 static void
-_cairo_gl_glyph_fini (cairo_scaled_glyph_private_t *_priv,
+_cairo_gl_node_destroy (cairo_rtree_node_t *node)
+{
+    cairo_gl_glyph_t *priv = cairo_container_of (node, cairo_gl_glyph_t, node);
+    cairo_scaled_glyph_t *glyph;
+
+    glyph = priv->glyph;
+    if (glyph == NULL)
+           return;
+
+    if (glyph->dev_private_key == priv->cache) {
+           glyph->dev_private = NULL;
+           glyph->dev_private_key = NULL;
+    }
+    cairo_list_del (&priv->base.link);
+    priv->glyph = NULL;
+}
+
+static void
+_cairo_gl_glyph_fini (cairo_scaled_glyph_private_t *glyph_private,
                      cairo_scaled_glyph_t *scaled_glyph,
                      cairo_scaled_font_t  *scaled_font)
 {
-    cairo_gl_glyph_t *priv = cairo_container_of (_priv, cairo_gl_glyph_t, base);
+    cairo_gl_glyph_t *priv = cairo_container_of (glyph_private,
+                                                cairo_gl_glyph_t,
+                                                base);
+
+    assert (priv->glyph);
 
-    priv->node.owner = NULL;
-    if (! priv->node.pinned) {
-       /* XXX thread-safety? Probably ok due to the frozen scaled-font. */
+    _cairo_gl_node_destroy (&priv->node);
+
+    /* XXX thread-safety? Probably ok due to the frozen scaled-font. */
+    if (! priv->node.pinned)
        _cairo_rtree_node_remove (&priv->cache->rtree, &priv->node);
-    }
+
+    assert (priv->glyph == NULL);
 }
 
 static cairo_int_status_t
@@ -78,7 +103,6 @@ _cairo_gl_glyph_cache_add_glyph (cairo_gl_context_t *ctx,
                                 cairo_scaled_glyph_t  *scaled_glyph)
 {
     cairo_image_surface_t *glyph_surface = scaled_glyph->surface;
-    cairo_gl_surface_t *cache_surface;
     cairo_gl_glyph_t *glyph_private;
     cairo_rtree_node_t *node = NULL;
     cairo_int_status_t status;
@@ -105,12 +129,9 @@ _cairo_gl_glyph_cache_add_glyph (cairo_gl_context_t *ctx,
     if (status)
        return status;
 
-    cache_surface = (cairo_gl_surface_t *) cache->pattern.surface;
-
     /* XXX: Make sure we use the mask texture. This should work automagically somehow */
     glActiveTexture (GL_TEXTURE1);
-    status = _cairo_gl_surface_draw_image (cache_surface,
-                                           glyph_surface,
+    status = _cairo_gl_surface_draw_image (cache->surface, glyph_surface,
                                            0, 0,
                                            glyph_surface->width, glyph_surface->height,
                                            node->x, node->y);
@@ -119,6 +140,7 @@ _cairo_gl_glyph_cache_add_glyph (cairo_gl_context_t *ctx,
 
     glyph_private = (cairo_gl_glyph_t *) node;
     glyph_private->cache = cache;
+    glyph_private->glyph = scaled_glyph;
     _cairo_scaled_glyph_attach_private (scaled_glyph,
                                        &glyph_private->base,
                                        cache,
@@ -133,10 +155,10 @@ _cairo_gl_glyph_cache_add_glyph (cairo_gl_context_t *ctx,
     glyph_private->p2.x = node->x + glyph_surface->width;
     glyph_private->p2.y = node->y + glyph_surface->height;
     if (! _cairo_gl_device_requires_power_of_two_textures (&ctx->base)) {
-       glyph_private->p1.x /= cache_surface->width;
-       glyph_private->p1.y /= cache_surface->height;
-       glyph_private->p2.x /= cache_surface->width;
-       glyph_private->p2.y /= cache_surface->height;
+       glyph_private->p1.x /= GLYPH_CACHE_WIDTH;
+       glyph_private->p2.x /= GLYPH_CACHE_WIDTH;
+       glyph_private->p1.y /= GLYPH_CACHE_HEIGHT;
+       glyph_private->p2.y /= GLYPH_CACHE_HEIGHT;
     }
 
     return CAIRO_STATUS_SUCCESS;
@@ -156,6 +178,7 @@ cairo_gl_context_get_glyph_cache (cairo_gl_context_t *ctx,
 {
     cairo_gl_glyph_cache_t *cache;
     cairo_content_t content;
+    cairo_bool_t true_alpha = FALSE;
 
     switch (format) {
     case CAIRO_FORMAT_RGB30:
@@ -169,6 +192,7 @@ cairo_gl_context_get_glyph_cache (cairo_gl_context_t *ctx,
     case CAIRO_FORMAT_A1:
        cache = &ctx->glyph_cache[1];
         content = CAIRO_CONTENT_ALPHA;
+       true_alpha = TRUE;
        break;
     default:
     case CAIRO_FORMAT_INVALID:
@@ -176,50 +200,38 @@ cairo_gl_context_get_glyph_cache (cairo_gl_context_t *ctx,
        return _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
     }
 
-    if (unlikely (cache->pattern.surface == NULL)) {
+    if (unlikely (cache->surface == NULL)) {
         cairo_surface_t *surface;
-        surface = cairo_gl_surface_create (&ctx->base,
-                                           content,
-                                           GLYPH_CACHE_WIDTH,
-                                           GLYPH_CACHE_HEIGHT);
-        if (unlikely (surface->status)) {
-            cairo_status_t status = surface->status;
-            cairo_surface_destroy (surface);
-            return status;
-        }
+
+       surface = _cairo_gl_surface_create_scratch (ctx,
+                                                   content,
+                                                   GLYPH_CACHE_WIDTH,
+                                                   GLYPH_CACHE_HEIGHT,
+                                                   true_alpha);
+
+        if (unlikely (surface->status))
+            return surface->status;
+
         _cairo_surface_release_device_reference (surface);
-        _cairo_pattern_init_for_surface (&cache->pattern, surface);
-        cairo_surface_destroy (surface);
-        cache->pattern.base.has_component_alpha = (content == CAIRO_CONTENT_COLOR_ALPHA);
+
+       cache->surface = (cairo_gl_surface_t *)surface;
+       cache->surface->operand.texture.attributes.has_component_alpha =
+           content == CAIRO_CONTENT_COLOR_ALPHA;
     }
 
     *cache_out = cache;
     return CAIRO_STATUS_SUCCESS;
 }
 
-static void
-_cairo_gl_glyph_cache_unlock (cairo_gl_glyph_cache_t *cache)
-{
-    _cairo_rtree_unpin (&cache->rtree);
-}
-
-static void
-_cairo_gl_font_fini (cairo_scaled_font_private_t *_priv,
-                    cairo_scaled_font_t  *scaled_font)
-{
-    cairo_gl_font_t *priv = (cairo_gl_font_t *)_priv;
-
-    cairo_list_del (&priv->link);
-    free (priv);
-}
-
 static cairo_status_t
 render_glyphs (cairo_gl_surface_t      *dst,
               int dst_x, int dst_y,
               cairo_operator_t  op,
-              const cairo_pattern_t    *source,
+              cairo_surface_t  *source,
               cairo_composite_glyphs_info_t *info,
-              cairo_bool_t             *has_component_alpha)
+              cairo_bool_t             *has_component_alpha,
+              cairo_clip_t *clip,
+              cairo_bool_t via_msaa_compositor)
 {
     cairo_format_t last_format = CAIRO_FORMAT_INVALID;
     cairo_gl_glyph_cache_t *cache = NULL;
@@ -227,6 +239,11 @@ render_glyphs (cairo_gl_surface_t  *dst,
     cairo_gl_composite_t setup;
     cairo_int_status_t status;
     int i = 0;
+    cairo_bool_t is_argb32;
+
+    TRACE ((stderr, "%s (%d, %d)x(%d, %d)\n", __FUNCTION__,
+           info->extents.x, info->extents.y,
+           info->extents.width, info->extents.height));
 
     *has_component_alpha = FALSE;
 
@@ -234,21 +251,34 @@ render_glyphs (cairo_gl_surface_t *dst,
     if (unlikely (status))
        return status;
 
-    status = _cairo_gl_composite_init (&setup, op, dst, TRUE, &info->extents);
-    if (unlikely (status))
-       goto FINISH;
+    /* Traps compositor never has CLEAR operator. */
+    is_argb32 =
+       info->font->options.antialias == CAIRO_ANTIALIAS_SUBPIXEL ||
+       info->font->options.antialias == CAIRO_ANTIALIAS_BEST;
+
+    /* If we are invoked by traps compositor, we keep what is in code
+       otherwise, we handle non-subpixel/best directly in msaa
+       compositor. */
+    if (!via_msaa_compositor)
+            status = _cairo_gl_composite_init (&setup, op, dst, TRUE);
+    else if (info->font->options.antialias == CAIRO_ANTIALIAS_SUBPIXEL ||
+       info->font->options.antialias == CAIRO_ANTIALIAS_BEST)
+        status = _cairo_gl_composite_init (&setup, op, dst, TRUE);
+    else
+        status = _cairo_gl_composite_init (&setup, op, dst, FALSE);
 
-    status = _cairo_gl_composite_set_source (&setup, source,
-                                             info->extents.x,
-                                            info->extents.y,
-                                             dst_x, dst_y,
-                                             info->extents.width,
-                                             info->extents.height);
     if (unlikely (status))
        goto FINISH;
 
+    if (source == NULL) {
+           _cairo_gl_composite_set_solid_source (&setup, CAIRO_COLOR_WHITE);
+    } else {
+           _cairo_gl_composite_set_source_operand (&setup,
+                                                   source_to_operand (source));
 
-    //_cairo_gl_composite_set_clip_region (&setup, _cairo_clip_get_region (extents->clip));
+    }
+
+    _cairo_gl_composite_set_clip (&setup, clip);
 
     for (i = 0; i < info->num_glyphs; i++) {
        cairo_scaled_glyph_t *scaled_glyph;
@@ -277,19 +307,20 @@ render_glyphs (cairo_gl_surface_t *dst,
 
            last_format = scaled_glyph->surface->format;
 
-            status = _cairo_gl_composite_set_mask (&setup,
-                                                   &cache->pattern.base,
-                                                   0, 0, 0, 0, 0, 0);
-            if (unlikely (status))
-                goto FINISH;
-
-           *has_component_alpha |= cache->pattern.base.has_component_alpha;
+           /* In msaa compositor, clear operator needs component alpha,
+              we need to reset to FALSE if previously clear operator
+              has set it to TRUE. */
+           if (via_msaa_compositor) {
+               if (op == CAIRO_OPERATOR_CLEAR || is_argb32)
+                   cache->surface->operand.texture.attributes.has_component_alpha = TRUE;
+               else
+                   cache->surface->operand.texture.attributes.has_component_alpha = FALSE;
+           }
+           _cairo_gl_composite_set_mask_operand (&setup, &cache->surface->operand);
+           *has_component_alpha |= cache->surface->operand.texture.attributes.has_component_alpha;
 
-            /* XXX: _cairo_gl_composite_begin() acquires the context a
-             * second time. Need to refactor this loop so this doesn't happen.
-             */
+           /* XXX Shoot me. */
             status = _cairo_gl_composite_begin (&setup, &ctx);
-
             status = _cairo_gl_context_release (ctx, status);
            if (unlikely (status))
                goto FINISH;
@@ -303,7 +334,7 @@ render_glyphs (cairo_gl_surface_t   *dst,
                scaled_glyph->dev_private_key = cache;
                scaled_glyph->dev_private = cairo_container_of (priv,
                                                                cairo_gl_glyph_t,
-                                                               base);;
+                                                               base);
            } else {
                status = _cairo_gl_glyph_cache_add_glyph (ctx, cache, scaled_glyph);
 
@@ -322,8 +353,8 @@ render_glyphs (cairo_gl_surface_t   *dst,
        x_offset = scaled_glyph->surface->base.device_transform.x0;
        y_offset = scaled_glyph->surface->base.device_transform.y0;
 
-       x1 = _cairo_lround (info->glyphs[i].x - x_offset);
-       y1 = _cairo_lround (info->glyphs[i].y - y_offset);
+       x1 = _cairo_lround (info->glyphs[i].x - x_offset - dst_x);
+       y1 = _cairo_lround (info->glyphs[i].y - y_offset - dst_y);
        x2 = x1 + scaled_glyph->surface->width;
        y2 = y1 + scaled_glyph->surface->height;
 
@@ -335,6 +366,7 @@ render_glyphs (cairo_gl_surface_t   *dst,
     }
 
     status = CAIRO_STATUS_SUCCESS;
+
   FINISH:
     status = _cairo_gl_context_release (ctx, status);
 
@@ -343,15 +375,19 @@ render_glyphs (cairo_gl_surface_t *dst,
 }
 
 static cairo_int_status_t
-render_glyphs_via_mask (cairo_gl_surface_t     *dst,
-                          cairo_operator_t      op,
-                          const cairo_surface_t        *source,
-                          cairo_composite_glyphs_info_t *info)
+render_glyphs_via_mask (cairo_gl_surface_t *dst,
+                       int dst_x, int dst_y,
+                       cairo_operator_t  op,
+                       cairo_surface_t *source,
+                       cairo_composite_glyphs_info_t *info,
+                       cairo_clip_t *clip,
+                       cairo_bool_t via_msaa_compositor)
 {
     cairo_surface_t *mask;
     cairo_status_t status;
     cairo_bool_t has_component_alpha;
-    int i;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
 
     /* XXX: For non-CA, this should be CAIRO_CONTENT_ALPHA to save memory */
     mask = cairo_gl_surface_create (dst->base.device,
@@ -361,34 +397,35 @@ render_glyphs_via_mask (cairo_gl_surface_t        *dst,
     if (unlikely (mask->status))
         return mask->status;
 
-    for (i = 0; i < info->num_glyphs; i++) {
-       info->glyphs[i].x -= info->extents.x;
-       info->glyphs[i].y -= info->extents.y;
-    }
-
-    status = render_glyphs ((cairo_gl_surface_t *) mask, 0, 0,
-                           CAIRO_OPERATOR_ADD,
-                           &_cairo_pattern_white.base,
-                           info, &has_component_alpha);
+    status = render_glyphs ((cairo_gl_surface_t *) mask,
+                           info->extents.x, info->extents.y,
+                           CAIRO_OPERATOR_ADD, NULL,
+                           info, &has_component_alpha, NULL,
+                           via_msaa_compositor);
     if (likely (status == CAIRO_STATUS_SUCCESS)) {
-       /* XXX composite */
-#if 0
        cairo_surface_pattern_t mask_pattern;
-        mask->is_clear = FALSE;
+       cairo_surface_pattern_t source_pattern;
+
+       mask->is_clear = FALSE;
        _cairo_pattern_init_for_surface (&mask_pattern, mask);
        mask_pattern.base.has_component_alpha = has_component_alpha;
+       mask_pattern.base.filter = CAIRO_FILTER_NEAREST;
+       mask_pattern.base.extend = CAIRO_EXTEND_NONE;
+
        cairo_matrix_init_translate (&mask_pattern.base.matrix,
-                                    -info->extents.x, -info->extents.y);
+                                    dst_x-info->extents.x, dst_y-info->extents.y);
+
+       _cairo_pattern_init_for_surface (&source_pattern, source);
+       cairo_matrix_init_translate (&source_pattern.base.matrix,
+                                    dst_x-info->extents.x, dst_y-info->extents.y);
+
        status = _cairo_surface_mask (&dst->base, op,
-                                     source, &mask_pattern.base,
-                                     NULL);
+                                     &source_pattern.base,
+                                     &mask_pattern.base,
+                                     clip);
+
        _cairo_pattern_fini (&mask_pattern.base);
-#endif
-    } else {
-       for (i = 0; i < info->num_glyphs; i++) {
-           info->glyphs[i].x += info->extents.x;
-           info->glyphs[i].y += info->extents.y;
-       }
+       _cairo_pattern_fini (&source_pattern.base);
     }
 
     cairo_surface_destroy (mask);
@@ -413,45 +450,60 @@ _cairo_gl_check_composite_glyphs (const cairo_composite_rectangles_t *extents,
 }
 
 cairo_int_status_t
-_cairo_gl_composite_glyphs (void                       *_dst,
-                           cairo_operator_t             op,
-                           cairo_surface_t             *_src,
-                           int                          src_x,
-                           int                          src_y,
-                           int                          dst_x,
-                           int                          dst_y,
-                           cairo_composite_glyphs_info_t *info)
+_cairo_gl_composite_glyphs_with_clip (void                         *_dst,
+                                     cairo_operator_t               op,
+                                     cairo_surface_t               *_src,
+                                     int                            src_x,
+                                     int                            src_y,
+                                     int                            dst_x,
+                                     int                            dst_y,
+                                     cairo_composite_glyphs_info_t *info,
+                                     cairo_clip_t                           *clip,
+                                     cairo_bool_t                           via_msaa_compositor)
 {
     cairo_gl_surface_t *dst = _dst;
     cairo_bool_t has_component_alpha;
     int i;
 
-    /* If any of the glyphs are component alpha, we have to go through a mask,
-     * since only _cairo_gl_surface_composite() currently supports component
-     * alpha.
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    /* If any of the glyphs require component alpha, we have to go through
+     * a mask, since only _cairo_gl_surface_composite() currently supports
+     * component alpha.
      */
-    if (!dst->base.is_clear && ! info->use_mask && op != CAIRO_OPERATOR_OVER) {
-       for (i = 0; i < info->num_glyphs; i++) {
-           cairo_scaled_glyph_t *scaled_glyph;
-
-           if (_cairo_scaled_glyph_lookup (info->font, info->glyphs[i].index,
-                                           CAIRO_SCALED_GLYPH_INFO_SURFACE,
-                                           &scaled_glyph) == CAIRO_INT_STATUS_SUCCESS &&
-               scaled_glyph->surface->format == CAIRO_FORMAT_ARGB32)
-           {
-               info->use_mask = TRUE;
-               break;
-           }
-       }
+    if (!dst->base.is_clear && ! info->use_mask && op != CAIRO_OPERATOR_OVER &&
+       (info->font->options.antialias == CAIRO_ANTIALIAS_SUBPIXEL ||
+        info->font->options.antialias == CAIRO_ANTIALIAS_BEST))
+    {
+       info->use_mask = TRUE;
     }
 
     if (info->use_mask) {
-       return render_glyphs_via_mask (dst, op, _src, info);
+       return render_glyphs_via_mask (dst, dst_x, dst_y,
+                                          op, _src, info, clip,
+                                          via_msaa_compositor);
     } else {
        return render_glyphs (dst, dst_x, dst_y,
                              op, _src, info,
-                             &has_component_alpha);
-    }
+                             &has_component_alpha,
+                             clip,
+                             via_msaa_compositor);
+     }
+
+}
+
+cairo_int_status_t
+_cairo_gl_composite_glyphs (void                       *_dst,
+                           cairo_operator_t             op,
+                           cairo_surface_t             *_src,
+                           int                          src_x,
+                           int                          src_y,
+                           int                          dst_x,
+                           int                          dst_y,
+                           cairo_composite_glyphs_info_t *info)
+{
+    return _cairo_gl_composite_glyphs_with_clip (_dst, op, _src, src_x, src_y,
+                                                dst_x, dst_y, info, NULL, FALSE);
 }
 
 void
@@ -461,7 +513,8 @@ _cairo_gl_glyph_cache_init (cairo_gl_glyph_cache_t *cache)
                       GLYPH_CACHE_WIDTH,
                       GLYPH_CACHE_HEIGHT,
                       GLYPH_CACHE_MIN_SIZE,
-                      sizeof (cairo_gl_glyph_t));
+                      sizeof (cairo_gl_glyph_t),
+                      _cairo_gl_node_destroy);
 }
 
 void
@@ -469,9 +522,5 @@ _cairo_gl_glyph_cache_fini (cairo_gl_context_t *ctx,
                            cairo_gl_glyph_cache_t *cache)
 {
     _cairo_rtree_fini (&cache->rtree);
-
-    if (cache->pattern.surface) {
-        _cairo_pattern_fini (&cache->pattern.base);
-        cache->pattern.surface = NULL;
-    }
+    cairo_surface_destroy (&cache->surface->base);
 }
index aad2773..ffb5468 100644 (file)
@@ -124,9 +124,9 @@ _cairo_gl_gradient_render (const cairo_gl_context_t    *ctx,
        pixman_stops[i].color.alpha = stops[i].color.alpha_short;
     }
 
-    p1.x = 0;
+    p1.x = _cairo_fixed_16_16_from_double (0.5);
     p1.y = 0;
-    p2.x = width << 16;
+    p2.x = _cairo_fixed_16_16_from_double (width - 0.5);
     p2.y = 0;
 
     gradient = pixman_image_create_linear_gradient (&p1, &p2,
@@ -206,23 +206,23 @@ _cairo_gl_gradient_create (cairo_gl_context_t           *ctx,
     cairo_gl_gradient_t *gradient;
     cairo_status_t status;
     int tex_width;
+    GLint internal_format;
     void *data;
-    cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
 
     if ((unsigned int) ctx->max_texture_size / 2 <= n_stops)
-        return CAIRO_INT_STATUS_UNSUPPORTED;
+       return CAIRO_INT_STATUS_UNSUPPORTED;
 
     hash = _cairo_gl_gradient_hash (n_stops, stops);
 
     gradient = _cairo_gl_gradient_lookup (ctx, hash, n_stops, stops);
     if (gradient) {
-        *gradient_out = _cairo_gl_gradient_reference (gradient);
-        return CAIRO_STATUS_SUCCESS;
+       *gradient_out = _cairo_gl_gradient_reference (gradient);
+       return CAIRO_STATUS_SUCCESS;
     }
 
     gradient = malloc (sizeof (cairo_gl_gradient_t) + sizeof (cairo_gradient_stop_t) * (n_stops - 1));
     if (gradient == NULL)
-        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
     tex_width = _cairo_gl_gradient_sample_width (n_stops, stops);
 
@@ -238,38 +238,29 @@ _cairo_gl_gradient_create (cairo_gl_context_t           *ctx,
     _cairo_gl_context_activate (ctx, CAIRO_GL_TEX_TEMP);
     glBindTexture (ctx->tex_target, gradient->tex);
 
-    /* GL_PIXEL_UNPACK_BUFFER is only available in Desktop GL */
-    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP) {
-       dispatch->BindBuffer (GL_PIXEL_UNPACK_BUFFER, ctx->texture_load_pbo);
-       dispatch->BufferData (GL_PIXEL_UNPACK_BUFFER,
-                             tex_width * sizeof (uint32_t), 0, GL_STREAM_DRAW);
-       data = dispatch->MapBuffer (GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
-
-       status = _cairo_gl_gradient_render (ctx, n_stops, stops, data, tex_width);
-
-       dispatch->UnmapBuffer (GL_PIXEL_UNPACK_BUFFER);
-
-       if (unlikely (status)) {
-           dispatch->BindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
-           free (gradient);
-           return status;
-       }
-
-       glTexImage2D (ctx->tex_target, 0, GL_RGBA8, tex_width, 1, 0,
-                     GL_BGRA, GL_UNSIGNED_BYTE, 0);
-
-       dispatch->BindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
+    data = _cairo_malloc_ab (tex_width, sizeof (uint32_t));
+    if (unlikely (data == NULL)) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto cleanup_gradient;
     }
-    else {
-       data = _cairo_malloc_ab (tex_width, sizeof (uint32_t));
 
-       status = _cairo_gl_gradient_render (ctx, n_stops, stops, data, tex_width);
+    status = _cairo_gl_gradient_render (ctx, n_stops, stops, data, tex_width);
+    if (unlikely (status))
+       goto cleanup_data;
 
-       glTexImage2D (ctx->tex_target, 0, GL_BGRA, tex_width, 1, 0,
-                     GL_BGRA, GL_UNSIGNED_BYTE, data);
+    /*
+     * In OpenGL ES 2.0 no format conversion is allowed i.e. 'internalFormat'
+     * must match 'format' in glTexImage2D.
+     */
+    if (_cairo_gl_get_flavor () == CAIRO_GL_FLAVOR_ES)
+       internal_format = GL_BGRA;
+    else
+       internal_format = GL_RGBA;
 
-       free (data);
-    }
+    glTexImage2D (ctx->tex_target, 0, internal_format, tex_width, 1, 0,
+                 GL_BGRA, GL_UNSIGNED_BYTE, data);
+
+    free (data);
 
     /* we ignore errors here and just return an uncached gradient */
     if (unlikely (_cairo_cache_insert (&ctx->gradients, &gradient->cache_entry)))
@@ -277,6 +268,12 @@ _cairo_gl_gradient_create (cairo_gl_context_t           *ctx,
 
     *gradient_out = gradient;
     return CAIRO_STATUS_SUCCESS;
+
+cleanup_data:
+    free (data);
+cleanup_gradient:
+    free (gradient);
+    return status;
 }
 
 cairo_gl_gradient_t *
diff --git a/src/cairo-gl-hairline-stroke.c b/src/cairo-gl-hairline-stroke.c
new file mode 100644 (file)
index 0000000..47a0640
--- /dev/null
@@ -0,0 +1,429 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2012 Samsung Electronics
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Henry Song <hsong@sisa.samsung.com>
+ */
+
+#include "cairo-gl-private.h"
+#include "cairo-slope-private.h"
+
+#define SCALE_TOLERANCE 0.0000001
+#define POINT_ADJUST 0.5
+
+static inline cairo_bool_t
+_add_cap (cairo_gl_hairline_closure_t *hairline,
+          double                   slope_dx,
+          double                   slope_dy,
+          cairo_bool_t             lead_cap,
+          cairo_point_t            *outp)
+{
+    double dx, dy;
+    if (lead_cap) {
+        if (hairline->cap_style == CAIRO_LINE_CAP_BUTT)
+            return FALSE;
+
+        dx = slope_dx * POINT_ADJUST;
+        dy = slope_dy * POINT_ADJUST;
+
+        cairo_matrix_transform_distance (hairline->ctm, &dx, &dy);
+        outp->x -= _cairo_fixed_from_double (dx);
+        outp->y -= _cairo_fixed_from_double (dy);
+        return TRUE;
+    } else {
+        if (hairline->cap_style == CAIRO_LINE_CAP_BUTT)
+            return FALSE;
+
+        dx = slope_dx * POINT_ADJUST;
+        dy = slope_dy * POINT_ADJUST;
+        hairline->line_last_capped = TRUE;
+        cairo_matrix_transform_distance (hairline->ctm, &dx, &dy);
+        outp->x += _cairo_fixed_from_double (dx);
+        outp->y += _cairo_fixed_from_double (dy);
+        return TRUE;
+    }
+}
+
+static inline cairo_bool_t
+_compute_normalized_device_slope (double *dx, double *dy,
+                                  const cairo_matrix_t *ctm_inverse,
+                                  double *mag_out)
+{
+    double dx0 = *dx, dy0 = *dy;
+    double mag;
+
+    cairo_matrix_transform_distance (ctm_inverse, &dx0, &dy0);
+
+    if (dx0 == 0.0 && dy0 == 0.0) {
+        if (mag_out)
+            *mag_out = 0.0;
+        return FALSE;
+    }
+
+    if (dx0 == 0.0) {
+        *dx = 0.0;
+        if (dy0 > 0.0) {
+            mag = dy0;
+            *dy = 1.0;
+        } else {
+            mag = -dy0;
+            *dy = -1.0;
+        }
+    } else if (dy0 == 0.0) {
+        *dy = 0.0;
+        if (dx0 > 0.0) {
+            mag = dx0;
+            *dx = 1.0;
+        } else {
+            mag = -dx0;
+            *dx = -1.0;
+        }
+    } else {
+        mag = hypot (dx0, dy0);
+        *dx = dx0 / mag;
+        *dy = dy0 / mag;
+    }
+
+    if (mag_out)
+        *mag_out = mag;
+
+    return TRUE;
+}
+
+/* We implement hairline optimization for stroke. */
+cairo_bool_t
+_cairo_gl_hairline_style_is_hairline (const cairo_stroke_style_t *style,
+                                      const cairo_matrix_t       *ctm)
+{
+    double x, y;
+
+    cairo_status_t status = _cairo_matrix_compute_basis_scale_factors (ctm, &x, &y, TRUE);
+
+    if (unlikely (status))
+        return FALSE;
+
+    x = fabs (x - 1.0);
+    y = fabs (y - 1.0);
+
+    return style->line_width == 1.0 &&
+        (style->line_join != CAIRO_LINE_JOIN_MITER ||
+         style->miter_limit <= 10.0) &&
+        (x <= SCALE_TOLERANCE && y <= SCALE_TOLERANCE);
+}
+
+
+static cairo_status_t
+_path_add_first_and_last_cap (cairo_gl_hairline_closure_t *hairline)
+{
+    cairo_point_t p[2];
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
+    cairo_bool_t needs_to_cap;
+
+    /* check last point */
+    if (hairline->initialized) {
+        if (! hairline->line_last_capped) {
+            p[0] = hairline->line_last_point;
+            p[1] = hairline->line_last_point;
+            needs_to_cap = _add_cap (hairline,
+                                     hairline->line_last_dx,
+                                     hairline->line_last_dy,
+                                     FALSE,
+                                     &p[1]);
+            if (needs_to_cap) {
+                status = _cairo_gl_composite_emit_point_as_single_line (hairline->ctx, p);
+                if (unlikely(status))
+                    return status;
+            }
+        }
+        if (! hairline->stroke_first_capped) {
+            p[0] = hairline->stroke_first_point;
+            p[1] = hairline->stroke_first_point;
+            needs_to_cap = _add_cap (hairline,
+                                     hairline->stroke_first_dx,
+                                     hairline->stroke_first_dy,
+                                     TRUE,
+                                     &p[0]);
+
+            if (needs_to_cap) {
+                status = _cairo_gl_composite_emit_point_as_single_line (hairline->ctx, p);
+                if (unlikely(status))
+                    return status;
+            }
+        }
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_status_t
+_cairo_gl_hairline_move_to (void *closure,
+                            const cairo_point_t *point)
+{
+    cairo_status_t status;
+
+    cairo_gl_hairline_closure_t *hairline = (cairo_gl_hairline_closure_t *)closure;
+
+    hairline->current_point = *point;
+    hairline->moved_to_stroke_first_point = FALSE;
+
+    /* check last point */
+
+    if (hairline->initialized) {
+        status = _path_add_first_and_last_cap (hairline);
+        if (unlikely(status))
+            return status;
+    }
+
+    hairline->line_last_capped = TRUE;
+    hairline->stroke_first_capped = FALSE;
+    hairline->stroke_first_point = *point;
+    hairline->initialized = TRUE;
+
+    if (hairline->dash.dashed) {
+        _cairo_stroker_dash_start (&hairline->dash);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_status_t
+_cairo_gl_hairline_line_to (void *closure,
+                            const cairo_point_t *point)
+{
+    double slope_dx, slope_dy;
+    double mag;
+    cairo_gl_hairline_closure_t *hairline = (cairo_gl_hairline_closure_t *)closure;
+    cairo_point_t *p1 = &hairline->current_point;
+    cairo_slope_t dev_slope;
+    cairo_point_t p[2];
+
+    _cairo_slope_init (&dev_slope, p1, point);
+    slope_dx = _cairo_fixed_to_double (point->x - p1->x);
+    slope_dy = _cairo_fixed_to_double (point->y - p1->y);
+
+    if (! _compute_normalized_device_slope (&slope_dx, &slope_dy,
+                                            hairline->ctm_inverse, &mag))
+        return CAIRO_STATUS_SUCCESS;
+
+    hairline->line_last_point = *point;
+    hairline->line_last_capped = FALSE;
+    hairline->line_last_dx = slope_dx;
+    hairline->line_last_dy = slope_dy;
+
+    if (! hairline->moved_to_stroke_first_point) {
+        hairline->stroke_first_dx = slope_dx;
+        hairline->stroke_first_dy = slope_dy;
+        hairline->moved_to_stroke_first_point = TRUE;
+    }
+
+    p[0] = hairline->current_point;
+    p[1] = *point;
+    hairline->current_point = *point;
+
+    return _cairo_gl_composite_emit_point_as_single_line (hairline->ctx, p);
+}
+
+cairo_status_t
+_cairo_gl_hairline_line_to_dashed (void *closure,
+                                   const cairo_point_t *point)
+{
+    cairo_point_t p[2];
+    double remain, mag, step_length = 0;
+    double slope_dx, slope_dy;
+    double dx, dy;
+    cairo_line_t segment;
+    cairo_gl_hairline_closure_t *hairline = (cairo_gl_hairline_closure_t *)closure;
+    cairo_point_t *p1 = &hairline->current_point;
+    cairo_slope_t dev_slope;
+    cairo_status_t status;
+    cairo_bool_t needs_to_cap;
+
+    _cairo_slope_init (&dev_slope, p1, point);
+    slope_dx = _cairo_fixed_to_double (point->x - p1->x);
+    slope_dy = _cairo_fixed_to_double (point->y - p1->y);
+
+    if (! _compute_normalized_device_slope (&slope_dx, &slope_dy,
+                                            hairline->ctm_inverse, &mag))
+        return CAIRO_STATUS_SUCCESS;
+
+    remain = mag;
+    segment.p1 = *p1;
+    while (remain) {
+        step_length = MIN (hairline->dash.dash_remain, remain);
+        remain -= step_length;
+
+        dx = slope_dx * (mag - remain);
+        dy = slope_dy * (mag - remain);
+        cairo_matrix_transform_distance (hairline->ctm, &dx, &dy);
+        segment.p2.x = _cairo_fixed_from_double (dx) + p1->x;
+        segment.p2.y = _cairo_fixed_from_double (dy) + p1->y;
+
+
+        if (hairline->dash.dash_on) {
+            p[0] = segment.p1;
+            p[1] = segment.p2;
+            /* Check leading cap. */
+            if (segment.p1.x == hairline->stroke_first_point.x &&
+                segment.p1.y == hairline->stroke_first_point.y) {
+                /* We are at the first stroke point, and we have
+                   been here, add a leading cap. */
+                if (hairline->moved_to_stroke_first_point) {
+                    if (hairline->dash.dashes[hairline->dash.dash_index] == hairline->dash.dash_remain)
+                        needs_to_cap = _add_cap (hairline,
+                                                 slope_dx,
+                                                 slope_dy,
+                                                 TRUE, &p[0]);
+                }
+                else {
+                    /* We have not been in the first stroke point,
+                       this is the first line_to call sinece move_to()
+                       save the slope, we need use it later. */
+                    hairline->stroke_first_dx = slope_dx;
+                    hairline->stroke_first_dy = slope_dy;
+                    hairline->moved_to_stroke_first_point = TRUE;
+                }
+            }
+            else if (segment.p1.x == hairline->current_point.x &&
+                     segment.p1.y == hairline->current_point.y) {
+                /* Start of the line segment, if we have the entire
+                   dash length, we are at the begining of a dash,
+                   add a leading cap. */
+                if (hairline->dash.dashes[hairline->dash.dash_index] == hairline->dash.dash_remain)
+                    needs_to_cap = _add_cap (hairline,
+                                             slope_dx, slope_dy,
+                                             TRUE, &p[0]);
+            }
+            else
+                /* We are in the middle of the line segment, add
+                   a leading cap. */
+                needs_to_cap = _add_cap (hairline,
+                                         slope_dx, slope_dy,
+                                         TRUE, &p[0]);
+
+            /* Add trailing cap. We have not exhausted line segment,
+               or we have exhausted current dash length, add a
+               trailing cap. */
+            if (remain ||
+                hairline->dash.dash_remain - step_length < CAIRO_FIXED_ERROR_DOUBLE)
+                needs_to_cap = _add_cap (hairline,
+                                         slope_dx, slope_dy,
+                                         FALSE, &p[1]);
+            else {
+                /* We indicate here that we have not added a trailing
+                   cap yet.  If next move is move_to, we will add a
+                   trailing cap, otherwise, it will be ignored. */
+                hairline->line_last_capped = FALSE;
+                hairline->line_last_point = segment.p2;
+                hairline->line_last_dx = slope_dx;
+                hairline->line_last_dy = slope_dy;
+            }
+
+            status = _cairo_gl_composite_emit_point_as_single_line (hairline->ctx, p);
+            if (unlikely (status))
+                return status;
+        }
+
+        _cairo_stroker_dash_step (&hairline->dash, step_length);
+        segment.p1 = segment.p2;
+    }
+
+    hairline->current_point = *point;
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_status_t
+_cairo_gl_hairline_curve_to (void *closure,
+                             const cairo_point_t *p0,
+                             const cairo_point_t *p1,
+                             const cairo_point_t *p2)
+{
+    cairo_gl_hairline_closure_t *hairline = (cairo_gl_hairline_closure_t *)closure;
+    cairo_spline_t spline;
+    cairo_path_fixed_line_to_func_t *line_to;
+
+    line_to = hairline->dash.dashed ?
+        _cairo_gl_hairline_line_to_dashed :
+        _cairo_gl_hairline_line_to;
+
+    if (! _cairo_spline_init (&spline,
+                              (cairo_spline_add_point_func_t)line_to,
+                              closure,
+                              &hairline->current_point, p0, p1, p2))
+        return _cairo_gl_hairline_line_to (closure, p2);
+
+    return _cairo_spline_decompose (&spline, hairline->tolerance);
+
+}
+
+cairo_status_t
+_cairo_gl_hairline_close_path (void *closure)
+{
+    cairo_gl_hairline_closure_t *hairline = (cairo_gl_hairline_closure_t *)closure;
+
+    hairline->line_last_capped = TRUE;
+    hairline->stroke_first_capped = TRUE;
+
+    if (hairline->dash.dashed)
+        return _cairo_gl_hairline_line_to_dashed (closure,
+                                                  &hairline->stroke_first_point);
+    return _cairo_gl_hairline_line_to (closure, &hairline->stroke_first_point);
+}
+
+cairo_status_t
+_cairo_gl_path_fixed_stroke_to_hairline (const cairo_path_fixed_t *path,
+                                         cairo_gl_hairline_closure_t *closure,
+                                         const cairo_stroke_style_t *style,
+                                         const cairo_matrix_t *ctm,
+                                         const cairo_matrix_t *ctm_inverse,
+                                         cairo_path_fixed_move_to_func_t *move_to,
+                                         cairo_path_fixed_line_to_func_t *line_to,
+                                         cairo_path_fixed_curve_to_func_t *curve_to,
+                                         cairo_path_fixed_close_path_func_t *close_path)
+{
+    cairo_status_t status;
+
+    _cairo_stroker_dash_init (&closure->dash, style);
+    closure->ctm = (cairo_matrix_t *)ctm;
+    closure->ctm_inverse = (cairo_matrix_t *)ctm_inverse;
+    closure->cap_style = style->line_cap;
+    closure->initialized = FALSE;
+
+    status = _cairo_path_fixed_interpret (path,
+                                          move_to,
+                                          line_to,
+                                          curve_to,
+                                          close_path,
+                                          (void *) closure);
+    if (unlikely (status))
+        return status;
+
+    return _path_add_first_and_last_cap (closure);
+}
diff --git a/src/cairo-gl-msaa-compositor.c b/src/cairo-gl-msaa-compositor.c
new file mode 100755 (executable)
index 0000000..fc7bd56
--- /dev/null
@@ -0,0 +1,1089 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2002 University of Southern California
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2011 Intel Corporation
+ * Copyright Â© 2011 Samsung Electronics
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is University of Southern
+ * California.
+ *
+ * Contributor(s):
+ *     Henry Song <hsong@sisa.samsung.com>
+ *     Martin Robinson <mrobinson@igalia.com>
+ */
+
+#include "cairoint.h"
+
+#include "cairo-clip-inline.h"
+#include "cairo-composite-rectangles-private.h"
+#include "cairo-compositor-private.h"
+#include "cairo-gl-private.h"
+#include "cairo-traps-private.h"
+#include "cairo-surface-subsurface-inline.h"
+
+static cairo_bool_t
+should_fall_back (cairo_gl_surface_t *surface,
+                 cairo_antialias_t antialias);
+
+struct _tristrip_composite_info {
+    cairo_gl_composite_t       setup;
+    cairo_gl_context_t         *ctx;
+};
+
+static cairo_int_status_t
+_draw_trap (cairo_gl_context_t         *ctx,
+           cairo_gl_composite_t        *setup,
+           cairo_trapezoid_t           *trap)
+{
+    cairo_point_t quad[4];
+
+    quad[0].x = _cairo_edge_compute_intersection_x_for_y (&trap->left.p1,
+                                                         &trap->left.p2,
+                                                         trap->top);
+    quad[0].y = trap->top;
+
+    quad[1].x = _cairo_edge_compute_intersection_x_for_y (&trap->left.p1,
+                                                     &trap->left.p2,
+                                                     trap->bottom);
+    quad[1].y = trap->bottom;
+
+    quad[2].x = _cairo_edge_compute_intersection_x_for_y (&trap->right.p1,
+                                                     &trap->right.p2,
+                                                     trap->bottom);
+    quad[2].y = trap->bottom;
+
+    quad[3].x = _cairo_edge_compute_intersection_x_for_y (&trap->right.p1,
+                                                     &trap->right.p2,
+                                                     trap->top);
+    quad[3].y = trap->top;
+    return _cairo_gl_composite_emit_quad_as_tristrip (ctx, setup, quad);
+}
+
+static cairo_int_status_t
+_draw_traps (cairo_gl_context_t                *ctx,
+            cairo_gl_composite_t       *setup,
+            cairo_traps_t              *traps)
+{
+    cairo_int_status_t status = CAIRO_STATUS_SUCCESS;
+    int i;
+
+    for (i = 0; i < traps->num_traps; i++) {
+       cairo_trapezoid_t *trap = traps->traps + i;
+       if (unlikely ((status = _draw_trap (ctx, setup, trap))))
+           return status;
+    }
+
+   return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_draw_quad (cairo_gl_context_t        *ctx,
+                                    cairo_gl_composite_t       *setup,
+                                    cairo_box_t                *box)
+{
+    cairo_point_t quad[4];
+
+    quad[0].x = box->p1.x;
+    quad[0].y = box->p1.y;
+
+    quad[1].x = box->p1.x;
+    quad[1].y = box->p2.y;
+
+    quad[2].x = box->p2.x;
+    quad[2].y = box->p2.y;
+
+    quad[3].x = box->p2.x;
+    quad[3].y = box->p1.y;
+
+    return _cairo_gl_composite_emit_quad_as_tristrip (ctx, setup, quad);
+}
+
+static cairo_int_status_t
+_draw_int_rect (cairo_gl_context_t     *ctx,
+               cairo_gl_composite_t    *setup,
+               cairo_rectangle_int_t   *rect)
+{
+    cairo_box_t box;
+
+    _cairo_box_from_rectangle (&box, rect);
+
+    return _cairo_gl_msaa_compositor_draw_quad (ctx, setup, &box);
+}
+
+static cairo_int_status_t
+_draw_triangle_fan (cairo_gl_context_t         *ctx,
+                   cairo_gl_composite_t        *setup,
+                   const cairo_point_t         *midpt,
+                   const cairo_point_t         *points,
+                   int                          npoints)
+{
+    int i;
+
+    /* Our strategy here is to not even try to build a triangle fan, but to
+       draw each triangle as if it was an unconnected member of a triangle strip. */
+    for (i = 1; i < npoints; i++) {
+       cairo_int_status_t status;
+       cairo_point_t triangle[3];
+
+       triangle[0] = *midpt;
+       triangle[1] = points[i - 1];
+       triangle[2] = points[i];
+
+       status = _cairo_gl_composite_emit_triangle_as_tristrip (ctx, setup, triangle);
+       if (unlikely (status))
+           return status;
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_int_status_t
+_cairo_gl_msaa_compositor_draw_clip (cairo_gl_context_t                *ctx,
+                                    cairo_gl_composite_t       *setup,
+                                    cairo_clip_t               *clip,
+                                    cairo_traps_t              *traps)
+{
+    cairo_int_status_t status;
+
+    cairo_polygon_t polygon;
+    cairo_antialias_t antialias;
+    cairo_fill_rule_t fill_rule;
+
+    if (! clip)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (clip->num_boxes == 1 && ! clip->path)
+       return _cairo_gl_msaa_compositor_draw_quad (ctx, setup,
+                                                   &clip->boxes[0]);
+
+    if (traps->num_traps == 0) {
+       status = _cairo_clip_get_polygon (clip, &polygon, &fill_rule,
+                                         &antialias);
+       if (unlikely (status))
+           return status;
+
+    /* We ignore the antialias mode of the clip here, since the user requested
+     * unantialiased rendering of their path and we expect that this stencil
+     * based rendering of the clip to be a reasonable approximation to
+     * the intersection between that clip and the path.
+     *
+     * In other words, what the user expects when they try to perform
+     * a geometric intersection between an unantialiased polygon and an
+     * antialiased polygon is open to interpretation. And we choose the fast
+     * option.
+     */
+       status = _cairo_bentley_ottmann_tessellate_polygon (traps,
+                                                           &polygon,
+                                                           fill_rule);
+       _cairo_polygon_fini (&polygon);
+       if (unlikely (status))
+           return status;
+    }
+
+    status = _draw_traps (ctx, setup, traps);
+
+    return status;
+}
+
+static cairo_bool_t
+_should_use_unbounded_surface (cairo_composite_rectangles_t *composite)
+{
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+    cairo_rectangle_int_t *source = &composite->source;
+
+    if (composite->is_bounded)
+       return FALSE;
+
+    /* This isn't just an optimization. It also detects when painting is used
+       to paint back the unbounded surface, preventing infinite recursion. */
+    return ! (source->x <= 0 && source->y <= 0 &&
+              source->height + source->y >= dst->height &&
+              source->width + source->x >= dst->width);
+}
+
+static cairo_surface_t*
+_prepare_unbounded_surface (cairo_gl_surface_t *dst)
+{
+
+    cairo_surface_t* surface = cairo_gl_surface_create (dst->base.device,
+                                                       dst->base.content,
+                                                       dst->width,
+                                                       dst->height);
+    if (surface == NULL)
+        return NULL;
+    if (unlikely (surface->status)) {
+        cairo_surface_destroy (surface);
+        return NULL;
+    }
+    return surface;
+}
+
+static cairo_int_status_t
+_paint_back_unbounded_surface (const cairo_compositor_t                *compositor,
+                              cairo_composite_rectangles_t     *composite,
+                              cairo_surface_t                  *surface)
+{
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+    cairo_int_status_t status;
+
+    cairo_pattern_t *pattern = cairo_pattern_create_for_surface (surface);
+    if (unlikely (pattern->status)) {
+       status = pattern->status;
+       goto finish;
+    }
+
+    status = _cairo_compositor_paint (compositor, &dst->base,
+                                     composite->op, pattern,
+                                     composite->clip);
+
+finish:
+    cairo_pattern_destroy (pattern);
+    cairo_surface_destroy (surface);
+    return status;
+}
+
+static void
+_cairo_gl_msaa_compositor_set_clip (cairo_composite_rectangles_t *composite,
+                                   cairo_gl_composite_t *setup)
+{
+    uint32_t is_bounded;
+
+    if (_cairo_clip_is_all_clipped (composite->clip))
+       return;
+
+    /* We don't need to check CAIRO_OPERATOR_BOUND_BY_MASK in these
+       situations. */
+    is_bounded = composite->is_bounded;
+    composite->is_bounded = CAIRO_OPERATOR_BOUND_BY_SOURCE;
+    if (_cairo_composite_rectangles_can_reduce_clip (composite, composite->clip))
+       return;
+
+    _cairo_gl_composite_set_clip (setup, composite->clip);
+
+    composite->is_bounded = is_bounded;
+}
+
+static void
+_gl_pattern_fix_reference_count (const cairo_pattern_t *pattern)
+{
+   cairo_pattern_type_t pattern_type = cairo_pattern_get_type ((cairo_pattern_t *)pattern);
+
+   /* We need to increase reference count on surface and gradient if
+      the original_source_pattern is a cairo_gl_source_t type. */
+    if (pattern_type == CAIRO_PATTERN_TYPE_SURFACE) {
+
+       cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *)pattern;
+       cairo_surface_t *pattern_surface = surface_pattern->surface;
+
+       if (cairo_surface_get_type (pattern_surface) == CAIRO_SURFACE_TYPE_GL &&
+           ! pattern_surface->device &&
+           ! _cairo_surface_is_subsurface (pattern_surface)) {
+
+           cairo_gl_source_t *_source = (cairo_gl_source_t *)pattern_surface;
+
+           switch (_source->operand.type) {
+           case CAIRO_GL_OPERAND_TEXTURE:
+               cairo_surface_reference (&(_source->operand.texture.owns_surface)->base);
+               break;
+           case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
+           case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
+           case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
+           case CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT:
+               _cairo_gl_gradient_reference (_source->operand.gradient.gradient);
+               break;
+           default:
+           case CAIRO_GL_OPERAND_NONE:
+           case CAIRO_GL_OPERAND_CONSTANT:
+           case CAIRO_GL_OPERAND_COUNT:
+               break;
+           }
+       }
+    }
+}
+
+/* We use two passes to paint with SOURCE operator */
+/* The first pass, we use mask as source, to get dst1 = (1 - ma) * dst) with
+ * DEST_OUT operator.  In the second pass, we use ADD operator to achieve
+ * result = (src * ma) + dst1.  Combining two passes, we have
+ * result = (src * ma) + (1 - ma) * dst
+ */
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_mask_source_operator (const cairo_compositor_t *compositor,
+                                               cairo_composite_rectangles_t *composite)
+{
+    cairo_gl_composite_t setup;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+    cairo_gl_context_t *ctx = NULL;
+    cairo_int_status_t status;
+    cairo_traps_t traps;
+
+    _cairo_traps_init (&traps);
+
+    status = _cairo_gl_composite_init (&setup,
+                                      CAIRO_OPERATOR_DEST_OUT,
+                                      dst,
+                                      FALSE /* assume_component_alpha */);
+    if (unlikely (status))
+       goto finish;
+
+    _gl_pattern_fix_reference_count (composite->original_mask_pattern);
+
+    status = _cairo_gl_composite_set_source (&setup,
+                                            &composite->mask_pattern.base,
+                                            &composite->mask_sample_area,
+                                            &composite->bounded,
+                                            FALSE);
+    if (unlikely (status))
+       goto finish;
+
+    status = _cairo_gl_composite_begin_multisample (&setup, &ctx, TRUE);
+    if (unlikely (status))
+       goto finish;
+
+    if (! composite->clip)
+       status = _draw_int_rect (ctx, &setup, &composite->bounded);
+    else
+       status = _cairo_gl_msaa_compositor_draw_clip (ctx, &setup, composite->clip, &traps);
+
+    _cairo_gl_composite_fini (&setup);
+    status = _cairo_gl_context_release (ctx, status);
+    ctx = NULL;
+    if (unlikely (status))
+        return status;
+
+     /* second pass */
+    status = _cairo_gl_composite_init (&setup,
+                                      CAIRO_OPERATOR_ADD,
+                                      dst,
+                                      FALSE /* assume_component_alpha */);
+    if (unlikely (status))
+       goto finish;
+
+    _gl_pattern_fix_reference_count (composite->original_source_pattern);
+
+    status = _cairo_gl_composite_set_source (&setup,
+                                            &composite->source_pattern.base,
+                                            &composite->source_sample_area,
+                                            &composite->bounded,
+                                            FALSE);
+    if (unlikely (status))
+       goto finish;
+
+    status = _cairo_gl_composite_set_mask (&setup,
+                                          &composite->mask_pattern.base,
+                                          &composite->source_sample_area,
+                                          &composite->bounded);
+    if (unlikely (status))
+       goto finish;
+
+    /* We always use multisampling here, because we do not yet have the smarts
+       to calculate when the clip or the source requires it. */
+    status = _cairo_gl_composite_begin_multisample (&setup, &ctx, TRUE);
+    if (unlikely (status))
+       goto finish;
+
+    if (! composite->clip)
+       status = _draw_int_rect (ctx, &setup, &composite->bounded);
+    else
+       status = _cairo_gl_msaa_compositor_draw_clip (ctx, &setup, composite->clip, &traps);
+
+finish:
+    _cairo_traps_fini (&traps);
+    _cairo_gl_composite_fini (&setup);
+
+    if (ctx)
+       status = _cairo_gl_context_release (ctx, status);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_mask (const cairo_compositor_t       *compositor,
+                               cairo_composite_rectangles_t    *composite)
+{
+    cairo_gl_composite_t setup;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+    cairo_gl_context_t *ctx = NULL;
+    cairo_int_status_t status;
+    cairo_operator_t op = composite->op;
+    cairo_traps_t traps;
+    cairo_bool_t use_color_attribute = FALSE;
+
+    if (should_fall_back (dst, CAIRO_ANTIALIAS_GOOD))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* GL compositing operators cannot properly represent a mask operation
+       using the SOURCE compositing operator in one pass. This only matters if
+       there actually is a mask (there isn't in a paint operation) and if the
+       mask isn't totally opaque. */
+    if (op == CAIRO_OPERATOR_SOURCE &&
+        composite->original_mask_pattern != NULL &&
+       ! _cairo_pattern_is_opaque (&composite->mask_pattern.base,
+                                   &composite->mask_sample_area)) {
+
+       /* If the source is opaque the operation reduces to OVER. */
+       if (_cairo_pattern_is_opaque (&composite->source_pattern.base,
+                                     &composite->source_sample_area))
+           op = CAIRO_OPERATOR_OVER;
+       else
+           return _cairo_gl_msaa_compositor_mask_source_operator (compositor, composite);
+    }
+
+    if (_should_use_unbounded_surface (composite)) {
+       cairo_surface_t* surface = _prepare_unbounded_surface (dst);
+
+       if (unlikely (surface == NULL))
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       /* This may be a paint operation. */
+       if (composite->original_mask_pattern == NULL) {
+           status = _cairo_compositor_paint (compositor, surface,
+                                             CAIRO_OPERATOR_SOURCE,
+                                             &composite->source_pattern.base,
+                                             NULL);
+       } else {
+           status = _cairo_compositor_mask (compositor, surface,
+                                            CAIRO_OPERATOR_SOURCE,
+                                            &composite->source_pattern.base,
+                                            &composite->mask_pattern.base,
+                                            NULL);
+       }
+
+       if (unlikely (status)) {
+           cairo_surface_destroy (surface);
+           return status;
+       }
+
+       return _paint_back_unbounded_surface (compositor, composite, surface);
+    }
+
+    status = _cairo_gl_composite_init (&setup,
+                                      op,
+                                      dst,
+                                      FALSE /* assume_component_alpha */);
+    if (unlikely (status))
+       goto finish;
+
+    _gl_pattern_fix_reference_count (composite->original_source_pattern);
+
+    if (! composite->clip ||
+       (composite->clip->num_boxes == 1 && ! composite->clip->path))
+       use_color_attribute = TRUE;
+
+    status = _cairo_gl_composite_set_source (&setup,
+                                            composite->original_source_pattern,
+                                            &composite->source_sample_area,
+                                            &composite->bounded,
+                                            use_color_attribute);
+    if (unlikely (status))
+       goto finish;
+
+    if (composite->original_mask_pattern != NULL) {
+       status = _cairo_gl_composite_set_mask (&setup,
+                                              composite->original_mask_pattern,
+                                              &composite->mask_sample_area,
+                                              &composite->bounded);
+    }
+    if (unlikely (status))
+       goto finish;
+
+    /* We always use multisampling here, because we do not yet have the smarts
+       to calculate when the clip or the source requires it. */
+    status = _cairo_gl_composite_begin_multisample (&setup, &ctx, TRUE);
+    if (unlikely (status))
+       goto finish;
+
+    _cairo_traps_init (&traps);
+
+    if (! composite->clip)
+       status = _draw_int_rect (ctx, &setup, &composite->bounded);
+    else
+       status = _cairo_gl_msaa_compositor_draw_clip (ctx, &setup, composite->clip, &traps);
+
+    _cairo_traps_fini (&traps);
+
+finish:
+    _cairo_gl_composite_fini (&setup);
+
+    if (ctx)
+       status = _cairo_gl_context_release (ctx, status);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_paint (const cairo_compositor_t      *compositor,
+                                cairo_composite_rectangles_t   *composite)
+{
+    return _cairo_gl_msaa_compositor_mask (compositor, composite);
+}
+
+static cairo_status_t
+_stroke_shaper_add_triangle (void                      *closure,
+                            const cairo_point_t         triangle[3])
+{
+    struct _tristrip_composite_info *info = closure;
+    return _cairo_gl_composite_emit_triangle_as_tristrip (info->ctx,
+                                                         &info->setup,
+                                                         triangle);
+}
+
+static cairo_status_t
+_stroke_shaper_add_triangle_fan (void                  *closure,
+                                const cairo_point_t    *midpoint,
+                                const cairo_point_t    *points,
+                                int                     npoints)
+{
+    struct _tristrip_composite_info *info = closure;
+    return _draw_triangle_fan (info->ctx, &info->setup,
+                              midpoint, points, npoints);
+}
+
+static cairo_status_t
+_stroke_shaper_add_quad (void                  *closure,
+                        const cairo_point_t     quad[4])
+{
+    struct _tristrip_composite_info *info = closure;
+    return _cairo_gl_composite_emit_quad_as_tristrip (info->ctx, &info->setup,
+                                                     quad);
+}
+
+static cairo_int_status_t
+_prevent_overlapping_drawing (cairo_gl_context_t               *ctx,
+                             cairo_gl_composite_t              *setup,
+                             cairo_composite_rectangles_t      *composite,
+                             const cairo_path_fixed_t          *path,
+                             const cairo_stroke_style_t        *style,
+                             const cairo_matrix_t              *ctm)
+{
+    cairo_rectangle_int_t stroke_extents;
+    const cairo_pattern_t *pattern = composite->original_source_pattern;
+    cairo_pattern_type_t type = cairo_pattern_get_type ((cairo_pattern_t *) pattern);
+
+    if (! _cairo_gl_ensure_stencil (ctx, setup->dst))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* XXX: improve me - since we have lazy init, we cannot use sample
+       area */
+    if (type == CAIRO_PATTERN_TYPE_SOLID &&
+       _cairo_pattern_is_opaque_solid (pattern))
+       return CAIRO_INT_STATUS_SUCCESS;
+
+   if (glIsEnabled (GL_STENCIL_TEST) == FALSE) {
+       /* In case we have pending operations we have to flush before
+         adding the stencil buffer. */
+       _cairo_gl_composite_flush (ctx);
+
+       /* Enable the stencil buffer, even if we are not using it for clipping,
+          so we can use it below to prevent overlapping shapes. We initialize
+          it all to one here which represents infinite clip. */
+       glDepthMask (GL_TRUE);
+       glEnable (GL_STENCIL_TEST);
+
+       /* If we don't have clip, then we will setup clip extents based on
+          approximate stroke extent. */
+       if (! setup->clip) {
+           _cairo_path_fixed_approximate_stroke_extents (path, style, ctm,
+                                                         &stroke_extents);
+           _cairo_gl_scissor_to_extents (setup->dst, &stroke_extents);
+       }
+
+       glClearStencil (1);
+       glClear (GL_STENCIL_BUFFER_BIT);
+       glStencilFunc (GL_EQUAL, 1, 1);
+    }
+
+    /* This means that once we draw to a particular pixel nothing else can
+       be drawn there until the stencil buffer is reset or the stencil test
+       is disabled. */
+    glStencilOp (GL_ZERO, GL_ZERO, GL_ZERO);
+
+    /* we need to clean up clip cache */
+    _cairo_clip_destroy (ctx->clip);
+    ctx->clip = NULL;
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static void
+query_surface_capabilities (cairo_gl_surface_t *surface)
+{
+    GLint samples, stencil_bits;
+    cairo_gl_context_t *ctx;
+    cairo_int_status_t status;
+
+    /* Texture surfaces are create in such a way that they always
+       have stencil and multisample bits if possible, so we don't
+       need to query their capabilities lazily. */
+    if (_cairo_gl_surface_is_texture (surface))
+       return;
+    if (surface->stencil_and_msaa_caps_initialized)
+       return;
+
+    surface->stencil_and_msaa_caps_initialized = TRUE;
+    surface->supports_stencil = FALSE;
+    surface->supports_msaa = FALSE;
+
+    status = _cairo_gl_context_acquire (surface->base.device, &ctx);
+    if (unlikely (status))
+       return;
+
+    _cairo_gl_context_set_destination (ctx, surface, FALSE);
+
+    glGetIntegerv(GL_SAMPLES, &samples);
+    glGetIntegerv(GL_STENCIL_BITS, &stencil_bits);
+    surface->supports_stencil = stencil_bits > 0;
+    surface->supports_msaa = samples > 1;
+
+    status = _cairo_gl_context_release (ctx, status);
+}
+
+static cairo_bool_t
+should_fall_back (cairo_gl_surface_t *surface,
+                 cairo_antialias_t antialias)
+{
+    query_surface_capabilities (surface);
+    if (! surface->supports_stencil)
+       return TRUE;
+
+    /* Multisampling OpenGL ES surfaces only maintain one multisampling
+       framebuffer and thus must use the spans compositor to do non
+       AA rendering */
+    if (((cairo_gl_context_t *) surface->base.device)->gl_flavor == CAIRO_GL_FLAVOR_ES
+        && surface->supports_msaa
+        && antialias == CAIRO_ANTIALIAS_NONE)
+       return TRUE;
+
+    if (antialias == CAIRO_ANTIALIAS_FAST)
+       return TRUE;
+    if (antialias == CAIRO_ANTIALIAS_NONE)
+       return FALSE;
+    return ! surface->supports_msaa;
+}
+
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_stroke (const cairo_compositor_t     *compositor,
+                                 cairo_composite_rectangles_t  *composite,
+                                 const cairo_path_fixed_t      *path,
+                                 const cairo_stroke_style_t    *style,
+                                 const cairo_matrix_t          *ctm,
+                                 const cairo_matrix_t          *ctm_inverse,
+                                 double                         tolerance,
+                                 cairo_antialias_t              antialias)
+{
+    cairo_int_status_t status;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+    struct _tristrip_composite_info info;
+    cairo_bool_t use_color_attribute;
+
+    if (should_fall_back (dst, antialias))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (composite->is_bounded == FALSE) {
+       cairo_surface_t* surface = _prepare_unbounded_surface (dst);
+
+       if (unlikely (surface == NULL))
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       status = _cairo_compositor_stroke (compositor, surface,
+                                          CAIRO_OPERATOR_SOURCE,
+                                          &composite->source_pattern.base,
+                                          path, style, ctm, ctm_inverse,
+                                          tolerance, antialias, NULL);
+       if (unlikely (status)) {
+           cairo_surface_destroy (surface);
+           return status;
+       }
+
+       return _paint_back_unbounded_surface (compositor, composite, surface);
+    }
+
+    status = _cairo_gl_composite_init (&info.setup,
+                                      composite->op,
+                                      dst,
+                                      FALSE /* assume_component_alpha */);
+    if (unlikely (status))
+       return status;
+
+    info.ctx = NULL;
+    use_color_attribute = _cairo_path_fixed_stroke_is_rectilinear (path) ||
+                         _cairo_gl_hairline_style_is_hairline (style, ctm);
+
+    status = _cairo_gl_composite_set_source (&info.setup,
+                                            composite->original_source_pattern,
+                                            &composite->source_sample_area,
+                                            &composite->bounded,
+                                            use_color_attribute);
+    if (unlikely (status))
+       goto finish;
+
+    _cairo_gl_msaa_compositor_set_clip (composite, &info.setup);
+
+    status = _cairo_gl_composite_begin_multisample (&info.setup, &info.ctx,
+       antialias != CAIRO_ANTIALIAS_NONE);
+    if (unlikely (status))
+       goto finish;
+
+    if (_cairo_gl_hairline_style_is_hairline (style, ctm)) {
+       cairo_gl_hairline_closure_t closure;
+
+       status = _prevent_overlapping_drawing (info.ctx, &info.setup,
+                                              composite, path, style, ctm);
+       if (unlikely (status))
+           goto finish;
+
+       closure.ctx = info.ctx;
+
+       closure.tolerance = tolerance;
+
+       status = _cairo_gl_path_fixed_stroke_to_hairline (path, &closure,
+                                                         style, ctm,
+                                                         ctm_inverse,
+                                                         _cairo_gl_hairline_move_to,
+                                                         style->dash ?
+                                                         _cairo_gl_hairline_line_to_dashed :
+                                                         _cairo_gl_hairline_line_to,
+                                                         _cairo_gl_hairline_curve_to,
+                                                         _cairo_gl_hairline_close_path);
+       goto finish;
+    }
+
+    if (use_color_attribute || path->has_curve_to) {
+       cairo_traps_t traps;
+
+       _cairo_traps_init (&traps);
+
+       status = _cairo_path_fixed_stroke_to_traps (path, style,
+                                                   ctm, ctm_inverse,
+                                                   tolerance, &traps);
+       if (unlikely (status)) {
+           _cairo_traps_fini (&traps);
+           goto finish;
+       }
+
+       status = _draw_traps (info.ctx, &info.setup, &traps);
+       _cairo_traps_fini (&traps);
+    } else {
+       status = _prevent_overlapping_drawing (info.ctx, &info.setup,
+                                              composite, path, style, ctm);
+       if (unlikely (status))
+           goto finish;
+
+       status =
+           _cairo_path_fixed_stroke_to_shaper ((cairo_path_fixed_t *) path,
+                                               style,
+                                               ctm,
+                                               ctm_inverse,
+                                               tolerance,
+                                               _stroke_shaper_add_triangle,
+                                               _stroke_shaper_add_triangle_fan,
+                                               _stroke_shaper_add_quad,
+                                               &info);
+       if (unlikely (status))
+           goto finish;
+    }
+finish:
+    _cairo_gl_composite_fini (&info.setup);
+
+    if (info.ctx)
+       status = _cairo_gl_context_release (info.ctx, status);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_fill_rectilinear (const cairo_compositor_t *compositor,
+                                           cairo_composite_rectangles_t *composite,
+                                           const cairo_path_fixed_t *path,
+                                           cairo_fill_rule_t fill_rule,
+                                           double tolerance,
+                                           cairo_antialias_t antialias,
+                                           cairo_clip_t *clip)
+{
+    cairo_gl_composite_t setup;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+    cairo_gl_context_t *ctx = NULL;
+    cairo_int_status_t status;
+    int i;
+
+    status = _cairo_gl_composite_init (&setup,
+                                      composite->op,
+                                      dst,
+                                      FALSE /* assume_component_alpha */);
+    if (unlikely (status))
+       goto cleanup_setup;
+
+    status = _cairo_gl_composite_set_source (&setup,
+                                            composite->original_source_pattern,
+                                            &composite->source_sample_area,
+                                            &composite->bounded,
+                                            TRUE);
+    if (unlikely (status))
+       goto cleanup_setup;
+
+    status = _cairo_gl_composite_begin_multisample (&setup, &ctx,
+       antialias != CAIRO_ANTIALIAS_NONE);
+    if (unlikely (status))
+       goto cleanup_setup;
+
+    for (i = 0; i < clip->num_boxes; i++) {
+       status = _cairo_gl_msaa_compositor_draw_quad (ctx, &setup,
+                                                     &clip->boxes[i]);
+       if (unlikely (status))
+           goto cleanup_setup;
+    }
+
+cleanup_setup:
+    _cairo_gl_composite_fini (&setup);
+
+    if (ctx)
+       status = _cairo_gl_context_release (ctx, status);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_fill (const cairo_compositor_t       *compositor,
+                               cairo_composite_rectangles_t    *composite,
+                               const cairo_path_fixed_t        *path,
+                               cairo_fill_rule_t                fill_rule,
+                               double                           tolerance,
+                               cairo_antialias_t                antialias)
+{
+    cairo_gl_composite_t setup;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+    cairo_gl_context_t *ctx = NULL;
+    cairo_int_status_t status = CAIRO_INT_STATUS_SUCCESS;
+    cairo_traps_t traps;
+    cairo_bool_t use_color_attr = FALSE;
+
+    if (should_fall_back (dst, antialias))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (composite->is_bounded == FALSE) {
+       cairo_surface_t* surface = _prepare_unbounded_surface (dst);
+
+       if (unlikely (surface == NULL))
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+
+       status = _cairo_compositor_fill (compositor, surface,
+                                        CAIRO_OPERATOR_SOURCE,
+                                        &composite->source_pattern.base,
+                                        path, fill_rule, tolerance,
+                                        antialias, NULL);
+
+       if (unlikely (status)) {
+           cairo_surface_destroy (surface);
+           return status;
+       }
+
+       return _paint_back_unbounded_surface (compositor, composite, surface);
+    }
+
+    if (_cairo_path_fixed_fill_is_rectilinear (path) &&
+       composite->clip != NULL &&
+       composite->clip->num_boxes == 1 &&
+       composite->clip->path == NULL) {
+       cairo_clip_t *clip = _cairo_clip_copy (composite->clip);
+       clip = _cairo_clip_intersect_rectilinear_path (clip,
+                                                      path,
+                                                      fill_rule,
+                                                      antialias);
+       if (clip->num_boxes)
+               status = _cairo_gl_msaa_compositor_fill_rectilinear (compositor,
+                                                                    composite,
+                                                                    path,
+                                                                    fill_rule,
+                                                                    tolerance,
+                                                                    antialias,
+                                                                    clip);
+       _cairo_clip_destroy (clip);
+
+       return status;
+    }
+
+    status = _cairo_gl_composite_init (&setup,
+                                      composite->op,
+                                      dst,
+                                      FALSE /* assume_component_alpha */);
+    if (unlikely (status)) {
+        _cairo_gl_composite_fini (&setup);
+       return status;
+    }
+
+    _cairo_traps_init (&traps);
+
+    if (_cairo_path_fixed_fill_is_rectilinear (path)) {
+       status = _cairo_path_fixed_fill_rectilinear_to_traps (path,
+                                                             fill_rule,
+                                                             antialias,
+                                                             &traps);
+       use_color_attr = TRUE;
+    } else
+       status = _cairo_path_fixed_fill_to_traps (path, fill_rule,
+                                                 tolerance, &traps);
+    if (unlikely (status))
+       goto cleanup_traps;
+
+    status = _cairo_gl_composite_set_source (&setup,
+                                            composite->original_source_pattern,
+                                            &composite->source_sample_area,
+                                            &composite->bounded,
+                                            use_color_attr);
+    if (unlikely (status))
+       goto cleanup_setup;
+
+    _cairo_gl_msaa_compositor_set_clip (composite, &setup);
+
+    status = _cairo_gl_composite_begin_multisample (&setup, &ctx,
+       antialias != CAIRO_ANTIALIAS_NONE);
+    if (unlikely (status))
+       goto cleanup_setup;
+
+    status = _draw_traps (ctx, &setup, &traps);
+    if (unlikely (status))
+        goto cleanup_setup;
+
+cleanup_setup:
+    _cairo_gl_composite_fini (&setup);
+
+    if (ctx)
+       status = _cairo_gl_context_release (ctx, status);
+
+cleanup_traps:
+    _cairo_traps_fini (&traps);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_msaa_compositor_glyphs (const cairo_compositor_t     *compositor,
+                                 cairo_composite_rectangles_t  *composite,
+                                 cairo_scaled_font_t           *scaled_font,
+                                 cairo_glyph_t                 *glyphs,
+                                 int                            num_glyphs,
+                                 cairo_bool_t                   overlap)
+{
+    cairo_int_status_t status;
+    cairo_surface_t *src = NULL;
+    int src_x, src_y;
+    cairo_composite_glyphs_info_t info;
+
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface;
+
+    query_surface_capabilities (dst);
+    if (! dst->supports_stencil)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (composite->is_bounded == FALSE) {
+       cairo_surface_t* surface = _prepare_unbounded_surface (dst);
+
+       if (unlikely (surface == NULL))
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       status = _cairo_compositor_glyphs (compositor, surface,
+                                          CAIRO_OPERATOR_SOURCE,
+                                          &composite->source_pattern.base,
+                                          glyphs, num_glyphs,
+                                          scaled_font, composite->clip);
+
+       if (unlikely (status)) {
+           cairo_surface_destroy (surface);
+           return status;
+       }
+
+       return _paint_back_unbounded_surface (compositor, composite, surface);
+    }
+
+    src = _cairo_gl_pattern_to_source (&dst->base,
+                                      composite->original_source_pattern,
+                                      FALSE,
+                                      &composite->bounded,
+                                      &composite->source_sample_area,
+                                      &src_x, &src_y);
+    if (unlikely (src->status)) {
+       status = src->status;
+       goto finish;
+    }
+
+    status = _cairo_gl_check_composite_glyphs (composite,
+                                              scaled_font, glyphs,
+                                              &num_glyphs);
+    if (unlikely (status != CAIRO_INT_STATUS_SUCCESS))
+       goto finish;
+
+    info.font = scaled_font;
+    info.glyphs = glyphs;
+    info.num_glyphs = num_glyphs;
+    info.use_mask = overlap || ! composite->is_bounded ||
+                   composite->op == CAIRO_OPERATOR_SOURCE;
+    info.extents = composite->bounded;
+
+    _cairo_scaled_font_freeze_cache (scaled_font);
+    status = _cairo_gl_composite_glyphs_with_clip (dst, composite->op,
+                                                  src, src_x, src_y,
+                                                  0, 0, &info,
+                                                  composite->clip,
+                                                  TRUE);
+
+    _cairo_scaled_font_thaw_cache (scaled_font);
+
+finish:
+    if (src)
+       cairo_surface_destroy (src);
+
+    return status;
+}
+
+static void
+_cairo_gl_msaa_compositor_init (cairo_compositor_t      *compositor,
+                               const cairo_compositor_t *delegate)
+{
+    compositor->delegate = delegate;
+    compositor->lazy_init = TRUE;
+
+    compositor->paint = _cairo_gl_msaa_compositor_paint;
+    compositor->mask = _cairo_gl_msaa_compositor_mask;
+    compositor->fill = _cairo_gl_msaa_compositor_fill;
+    compositor->stroke = _cairo_gl_msaa_compositor_stroke;
+    compositor->glyphs = _cairo_gl_msaa_compositor_glyphs;
+}
+
+const cairo_compositor_t *
+_cairo_gl_msaa_compositor_get (void)
+{
+    static cairo_compositor_t compositor;
+    if (compositor.delegate == NULL)
+       _cairo_gl_msaa_compositor_init (&compositor,
+                                       _cairo_gl_span_compositor_get ());
+
+    return &compositor;
+}
index a7e187e..3298601 100644 (file)
@@ -50,7 +50,9 @@
 #include "cairo-image-surface-private.h"
 #include "cairo-surface-backend-private.h"
 #include "cairo-surface-offset-private.h"
-#include "cairo-surface-subsurface-private.h"
+#include "cairo-surface-snapshot-inline.h"
+#include "cairo-surface-subsurface-inline.h"
+#include "cairo-rtree-private.h"
 
 static cairo_int_status_t
 _cairo_gl_create_gradient_texture (cairo_gl_surface_t *dst,
@@ -69,62 +71,485 @@ _cairo_gl_create_gradient_texture (cairo_gl_surface_t *dst,
     return _cairo_gl_context_release (ctx, status);
 }
 
+static cairo_int_status_t
+_resolve_multisampling (cairo_gl_surface_t *surface)
+{
+    cairo_gl_context_t *ctx;
+    cairo_int_status_t status;
+
+    if (! surface->msaa_active)
+       return CAIRO_INT_STATUS_SUCCESS;
+
+    if (surface->base.device == NULL)
+       return CAIRO_INT_STATUS_SUCCESS;
+
+    /* GLES surfaces do not need explicit resolution. */
+    if (((cairo_gl_context_t *) surface->base.device)->gl_flavor == CAIRO_GL_FLAVOR_ES)
+       return CAIRO_INT_STATUS_SUCCESS;
+
+    if (! _cairo_gl_surface_is_texture (surface))
+       return CAIRO_INT_STATUS_SUCCESS;
+
+    status = _cairo_gl_context_acquire (surface->base.device, &ctx);
+    if (unlikely (status))
+       return status;
+
+    ctx->current_target = surface;
+
+#if CAIRO_HAS_GL_SURFACE
+    _cairo_gl_activate_surface_as_nonmultisampling (ctx, surface);
+#endif
+
+    status = _cairo_gl_context_release (ctx, status);
+    return status;
+}
+
+static inline void
+_cairo_gl_image_cache_lock (cairo_gl_context_t *ctx,
+                           cairo_gl_image_t *image_node)
+{
+    _cairo_rtree_pin (&ctx->image_cache.rtree, &image_node->node);
+}
+
+void
+_cairo_gl_image_cache_unlock (cairo_gl_context_t *ctx)
+{
+    if (ctx->image_cache.surface)
+       _cairo_rtree_unpin (&(ctx->image_cache.rtree));
+}
+
+static cairo_int_status_t
+_cairo_gl_copy_texture (cairo_gl_surface_t *dst,
+                       cairo_gl_surface_t *image,
+                       int x, int y,
+                       int width, int height,
+                       cairo_bool_t replace,
+                       cairo_gl_context_t **ctx)
+{
+    cairo_int_status_t status;
+    cairo_gl_context_t *ctx_out;
+    cairo_gl_dispatch_t *dispatch;
+    cairo_gl_surface_t *cache_surface;
+    cairo_gl_surface_t *target;
+
+    if (! _cairo_gl_surface_is_texture (image))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _cairo_gl_context_acquire (dst->base.device, &ctx_out);
+    if(unlikely (status))
+       return status;
+
+    if (! ctx_out->image_cache.surface) {
+       status = _cairo_gl_image_cache_init (ctx_out);
+       if (unlikely (status))
+           return status;
+    }
+
+    if (replace)
+       _cairo_gl_composite_flush (ctx_out);
+
+    /* Bind framebuffer of source image. */
+    dispatch = &ctx_out->dispatch;
+    cache_surface = ctx_out->image_cache.surface;
+    target = ctx_out->current_target;
+
+    _cairo_gl_ensure_framebuffer (ctx_out, image);
+    dispatch->BindFramebuffer (GL_FRAMEBUFFER, image->fb);
+    glBindTexture (ctx_out->tex_target, cache_surface->tex);
+
+    glCopyTexSubImage2D (ctx_out->tex_target, 0, x, y, 0, 0, width, height);
+    dispatch->BindFramebuffer (GL_FRAMEBUFFER, target->fb);
+    ctx_out->current_target = target;
+    *ctx = ctx_out;
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
+_cairo_gl_image_cache_replace_image (cairo_gl_image_t *image_node,
+                                    cairo_gl_surface_t *dst,
+                                    cairo_gl_surface_t *image,
+                                    cairo_gl_context_t **ctx)
+{
+    cairo_int_status_t status;
+    /* Paint image to cache. */
+    status = _cairo_gl_copy_texture (dst, image, image_node->node.x,
+                                    image_node->node.y,
+                                    image->width, image->height,
+                                    TRUE,
+                                    ctx);
+    image->content_changed = FALSE;
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_gl_image_cache_add_image (cairo_gl_context_t *ctx,
+                                cairo_gl_surface_t *dst,
+                                cairo_gl_surface_t *image,
+                                cairo_gl_image_t **image_node)
+{
+    cairo_int_status_t status;
+    cairo_rtree_node_t *node = NULL;
+    int width, height;
+    cairo_bool_t replaced = FALSE;
+
+    if (! image->base.device ||
+       (image->width > IMAGE_CACHE_MAX_SIZE ||
+       image->height > IMAGE_CACHE_MAX_SIZE))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    width = image->width;
+    height = image->height;
+
+    *image_node =
+       (cairo_gl_image_t *) cairo_surface_get_user_data (&image->base,
+                                                              (const cairo_user_data_key_t *) (&image->base));
+    if (*image_node) {
+       if (image->content_changed) {
+           status = _cairo_gl_image_cache_replace_image (*image_node,
+                                                         dst, image, &ctx);
+
+           if (unlikely (status))
+               return status;
+
+           replaced = TRUE;
+       }
+
+       _cairo_gl_image_cache_lock (ctx, *image_node);
+
+       image->content_changed = FALSE;
+       if (replaced)
+           return _cairo_gl_context_release (ctx, status);
+       return CAIRO_INT_STATUS_SUCCESS;
+    }
+
+    status = _cairo_rtree_insert (&ctx->image_cache.rtree, width,
+                                 height, &node);
+    /* Search for an unlocked slot. */
+    if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
+       _cairo_gl_composite_flush (ctx);
+       _cairo_gl_image_cache_unlock (ctx);
+
+       status = _cairo_rtree_evict_random (&ctx->image_cache.rtree,
+                                           width, height, &node);
+
+       if (status == CAIRO_INT_STATUS_SUCCESS)
+           status = _cairo_rtree_node_insert (&ctx->image_cache.rtree,
+                                              node, width, height, &node);
+    }
+
+    if (status)
+       return status;
+
+    /* Paint image to cache. */
+    status = _cairo_gl_copy_texture (dst, image, node->x, node->y,
+                                    image->width, image->height,
+                                    FALSE, &ctx);
+    if (unlikely (status))
+       return status;
+
+    *image_node = (cairo_gl_image_t *)node;
+    (*image_node)->ctx = ctx;
+    (*image_node)->original_surface = &image->base;
+    /* Coordinate. */
+    (*image_node)->p1.x = node->x;
+    (*image_node)->p1.y = node->y;
+    (*image_node)->p2.x = node->x + image->width;
+    (*image_node)->p2.y = node->y + image->height;
+    if (! _cairo_gl_device_requires_power_of_two_textures (&ctx->base)) {
+       (*image_node)->p1.x /= IMAGE_CACHE_WIDTH;
+       (*image_node)->p2.x /= IMAGE_CACHE_WIDTH;
+       (*image_node)->p1.y /= IMAGE_CACHE_HEIGHT;
+       (*image_node)->p2.y /= IMAGE_CACHE_HEIGHT;
+    }
+    image->content_changed = FALSE;
+    /* Set user data. */
+    status = cairo_surface_set_user_data (&image->base,
+                                         (const cairo_user_data_key_t *) &image->base,
+                                         (void *) *image_node,
+                                         _cairo_gl_image_node_fini);
+
+    _cairo_gl_image_cache_lock (ctx, *image_node);
+    return _cairo_gl_context_release (ctx, status);
+}
+
 static cairo_status_t
-_cairo_gl_surface_operand_init (cairo_gl_operand_t *operand,
-                               const cairo_pattern_t *_src,
-                               cairo_gl_surface_t *dst,
-                               int src_x, int src_y,
-                               int dst_x, int dst_y,
-                               int width, int height)
+_cairo_gl_subsurface_clone_operand_init (cairo_gl_operand_t *operand,
+                                        const cairo_pattern_t *_src,
+                                        cairo_gl_surface_t *dst,
+                                        const cairo_rectangle_int_t *sample,
+                                        const cairo_rectangle_int_t *extents)
 {
     const cairo_surface_pattern_t *src = (cairo_surface_pattern_t *)_src;
+    cairo_surface_pattern_t local_pattern;
+    cairo_surface_subsurface_t *sub;
     cairo_gl_surface_t *surface;
+    cairo_gl_context_t *ctx;
     cairo_surface_attributes_t *attributes;
-    cairo_matrix_t m;
+    cairo_status_t status;
 
-    surface = (cairo_gl_surface_t *) src->surface;
-    if (surface->base.type != CAIRO_SURFACE_TYPE_GL)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-    if (surface->base.backend->type != CAIRO_SURFACE_TYPE_GL) {
-       if (_cairo_surface_is_subsurface (&surface->base)) {
-           surface = (cairo_gl_surface_t *)
-               _cairo_surface_subsurface_get_target_with_offset (&surface->base, &src_x, &src_y);
+    sub = (cairo_surface_subsurface_t *) src->surface;
+
+    if (sub->snapshot &&
+       sub->snapshot->type == CAIRO_SURFACE_TYPE_GL &&
+       sub->snapshot->device == dst->base.device)
+    {
+       surface = (cairo_gl_surface_t *)
+           cairo_surface_reference (sub->snapshot);
+    }
+    else
+    {
+       status = _cairo_gl_context_acquire (dst->base.device, &ctx);
+       if (unlikely (status))
+           return status;
+
+       /* XXX Trim surface to the sample area within the subsurface? */
+       surface = (cairo_gl_surface_t *)
+           _cairo_gl_surface_create_scratch (ctx,
+                                             sub->target->content,
+                                             sub->extents.width,
+                                             sub->extents.height,
+                                             FALSE);
+
+       if (surface->base.status)
+           return _cairo_gl_context_release (ctx, surface->base.status);
+
+       _cairo_pattern_init_for_surface (&local_pattern, sub->target);
+       cairo_matrix_init_translate (&local_pattern.base.matrix,
+                                    sub->extents.x, sub->extents.y);
+       local_pattern.base.filter = CAIRO_FILTER_NEAREST;
+       status = _cairo_surface_paint (&surface->base,
+                                      CAIRO_OPERATOR_SOURCE,
+                                      &local_pattern.base,
+                                      NULL);
+       _cairo_pattern_fini (&local_pattern.base);
+
+       status = _cairo_gl_context_release (ctx, status);
+       if (unlikely (status)) {
+           cairo_surface_destroy (&surface->base);
+           return status;
        }
+
+       _cairo_surface_subsurface_set_snapshot (&sub->base, &surface->base);
     }
 
+    status = _resolve_multisampling (surface);
+    if (unlikely (status))
+        return status;
+
     attributes = &operand->texture.attributes;
 
     operand->type = CAIRO_GL_OPERAND_TEXTURE;
-    operand->texture.surface =
-       (cairo_gl_surface_t *) cairo_surface_reference (&surface->base);
+    operand->texture.surface = surface;
+    operand->texture.owns_surface = surface;
     operand->texture.tex = surface->tex;
+    operand->texture.use_atlas = FALSE;
 
-    /* Translate the matrix from
-     * (unnormalized src -> unnormalized src) to
-     * (unnormalized dst -> unnormalized src)
-     */
-    cairo_matrix_init_translate (&m, src_x - dst_x, src_y - dst_y);
-    cairo_matrix_multiply (&attributes->matrix, &m, &src->base.matrix);
-
-    /* Translate the matrix from
-     * (unnormalized dst -> unnormalized src) to
-     * (unnormalized dst -> normalized src)
-     */
     if (_cairo_gl_device_requires_power_of_two_textures (dst->base.device)) {
-       cairo_matrix_init_scale (&m,
-                                1.0,
-                                1.0);
+       attributes->matrix = src->base.matrix;
     } else {
+       cairo_matrix_t m;
+
        cairo_matrix_init_scale (&m,
                                 1.0 / surface->width,
                                 1.0 / surface->height);
+       cairo_matrix_multiply (&attributes->matrix, &src->base.matrix, &m);
     }
-    cairo_matrix_multiply (&attributes->matrix,
-                          &attributes->matrix,
-                          &m);
 
     attributes->extend = src->base.extend;
     attributes->filter = src->base.filter;
+    attributes->has_component_alpha = src->base.has_component_alpha;
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_gl_subsurface_operand_init (cairo_gl_operand_t *operand,
+                                  const cairo_pattern_t *_src,
+                                  cairo_gl_surface_t *dst,
+                                  const cairo_rectangle_int_t *sample,
+                                  const cairo_rectangle_int_t *extents)
+{
+    const cairo_surface_pattern_t *src = (cairo_surface_pattern_t *)_src;
+    cairo_surface_subsurface_t *sub;
+    cairo_gl_surface_t *surface;
+    cairo_surface_attributes_t *attributes;
+    cairo_int_status_t status;
+    cairo_gl_image_t *image_node = NULL;
+    cairo_gl_context_t *ctx = (cairo_gl_context_t *)dst->base.device;
+
+    sub = (cairo_surface_subsurface_t *) src->surface;
+
+    if (sample->x < 0 || sample->y < 0 ||
+       sample->x + sample->width  > sub->extents.width ||
+       sample->y + sample->height > sub->extents.height)
+    {
+       return _cairo_gl_subsurface_clone_operand_init (operand, _src,
+                                                       dst, sample, extents);
+    }
+
+    surface = (cairo_gl_surface_t *) sub->target;
+    if (surface->base.device &&
+        (surface->base.device != dst->base.device ||
+         (! surface->tex && ! surface->bounded_tex)))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _resolve_multisampling (surface);
+    if (unlikely (status))
+       return status;
+
+    *operand = surface->operand;
+    operand->texture.use_atlas = FALSE;
+
+    attributes = &operand->texture.attributes;
+    attributes->extend = src->base.extend;
+    attributes->filter = src->base.filter;
+    attributes->has_component_alpha = src->base.has_component_alpha;
+
+    attributes->matrix = src->base.matrix;
+    attributes->matrix.x0 += sub->extents.x;
+    attributes->matrix.y0 += sub->extents.y;
+
+    if (surface->needs_to_cache)
+       status = _cairo_gl_image_cache_add_image (ctx, dst, surface,
+                                                 &image_node);
+
+    /* Translate the matrix from
+     * (unnormalized src -> unnormalized src) to
+     * (unnormalized dst -> unnormalized src)
+     */
+
+    if (unlikely (status) || ! image_node)
+       cairo_matrix_multiply (&attributes->matrix,
+                              &attributes->matrix,
+                              &surface->operand.texture.attributes.matrix);
+   else {
+       cairo_matrix_t matrix = src->base.matrix;
+       operand->texture.surface = ctx->image_cache.surface;
+       operand->texture.owns_surface = NULL;
+       operand->texture.tex = ctx->image_cache.surface->tex;
+       attributes->extend = CAIRO_EXTEND_NONE;
+       operand->texture.extend = src->base.extend;
+       attributes->matrix.x0 = image_node->node.x + sub->extents.x;
+       attributes->matrix.y0 = image_node->node.y + sub->extents.y;
+       operand->texture.use_atlas = TRUE;
+
+       operand->texture.p1.x = image_node->p1.x;
+       operand->texture.p1.y = image_node->p1.y;
+       operand->texture.p2.x = image_node->p2.x;
+       operand->texture.p2.y = image_node->p2.y;
+       if (src->base.extend == CAIRO_EXTEND_PAD) {
+           operand->texture.p1.x += 0.5 / IMAGE_CACHE_WIDTH;
+           operand->texture.p1.y += 0.5 / IMAGE_CACHE_HEIGHT;
+           operand->texture.p2.x -= 0.5 / IMAGE_CACHE_WIDTH;
+           operand->texture.p2.y -= 0.5 / IMAGE_CACHE_HEIGHT;
+       }
+
+       cairo_matrix_multiply (&attributes->matrix,
+                              &matrix,
+                              &ctx->image_cache.surface->operand.texture.attributes.matrix);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_gl_surface_operand_init (cairo_gl_operand_t *operand,
+                               const cairo_pattern_t *_src,
+                               cairo_gl_surface_t *dst,
+                               const cairo_rectangle_int_t *sample,
+                               const cairo_rectangle_int_t *extents)
+{
+    const cairo_surface_pattern_t *src = (cairo_surface_pattern_t *)_src;
+    cairo_gl_surface_t *surface;
+    cairo_surface_attributes_t *attributes;
+    cairo_int_status_t status;
+    cairo_gl_image_t *image_node = NULL;
+    cairo_gl_context_t *ctx = (cairo_gl_context_t *)dst->base.device;
+
+    surface = (cairo_gl_surface_t *) src->surface;
+    if (surface->base.type != CAIRO_SURFACE_TYPE_GL)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (surface->base.backend->type != CAIRO_SURFACE_TYPE_GL) {
+       if (_cairo_surface_is_subsurface (&surface->base))
+           return _cairo_gl_subsurface_operand_init (operand, _src, dst,
+                                                     sample, extents);
+       else if (_cairo_surface_is_snapshot (src->surface)) {
+           cairo_surface_snapshot_t *surface_snapshot;
+           cairo_pattern_t *sub_pattern;
+
+           surface_snapshot = (cairo_surface_snapshot_t *)src->surface;
+           surface = (cairo_gl_surface_t *)surface_snapshot->target;
+           if (surface->base.type != CAIRO_SURFACE_TYPE_GL)
+               return CAIRO_INT_STATUS_UNSUPPORTED;
+
+           if (_cairo_surface_is_subsurface (&surface->base)) {
+               sub_pattern = cairo_pattern_create_for_surface (&surface->base);
+               status = _cairo_gl_subsurface_operand_init (operand,
+                                                           sub_pattern,
+                                                           dst,
+                                                           sample,
+                                                           extents);
+               cairo_pattern_destroy (sub_pattern);
+               return status;
+           }
+       }
+       else
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+
+    if (surface->base.device &&
+        (surface->base.device != dst->base.device ||
+         (! surface->tex && ! surface->bounded_tex)))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _resolve_multisampling (surface);
+    if (unlikely (status))
+       return status;
+
+    *operand = surface->operand;
+    operand->texture.use_atlas = FALSE;
+
+    attributes = &operand->texture.attributes;
+    attributes->extend = src->base.extend;
+    attributes->filter = src->base.filter;
+    attributes->has_component_alpha = src->base.has_component_alpha;
+
+    if (surface->needs_to_cache)
+       status = _cairo_gl_image_cache_add_image (ctx, dst, surface,
+                                                 &image_node);
+
+    if (unlikely (status) || ! image_node)
+       cairo_matrix_multiply (&attributes->matrix,
+                              &src->base.matrix,
+                              &attributes->matrix);
+    else {
+       cairo_matrix_t matrix = src->base.matrix;
+       operand->texture.use_atlas = TRUE;
+       attributes->extend = CAIRO_EXTEND_NONE;
+       operand->texture.extend = src->base.extend;
+
+       operand->texture.p1.x = image_node->p1.x;
+       operand->texture.p1.y = image_node->p1.y;
+       operand->texture.p2.x = image_node->p2.x;
+       operand->texture.p2.y = image_node->p2.y;
+       if (src->base.extend == CAIRO_EXTEND_PAD) {
+           operand->texture.p1.x += 0.5 / IMAGE_CACHE_WIDTH;
+           operand->texture.p1.y += 0.5 / IMAGE_CACHE_HEIGHT;
+           operand->texture.p2.x -= 0.5 / IMAGE_CACHE_WIDTH;
+           operand->texture.p2.y -= 0.5 / IMAGE_CACHE_HEIGHT;
+       }
+
+       operand->texture.surface = ctx->image_cache.surface;
+       operand->texture.owns_surface = NULL;
+       operand->texture.tex = ctx->image_cache.surface->tex;
+       matrix.x0 += image_node->node.x;
+       matrix.y0 += image_node->node.y;
+       cairo_matrix_multiply (&attributes->matrix,
+                              &matrix,
+                              &ctx->image_cache.surface->operand.texture.attributes.matrix);
+    }
+
     return CAIRO_STATUS_SUCCESS;
 }
 
@@ -132,18 +557,19 @@ static cairo_status_t
 _cairo_gl_pattern_texture_setup (cairo_gl_operand_t *operand,
                                 const cairo_pattern_t *_src,
                                 cairo_gl_surface_t *dst,
-                                int src_x, int src_y,
-                                int dst_x, int dst_y,
-                                int width, int height)
+                                const cairo_rectangle_int_t *extents)
 {
-    const cairo_surface_pattern_t *src = (cairo_surface_pattern_t *)_src;
     cairo_status_t status;
-    cairo_matrix_t m;
     cairo_gl_surface_t *surface;
     cairo_gl_context_t *ctx;
-    cairo_surface_attributes_t *attributes;
+    cairo_surface_t *image;
+    cairo_bool_t src_is_gl_surface = FALSE;
+    pixman_format_code_t pixman_format;
 
-    attributes = &operand->texture.attributes;
+    if (_src->type == CAIRO_PATTERN_TYPE_SURFACE) {
+       cairo_surface_t* src_surface = ((cairo_surface_pattern_t *) _src)->surface;
+       src_is_gl_surface = src_surface->type == CAIRO_SURFACE_TYPE_GL;
+    }
 
     status = _cairo_gl_context_acquire (dst->base.device, &ctx);
     if (unlikely (status))
@@ -151,60 +577,67 @@ _cairo_gl_pattern_texture_setup (cairo_gl_operand_t *operand,
 
     surface = (cairo_gl_surface_t *)
        _cairo_gl_surface_create_scratch (ctx,
-                                         src->surface->content,
-                                         width, height);
-    if (src->surface->backend->type == CAIRO_SURFACE_TYPE_IMAGE) {
-       status = _cairo_gl_surface_draw_image (surface,
-                                     (cairo_image_surface_t *)src->surface,
-                                     src_x, src_y,
-                                     width, height,
-                                     0, 0);
-
-       attributes->extend = src->base.extend;
-       attributes->filter = src->base.filter;
-    } else {
-       cairo_surface_t *image;
+                                         CAIRO_CONTENT_COLOR_ALPHA,
+                                         extents->width, extents->height,
+                                         FALSE);
+
+    /* XXX: This is a hack for driver that does not support PBO, we
+       don't need an extra step of downloading newly created texture
+       to image, we can create image directly. */
+    if (! _cairo_is_little_endian ())
+       pixman_format = PIXMAN_r8g8b8a8;
+    else
+       pixman_format = PIXMAN_a8b8g8r8;
+    image =
+       _cairo_image_surface_create_with_pixman_format (NULL,
+                                                       pixman_format,
+                                                       extents->width,
+                                                       extents->height,
+                                                       -1);
+    if (unlikely (image->status)) {
+       status = _cairo_gl_context_release (ctx, status);
+
+       /* The error status in the image is issue that caused the problem. */
+       status = image->status;
+
+       cairo_surface_destroy (image);
+       goto fail;
+    }
+
+    /* If the pattern is a GL surface, it belongs to some other GL context,
+       so we need to release this device while we paint it to the image. */
+    if (src_is_gl_surface) {
+       status = _cairo_gl_context_release (ctx, status);
+       if (unlikely (status))
+           goto fail;
+    }
 
-       image = cairo_surface_map_to_image (&surface->base, NULL);
-       status = _cairo_surface_offset_paint (image, src_x, src_y,
-                                             CAIRO_OPERATOR_SOURCE, _src,
-                                             NULL);
-       cairo_surface_unmap_image (&surface->base, image);
+    status = _cairo_surface_offset_paint (image, extents->x, extents->y,
+                                         CAIRO_OPERATOR_SOURCE, _src, NULL);
 
-       attributes->extend = CAIRO_EXTEND_NONE;
-       attributes->filter = CAIRO_FILTER_NEAREST;
+    if (src_is_gl_surface) {
+       status = _cairo_gl_context_acquire (dst->base.device, &ctx);
+       if (unlikely (status))
+           goto fail;
     }
 
+    cairo_surface_unmap_image (&surface->base, image);
     status = _cairo_gl_context_release (ctx, status);
+    if (unlikely (status))
+       goto fail;
 
-    operand->type = CAIRO_GL_OPERAND_TEXTURE;
-    operand->texture.surface = surface;
-    operand->texture.tex = surface->tex;
-
-    /* Translate the matrix from
-     * (unnormalized src -> unnormalized src) to
-     * (unnormalized dst -> unnormalized src)
-     */
-    cairo_matrix_init_translate (&m, -dst_x, -dst_y);
-    cairo_matrix_multiply (&attributes->matrix, &m, &src->base.matrix);
+    *operand = surface->operand;
+    operand->texture.owns_surface = surface;
+    operand->texture.attributes.matrix.x0 -= extents->x * operand->texture.attributes.matrix.xx;
+    operand->texture.attributes.matrix.y0 -= extents->y * operand->texture.attributes.matrix.yy;
+    dst->needs_to_cache = TRUE;
+    operand->texture.use_atlas = FALSE;
 
-    /* Translate the matrix from
-     * (unnormalized dst -> unnormalized src) to
-     * (unnormalized dst -> normalized src)
-     */
-    if (_cairo_gl_device_requires_power_of_two_textures (dst->base.device)) {
-       cairo_matrix_init_scale (&m,
-                                1.0,
-                                1.0);
-    } else {
-       cairo_matrix_init_scale (&m,
-                                1.0 / surface->width,
-                                1.0 / surface->height);
-    }
-    cairo_matrix_multiply (&attributes->matrix,
-                          &attributes->matrix,
-                          &m);
     return CAIRO_STATUS_SUCCESS;
+
+fail:
+    cairo_surface_destroy (&surface->base);
+    return status;
 }
 
 void
@@ -218,12 +651,18 @@ _cairo_gl_solid_operand_init (cairo_gl_operand_t *operand,
     operand->constant.color[3] = color->alpha;
 }
 
+void
+_cairo_gl_operand_translate (cairo_gl_operand_t *operand,
+                            double tx, double ty)
+{
+    operand->texture.attributes.matrix.x0 -= tx * operand->texture.attributes.matrix.xx;
+    operand->texture.attributes.matrix.y0 -= ty * operand->texture.attributes.matrix.yy;
+}
+
 static cairo_status_t
 _cairo_gl_gradient_operand_init (cairo_gl_operand_t *operand,
                                  const cairo_pattern_t *pattern,
-                                cairo_gl_surface_t *dst,
-                                int src_x, int src_y,
-                                int dst_x, int dst_y)
+                                cairo_gl_surface_t *dst)
 {
     const cairo_gradient_pattern_t *gradient = (const cairo_gradient_pattern_t *)pattern;
     cairo_status_t status;
@@ -305,8 +744,6 @@ _cairo_gl_gradient_operand_init (cairo_gl_operand_t *operand,
                               &m);
     }
 
-    cairo_matrix_translate (&operand->gradient.m, src_x - dst_x, src_y - dst_y);
-
     operand->gradient.extend = pattern->extend;
 
     return CAIRO_STATUS_SUCCESS;
@@ -327,6 +764,7 @@ _cairo_gl_operand_copy (cairo_gl_operand_t *dst,
        _cairo_gl_gradient_reference (dst->gradient.gradient);
        break;
     case CAIRO_GL_OPERAND_TEXTURE:
+       cairo_surface_reference (&dst->texture.owns_surface->base);
        break;
     default:
     case CAIRO_GL_OPERAND_COUNT:
@@ -349,6 +787,7 @@ _cairo_gl_operand_destroy (cairo_gl_operand_t *operand)
        _cairo_gl_gradient_destroy (operand->gradient.gradient);
        break;
     case CAIRO_GL_OPERAND_TEXTURE:
+       cairo_surface_destroy (&operand->texture.owns_surface->base);
        break;
     default:
     case CAIRO_GL_OPERAND_COUNT:
@@ -364,23 +803,22 @@ cairo_int_status_t
 _cairo_gl_operand_init (cairo_gl_operand_t *operand,
                        const cairo_pattern_t *pattern,
                        cairo_gl_surface_t *dst,
-                       int src_x, int src_y,
-                       int dst_x, int dst_y,
-                       int width, int height)
+                       const cairo_rectangle_int_t *sample,
+                       const cairo_rectangle_int_t *extents,
+                       cairo_bool_t use_color_attribute)
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s: type=%d\n", __FUNCTION__, pattern->type));
     switch (pattern->type) {
     case CAIRO_PATTERN_TYPE_SOLID:
        _cairo_gl_solid_operand_init (operand,
                                      &((cairo_solid_pattern_t *) pattern)->color);
+        operand->use_color_attribute = use_color_attribute;
        return CAIRO_STATUS_SUCCESS;
     case CAIRO_PATTERN_TYPE_SURFACE:
-       status = _cairo_gl_surface_operand_init (operand,
-                                                pattern, dst,
-                                                src_x, src_y,
-                                                dst_x, dst_y,
-                                                width, height);
+       status = _cairo_gl_surface_operand_init (operand, pattern, dst,
+                                                sample, extents);
        if (status == CAIRO_INT_STATUS_UNSUPPORTED)
            break;
 
@@ -388,10 +826,7 @@ _cairo_gl_operand_init (cairo_gl_operand_t *operand,
 
     case CAIRO_PATTERN_TYPE_LINEAR:
     case CAIRO_PATTERN_TYPE_RADIAL:
-       status = _cairo_gl_gradient_operand_init (operand,
-                                                 pattern, dst,
-                                                 src_x, src_y,
-                                                 dst_x, dst_y);
+       status = _cairo_gl_gradient_operand_init (operand, pattern, dst);
        if (status == CAIRO_INT_STATUS_UNSUPPORTED)
            break;
 
@@ -399,14 +834,11 @@ _cairo_gl_operand_init (cairo_gl_operand_t *operand,
 
     default:
     case CAIRO_PATTERN_TYPE_MESH:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        break;
     }
 
-    return _cairo_gl_pattern_texture_setup (operand,
-                                           pattern, dst,
-                                           src_x, src_y,
-                                           dst_x, dst_y,
-                                           width, height);
+    return _cairo_gl_pattern_texture_setup (operand, pattern, dst, extents);
 }
 
 cairo_filter_t
@@ -442,6 +874,15 @@ _cairo_gl_operand_get_gl_filter (cairo_gl_operand_t *operand)
           GL_NEAREST;
 }
 
+cairo_bool_t
+_cairo_gl_operand_get_use_atlas (cairo_gl_operand_t *operand)
+{
+    if (operand->type != CAIRO_GL_OPERAND_TEXTURE)
+       return FALSE;
+
+    return operand->texture.use_atlas;
+}
+
 cairo_extend_t
 _cairo_gl_operand_get_extend (cairo_gl_operand_t *operand)
 {
@@ -449,7 +890,10 @@ _cairo_gl_operand_get_extend (cairo_gl_operand_t *operand)
 
     switch ((int) operand->type) {
     case CAIRO_GL_OPERAND_TEXTURE:
-       extend = operand->texture.attributes.extend;
+       if (! operand->texture.use_atlas)
+           extend = operand->texture.attributes.extend;
+       else
+           extend = operand->texture.extend;
        break;
     case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
@@ -465,6 +909,25 @@ _cairo_gl_operand_get_extend (cairo_gl_operand_t *operand)
     return extend;
 }
 
+cairo_extend_t
+_cairo_gl_operand_get_atlas_extend (cairo_gl_operand_t *operand)
+{
+    cairo_extend_t extend;
+
+    switch ((int) operand->type) {
+    case CAIRO_GL_OPERAND_TEXTURE:
+       if (operand->texture.use_atlas)
+           extend = operand->texture.extend;
+       else
+           extend = CAIRO_EXTEND_NONE;
+       break;
+    default:
+       extend = CAIRO_EXTEND_NONE;
+       break;
+    }
+
+    return extend;
+}
 
 void
 _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
@@ -485,13 +948,15 @@ _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
     case CAIRO_GL_OPERAND_NONE:
         break;
     case CAIRO_GL_OPERAND_CONSTANT:
-        strcpy (custom_part, "_constant");
-       _cairo_gl_shader_bind_vec4 (ctx,
-                                    uniform_name,
-                                    operand->constant.color[0],
-                                    operand->constant.color[1],
-                                    operand->constant.color[2],
-                                    operand->constant.color[3]);
+        if (!operand->use_color_attribute) {
+            strcpy (custom_part, "_constant");
+            _cairo_gl_shader_bind_vec4 (ctx,
+                                        uniform_name,
+                                        operand->constant.color[0],
+                                        operand->constant.color[1],
+                                        operand->constant.color[2],
+                                        operand->constant.color[3]);
+        }
         break;
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT:
@@ -543,7 +1008,8 @@ _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
 cairo_bool_t
 _cairo_gl_operand_needs_setup (cairo_gl_operand_t *dest,
                                cairo_gl_operand_t *source,
-                               unsigned int        vertex_offset)
+                               unsigned int        vertex_offset,
+                               cairo_bool_t        *needs_flush)
 {
     if (dest->type != source->type)
         return TRUE;
@@ -552,12 +1018,16 @@ _cairo_gl_operand_needs_setup (cairo_gl_operand_t *dest,
 
     switch (source->type) {
     case CAIRO_GL_OPERAND_NONE:
-        return FALSE;
     case CAIRO_GL_OPERAND_CONSTANT:
-        return dest->constant.color[0] != source->constant.color[0] ||
-               dest->constant.color[1] != source->constant.color[1] ||
-               dest->constant.color[2] != source->constant.color[2] ||
-               dest->constant.color[3] != source->constant.color[3];
+        if (source->use_color_attribute) {
+            *needs_flush = FALSE;
+            return TRUE;
+        } else {
+            return dest->constant.color[0] != source->constant.color[0] ||
+                dest->constant.color[1] != source->constant.color[1] ||
+                dest->constant.color[2] != source->constant.color[2] ||
+                dest->constant.color[3] != source->constant.color[3];
+        }
     case CAIRO_GL_OPERAND_TEXTURE:
         return dest->texture.surface != source->texture.surface ||
                dest->texture.attributes.extend != source->texture.attributes.extend ||
@@ -578,16 +1048,24 @@ _cairo_gl_operand_needs_setup (cairo_gl_operand_t *dest,
 }
 
 unsigned int
-_cairo_gl_operand_get_vertex_size (cairo_gl_operand_type_t type)
+_cairo_gl_operand_get_vertex_size (cairo_gl_operand_t *operand)
 {
-    switch (type) {
+    switch (operand->type) {
     default:
     case CAIRO_GL_OPERAND_COUNT:
         ASSERT_NOT_REACHED;
     case CAIRO_GL_OPERAND_NONE:
-    case CAIRO_GL_OPERAND_CONSTANT:
         return 0;
+    case CAIRO_GL_OPERAND_CONSTANT:
+        if (operand->use_color_attribute)
+            return 4 * sizeof (GLfloat);
+        else
+            return 0;
     case CAIRO_GL_OPERAND_TEXTURE:
+       if (operand->texture.use_atlas)
+           return 6 * sizeof (GLfloat);
+       else
+           return 2 * sizeof (GLfloat);
     case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
@@ -596,43 +1074,47 @@ _cairo_gl_operand_get_vertex_size (cairo_gl_operand_type_t type)
     }
 }
 
-void
-_cairo_gl_operand_emit (cairo_gl_operand_t *operand,
-                        GLfloat ** vb,
-                        GLfloat x,
-                        GLfloat y)
+static inline cairo_int_status_t
+_cairo_gl_context_get_image_cache (cairo_gl_context_t     *ctx,
+                                  cairo_gl_image_cache_t  **cache_out)
 {
-    switch (operand->type) {
-    default:
-    case CAIRO_GL_OPERAND_COUNT:
-        ASSERT_NOT_REACHED;
-    case CAIRO_GL_OPERAND_NONE:
-    case CAIRO_GL_OPERAND_CONSTANT:
-        break;
-    case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
-    case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
-    case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
-    case CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT:
-        {
-           double s = x;
-           double t = y;
+    if (! ctx->image_cache.surface)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
 
-           cairo_matrix_transform_point (&operand->gradient.m, &s, &t);
+    *cache_out = &(ctx->image_cache);
+    return CAIRO_INT_STATUS_SUCCESS;
+}
 
-           *(*vb)++ = s;
-           *(*vb)++ = t;
-        }
-       break;
-    case CAIRO_GL_OPERAND_TEXTURE:
-        {
-            cairo_surface_attributes_t *src_attributes = &operand->texture.attributes;
-            double s = x;
-            double t = y;
-
-            cairo_matrix_transform_point (&src_attributes->matrix, &s, &t);
-            *(*vb)++ = s;
-            *(*vb)++ = t;
-        }
-        break;
+/* Called from _cairo_rtree_node_remove. */
+void
+_cairo_gl_image_node_destroy (cairo_rtree_node_t *node)
+{
+    cairo_surface_t *surface;
+
+    cairo_gl_image_t *image_node = cairo_container_of (node,
+                                                      cairo_gl_image_t,
+                                                      node);
+
+    surface = image_node->original_surface;
+    image_node->node_removed = TRUE;
+   /* Remove from original surface. */
+   if (image_node->original_surface &&
+       ! image_node->user_data_removed) {
+       cairo_surface_set_user_data (image_node->original_surface,
+                                    (const cairo_user_data_key_t *) surface,
+                                    (void *) NULL, NULL);
     }
 }
+
+void
+_cairo_gl_image_node_fini (void *data)
+{
+    cairo_gl_image_t *image_node = (cairo_gl_image_t *)data;
+
+    image_node->user_data_removed = TRUE;
+
+    if (! image_node->node_removed && ! image_node->node.pinned)
+       _cairo_rtree_node_remove (&image_node->ctx->image_cache.rtree,
+                                 &image_node->node);
+}
+
index 9027178..aa9c3dc 100644 (file)
@@ -56,6 +56,8 @@
 #include "cairo-rtree-private.h"
 #include "cairo-scaled-font-private.h"
 #include "cairo-spans-compositor-private.h"
+#include "cairo-array-private.h"
+#include "cairo-stroke-dash-private.h"
 
 #include <assert.h>
 
 /* VBO size that we allocate, smaller size means we gotta flush more often */
 #define CAIRO_GL_VBO_SIZE 16384
 
+#define IMAGE_CACHE_WIDTH 2048
+#define IMAGE_CACHE_HEIGHT 2048
+#define IMAGE_CACHE_MIN_SIZE 1
+#define IMAGE_CACHE_MAX_SIZE 256
+
+typedef struct _cairo_gl_surface cairo_gl_surface_t;
+
 /* GL flavor */
 typedef enum cairo_gl_flavor {
     CAIRO_GL_FLAVOR_NONE = 0,
@@ -104,25 +113,105 @@ typedef enum cairo_gl_flavor {
 enum {
     CAIRO_GL_VERTEX_ATTRIB_INDEX = 0,
     CAIRO_GL_COLOR_ATTRIB_INDEX  = 1,
-    CAIRO_GL_TEXCOORD0_ATTRIB_INDEX = 2,
-    CAIRO_GL_TEXCOORD1_ATTRIB_INDEX = CAIRO_GL_TEXCOORD0_ATTRIB_INDEX + 1
+    CAIRO_GL_COVERAGE_ATTRIB_INDEX  = 2,
+    CAIRO_GL_TEXCOORD0_ATTRIB_INDEX = 3,
+    CAIRO_GL_TEXCOORD1_ATTRIB_INDEX = 4,
+    CAIRO_GL_START_COORD0_ATTRIB_INDEX = 5,
+    CAIRO_GL_START_COORD1_ATTRIB_INDEX = 6,
+    CAIRO_GL_STOP_COORD0_ATTRIB_INDEX = 7,
+    CAIRO_GL_STOP_COORD1_ATTRIB_INDEX = 8
 };
 
-typedef struct _cairo_gl_surface {
+typedef enum cairo_gl_operand_type {
+    CAIRO_GL_OPERAND_NONE,
+    CAIRO_GL_OPERAND_CONSTANT,
+    CAIRO_GL_OPERAND_TEXTURE,
+    CAIRO_GL_OPERAND_LINEAR_GRADIENT,
+    CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0,
+    CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE,
+    CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT,
+
+    CAIRO_GL_OPERAND_COUNT
+} cairo_gl_operand_type_t;
+
+typedef enum cairo_gl_draw_mode {
+    CAIRO_GL_VERTEX,
+    CAIRO_GL_LINE_STRIP,
+    CAIRO_GL_LINES
+} cairo_gl_draw_mode_t;
+
+/* This union structure describes a potential source or mask operand to the
+ * compositing equation.
+ */
+typedef struct cairo_gl_operand {
+    cairo_gl_operand_type_t type;
+    union {
+       struct {
+           GLuint tex;
+           cairo_gl_surface_t *surface;
+           cairo_gl_surface_t *owns_surface;
+           cairo_surface_attributes_t attributes;
+           cairo_bool_t use_atlas;
+           cairo_extend_t extend;
+               struct { float x, y; } p1, p2;
+       } texture;
+       struct {
+           GLfloat color[4];
+       } constant;
+       struct {
+           cairo_gl_gradient_t *gradient;
+           cairo_matrix_t m;
+           cairo_circle_double_t circle_d;
+           double radius_0, a;
+           cairo_extend_t extend;
+       } gradient;
+    };
+    unsigned int vertex_offset;
+    cairo_bool_t use_color_attribute;
+} cairo_gl_operand_t;
+
+typedef struct cairo_gl_source {
+    cairo_surface_t base;
+    cairo_gl_operand_t operand;
+} cairo_gl_source_t;
+
+struct _cairo_gl_surface {
     cairo_surface_t base;
+    cairo_gl_operand_t operand;
 
     int width, height;
 
     GLuint tex; /* GL texture object containing our data. */
     GLuint fb; /* GL framebuffer object wrapping our data. */
-    GLuint depth; /* GL framebuffer object holding depth */
+    GLuint depth_stencil; /* GL renderbuffer object for holding stencil buffer clip. */
+
+#if CAIRO_HAS_GL_SURFACE
+    GLuint msaa_rb; /* The ARB MSAA path uses a renderbuffer. */
+    GLuint msaa_fb;
+#endif
+    GLuint msaa_depth_stencil;
+
+    cairo_bool_t stencil_and_msaa_caps_initialized;
+    cairo_bool_t supports_stencil; /* Stencil support for for non-texture surfaces. */
+    cairo_bool_t supports_msaa;
+    cairo_bool_t msaa_active; /* Whether the multisampling
+                                framebuffer is active or not. */
+
     int owns_tex;
     cairo_bool_t needs_update;
-} cairo_gl_surface_t;
+
+    cairo_region_t *clip_region;
+    GLuint bounded_tex;                /* bounded tex for non-texture surface */
+
+    /* Indicate whether we need to cache it in image_cache. */
+    cairo_bool_t needs_to_cache;
+    /* Damage is too expensive to check, we use this flag. */
+    cairo_bool_t content_changed;
+};
 
 typedef struct cairo_gl_glyph_cache {
     cairo_rtree_t rtree;
-    cairo_surface_pattern_t pattern;
+    cairo_gl_surface_t *surface;
 } cairo_gl_glyph_cache_t;
 
 typedef enum cairo_gl_tex {
@@ -131,25 +220,28 @@ typedef enum cairo_gl_tex {
     CAIRO_GL_TEX_TEMP = 2
 } cairo_gl_tex_t;
 
-typedef enum cairo_gl_operand_type {
-    CAIRO_GL_OPERAND_NONE,
-    CAIRO_GL_OPERAND_CONSTANT,
-    CAIRO_GL_OPERAND_TEXTURE,
-    CAIRO_GL_OPERAND_LINEAR_GRADIENT,
-    CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0,
-    CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE,
-    CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT,
-
-    CAIRO_GL_OPERAND_COUNT
-} cairo_gl_operand_type_t;
-
 typedef struct cairo_gl_shader_impl cairo_gl_shader_impl_t;
 
 typedef struct cairo_gl_shader {
     GLuint fragment_shader;
     GLuint program;
+    cairo_hash_table_t *uniform_cache;
 } cairo_gl_shader_t;
 
+typedef struct cairo_gl_image_cache {
+    cairo_rtree_t rtree;
+    cairo_gl_surface_t *surface;
+} cairo_gl_image_cache_t;
+
+typedef struct cairo_gl_image {
+    cairo_rtree_node_t node;
+    cairo_surface_t *original_surface;
+    struct { float x, y; } p1, p2;
+    cairo_gl_context_t *ctx;
+    cairo_bool_t node_removed;
+    cairo_bool_t user_data_removed;
+} cairo_gl_image_t;
+
 typedef enum cairo_gl_shader_in {
     CAIRO_GL_SHADER_IN_NORMAL,
     CAIRO_GL_SHADER_IN_CA_SOURCE,
@@ -158,38 +250,41 @@ typedef enum cairo_gl_shader_in {
     CAIRO_GL_SHADER_IN_COUNT
 } cairo_gl_shader_in_t;
 
+
+typedef struct _cairo_gl_hairline_closure
+{
+    cairo_gl_context_t *ctx;
+    double tolerance;
+    cairo_stroker_dash_t dash;
+    cairo_matrix_t *ctm;
+    cairo_matrix_t *ctm_inverse;
+    cairo_point_t current_point;
+
+    cairo_point_t stroke_first_point;  /* First stroke point at move_to. */
+    double stroke_first_dx;
+    double stroke_first_dy;
+    cairo_bool_t stroke_first_capped;
+    cairo_bool_t moved_to_stroke_first_point;
+
+    cairo_line_cap_t cap_style;
+
+    cairo_bool_t line_last_capped;
+
+    cairo_point_t line_last_point;
+    double line_last_dx;
+    double line_last_dy;
+
+    cairo_bool_t initialized;
+} cairo_gl_hairline_closure_t;
+
 typedef enum cairo_gl_var_type {
   CAIRO_GL_VAR_NONE,
+  CAIRO_GL_VAR_COLOR,
   CAIRO_GL_VAR_TEXCOORDS,
 } cairo_gl_var_type_t;
 
-#define cairo_gl_var_type_hash(src,mask,spans,dest) ((spans) << 3) | ((mask) << 2 | (src << 1) | (dest))
-#define CAIRO_GL_VAR_TYPE_MAX ((CAIRO_GL_VAR_TEXCOORDS << 3) | (CAIRO_GL_VAR_TEXCOORDS << 2) | (CAIRO_GL_VAR_TEXCOORDS << 1) | CAIRO_GL_VAR_TEXCOORDS)
-
-/* This union structure describes a potential source or mask operand to the
- * compositing equation.
- */
-typedef struct cairo_gl_operand {
-    cairo_gl_operand_type_t type;
-    union {
-       struct {
-           GLuint tex;
-           cairo_gl_surface_t *surface;
-           cairo_surface_attributes_t attributes;
-       } texture;
-       struct {
-           GLfloat color[4];
-       } constant;
-       struct {
-           cairo_gl_gradient_t *gradient;
-           cairo_matrix_t m;
-           cairo_circle_double_t circle_d;
-           double radius_0, a;
-           cairo_extend_t extend;
-       } gradient;
-    };
-    unsigned int vertex_offset;
-} cairo_gl_operand_t;
+#define cairo_gl_var_type_hash(src,mask,src_atlas_extend,mask_atlas_extend,src_use_atlas,mask_use_atlas, spans,dest) ((spans) << 11) | ((mask) << 9 | (src << 7) | (mask_atlas_extend << 5) | (src_atlas_extend << 3) | (mask_use_atlas << 2) | (src_use_atlas << 1) | (dest))
+#define CAIRO_GL_VAR_TYPE_MAX ((CAIRO_GL_VAR_TEXCOORDS << 11) | (CAIRO_GL_VAR_TEXCOORDS << 9) | (CAIRO_GL_VAR_TEXCOORDS << 5) | CAIRO_GL_VAR_TEXCOORDS)
 
 typedef void (*cairo_gl_generic_func_t)(void);
 typedef cairo_gl_generic_func_t (*cairo_gl_get_proc_addr_func_t)(const char *procname);
@@ -253,6 +348,22 @@ typedef struct _cairo_gl_dispatch {
                                    GLint level);
     GLenum (*CheckFramebufferStatus) (GLenum target);
     void (*DeleteFramebuffers) (GLsizei n, const GLuint* framebuffers);
+    void (*GenRenderbuffers) (GLsizei n, GLuint *renderbuffers);
+    void (*BindRenderbuffer) (GLenum target, GLuint renderbuffer);
+    void (*RenderbufferStorage) (GLenum target, GLenum internal_format,
+                                GLsizei width, GLsizei height);
+    void (*FramebufferRenderbuffer) (GLenum target, GLenum attachment,
+                                    GLenum renderbuffer_ttarget, GLuint renderbuffer);
+    void (*DeleteRenderbuffers) (GLsizei n, GLuint *renderbuffers);
+    void (*BlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+                            GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+                            GLbitfield mask, GLenum filter);
+    void (*RenderbufferStorageMultisample) (GLenum target, GLsizei samples,
+                                           GLenum internalformat,
+                                           GLsizei width, GLsizei height);
+    void (*FramebufferTexture2DMultisample) (GLenum target, GLenum attachment,
+                                            GLenum textarget, GLuint texture,
+                                            GLint level, GLsizei samples);
 } cairo_gl_dispatch_t;
 
 struct _cairo_gl_context {
@@ -267,6 +378,9 @@ struct _cairo_gl_context {
     GLint max_textures;
     GLenum tex_target;
 
+    GLint num_samples;
+    cairo_bool_t supports_msaa;
+
     const cairo_gl_shader_impl_t *shader_impl;
 
     GLuint vertex_shaders[CAIRO_GL_VAR_TYPE_MAX + 1];
@@ -291,12 +405,31 @@ struct _cairo_gl_context {
     unsigned int vb_offset;
     unsigned int vertex_size;
     cairo_region_t *clip_region;
+    cairo_clip_t *clip;
+    cairo_array_t tristrip_indices;
 
     cairo_bool_t has_mesa_pack_invert;
     cairo_gl_dispatch_t dispatch;
     GLfloat modelviewprojection_matrix[16];
     cairo_gl_flavor_t gl_flavor;
     cairo_bool_t has_map_buffer;
+    cairo_bool_t has_packed_depth_stencil;
+    cairo_bool_t has_npot_repeat;
+
+    cairo_bool_t thread_aware;
+
+    /* GL stencil and depth buffers are shared among all surfaces
+       to preserve memory. In the future this could be a pool of renderbuffers
+       with an eviction policy. */
+    GLuint shared_depth_stencil;
+    int shared_depth_stencil_width;
+    int shared_depth_stencil_height;
+    GLuint shared_msaa_depth_stencil;
+    int shared_msaa_depth_stencil_width;
+    int shared_msaa_depth_stencil_height;
+
+    cairo_gl_image_cache_t image_cache;
+    cairo_gl_draw_mode_t draw_mode;
 
     void (*acquire) (void *ctx);
     void (*release) (void *ctx);
@@ -314,6 +447,8 @@ typedef struct _cairo_gl_composite {
     cairo_gl_operand_t src;
     cairo_gl_operand_t mask;
     cairo_bool_t spans;
+
+    cairo_clip_t *clip;
 } cairo_gl_composite_t;
 
 typedef struct _cairo_gl_font {
@@ -322,8 +457,6 @@ typedef struct _cairo_gl_font {
     cairo_list_t                       link;
 } cairo_gl_font_t;
 
-cairo_private extern const cairo_surface_backend_t _cairo_gl_surface_backend;
-
 static cairo_always_inline GLenum
 _cairo_gl_get_error (void)
 {
@@ -412,7 +545,13 @@ _cairo_gl_context_release (cairo_gl_context_t *ctx, cairo_status_t status)
 }
 
 cairo_private void
-_cairo_gl_context_set_destination (cairo_gl_context_t *ctx, cairo_gl_surface_t *surface);
+_cairo_gl_activate_surface_as_nonmultisampling (cairo_gl_context_t *ctx,
+                                               cairo_gl_surface_t *surface);
+
+cairo_private void
+_cairo_gl_context_set_destination (cairo_gl_context_t *ctx,
+                                  cairo_gl_surface_t *surface,
+                                  cairo_bool_t multisampling);
 
 cairo_private void
 _cairo_gl_context_activate (cairo_gl_context_t *ctx,
@@ -421,12 +560,21 @@ _cairo_gl_context_activate (cairo_gl_context_t *ctx,
 cairo_private cairo_bool_t
 _cairo_gl_operator_is_supported (cairo_operator_t op);
 
+cairo_private cairo_bool_t
+_cairo_gl_ensure_stencil (cairo_gl_context_t *ctx,
+                         cairo_gl_surface_t *surface);
+
+cairo_private void
+_disable_scissor_buffer (void);
+
+cairo_private void
+_disable_stencil_buffer (void);
+
 cairo_private cairo_status_t
 _cairo_gl_composite_init (cairo_gl_composite_t *setup,
                           cairo_operator_t op,
                           cairo_gl_surface_t *dst,
-                          cairo_bool_t has_component_alpha,
-                          const cairo_rectangle_int_t *rect);
+                          cairo_bool_t has_component_alpha);
 
 cairo_private void
 _cairo_gl_composite_fini (cairo_gl_composite_t *setup);
@@ -435,12 +583,17 @@ cairo_private void
 _cairo_gl_composite_set_clip_region (cairo_gl_composite_t *setup,
                                      cairo_region_t *clip_region);
 
+cairo_private void
+_cairo_gl_composite_set_clip(cairo_gl_composite_t *setup,
+                            cairo_clip_t *clip);
+
 cairo_private cairo_int_status_t
 _cairo_gl_composite_set_source (cairo_gl_composite_t *setup,
                                const cairo_pattern_t *pattern,
-                                int src_x, int src_y,
-                                int dst_x, int dst_y,
-                                int width, int height);
+                               const cairo_rectangle_int_t *sample,
+                               const cairo_rectangle_int_t *extents,
+                               cairo_bool_t use_color_attribute);
+
 cairo_private void
 _cairo_gl_composite_set_solid_source (cairo_gl_composite_t *setup,
                                      const cairo_color_t *color);
@@ -452,9 +605,8 @@ _cairo_gl_composite_set_source_operand (cairo_gl_composite_t *setup,
 cairo_private cairo_int_status_t
 _cairo_gl_composite_set_mask (cairo_gl_composite_t *setup,
                              const cairo_pattern_t *pattern,
-                              int src_x, int src_y,
-                              int dst_x, int dst_y,
-                              int width, int height);
+                             const cairo_rectangle_int_t *sample,
+                             const cairo_rectangle_int_t *extents);
 
 cairo_private void
 _cairo_gl_composite_set_mask_operand (cairo_gl_composite_t *setup,
@@ -467,6 +619,11 @@ cairo_private cairo_status_t
 _cairo_gl_composite_begin (cairo_gl_composite_t *setup,
                            cairo_gl_context_t **ctx);
 
+cairo_private cairo_status_t
+_cairo_gl_composite_begin_multisample (cairo_gl_composite_t *setup,
+                                      cairo_gl_context_t **ctx_out,
+                                      cairo_bool_t multisampling);
+
 cairo_private void
 _cairo_gl_composite_emit_rect (cairo_gl_context_t *ctx,
                                GLfloat x1,
@@ -489,6 +646,25 @@ _cairo_gl_composite_emit_glyph (cairo_gl_context_t *ctx,
 cairo_private void
 _cairo_gl_composite_flush (cairo_gl_context_t *ctx);
 
+cairo_private cairo_int_status_t
+_cairo_gl_composite_emit_quad_as_tristrip (cairo_gl_context_t  *ctx,
+                                          cairo_gl_composite_t *setup,
+                                          const cairo_point_t   quad[4]);
+
+cairo_private cairo_int_status_t
+_cairo_gl_composite_emit_triangle_as_tristrip (cairo_gl_context_t      *ctx,
+                                              cairo_gl_composite_t     *setup,
+                                              const cairo_point_t       triangle[3]);
+
+cairo_private cairo_int_status_t
+_cairo_gl_composite_emit_point_as_tristrip_line (cairo_gl_context_t  *ctx,
+                                                const cairo_point_t point[2],
+                                                cairo_bool_t        start_point);
+
+cairo_private cairo_int_status_t
+_cairo_gl_composite_emit_point_as_single_line (cairo_gl_context_t  *ctx,
+                                               const cairo_point_t point[2]);
+
 cairo_private void
 _cairo_gl_context_destroy_operand (cairo_gl_context_t *ctx,
                                    cairo_gl_tex_t tex_unit);
@@ -517,15 +693,6 @@ _cairo_gl_surface_show_glyphs (void                        *abstract_dst,
                               const cairo_clip_t       *clip,
                               int                      *remaining_glyphs);
 
-static inline int
-_cairo_gl_y_flip (cairo_gl_surface_t *surface, int y)
-{
-    if (surface->fb)
-       return y;
-    else
-       return (surface->height - 1) - y;
-}
-
 cairo_private cairo_status_t
 _cairo_gl_context_init_shaders (cairo_gl_context_t *ctx);
 
@@ -603,9 +770,10 @@ cairo_private cairo_int_status_t
 _cairo_gl_operand_init (cairo_gl_operand_t *operand,
                        const cairo_pattern_t *pattern,
                        cairo_gl_surface_t *dst,
-                       int src_x, int src_y,
-                       int dst_x, int dst_y,
-                       int width, int height);
+                       const cairo_rectangle_int_t *sample,
+                       const cairo_rectangle_int_t *extents,
+                       cairo_bool_t use_color_attribute);
+
 cairo_private void
 _cairo_gl_solid_operand_init (cairo_gl_operand_t *operand,
                              const cairo_color_t *color);
@@ -619,13 +787,20 @@ _cairo_gl_operand_get_gl_filter (cairo_gl_operand_t *operand);
 cairo_private cairo_extend_t
 _cairo_gl_operand_get_extend (cairo_gl_operand_t *operand);
 
+cairo_private cairo_extend_t
+_cairo_gl_operand_get_atlas_extend (cairo_gl_operand_t *operand);
+
 cairo_private unsigned int
-_cairo_gl_operand_get_vertex_size (cairo_gl_operand_type_t type);
+_cairo_gl_operand_get_vertex_size (cairo_gl_operand_t *operand);
+
+cairo_private cairo_bool_t
+_cairo_gl_operand_get_use_atlas (cairo_gl_operand_t *operand);
 
 cairo_private cairo_bool_t
 _cairo_gl_operand_needs_setup (cairo_gl_operand_t *dest,
                                cairo_gl_operand_t *source,
-                               unsigned int        vertex_offset);
+                               unsigned int        vertex_offset,
+                               cairo_bool_t        *needs_flush);
 
 cairo_private void
 _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
@@ -633,19 +808,20 @@ _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
                                   cairo_gl_tex_t      tex_unit);
 
 cairo_private void
-_cairo_gl_operand_emit (cairo_gl_operand_t *operand,
-                        GLfloat ** vb,
-                        GLfloat x,
-                        GLfloat y);
-
-cairo_private void
 _cairo_gl_operand_copy (cairo_gl_operand_t *dst,
                        const cairo_gl_operand_t *src);
 
 cairo_private void
+_cairo_gl_operand_translate (cairo_gl_operand_t *operand,
+                            double tx, double ty);
+
+cairo_private void
 _cairo_gl_operand_destroy (cairo_gl_operand_t *operand);
 
 cairo_private const cairo_compositor_t *
+_cairo_gl_msaa_compositor_get (void);
+
+cairo_private const cairo_compositor_t *
 _cairo_gl_span_compositor_get (void);
 
 cairo_private const cairo_compositor_t *
@@ -667,11 +843,111 @@ _cairo_gl_composite_glyphs (void                 *_dst,
                            int                          dst_y,
                            cairo_composite_glyphs_info_t *info);
 
+cairo_int_status_t
+_cairo_gl_composite_glyphs_with_clip (void                         *_dst,
+                                     cairo_operator_t               op,
+                                     cairo_surface_t               *_src,
+                                     int                            src_x,
+                                     int                            src_y,
+                                     int                            dst_x,
+                                     int                            dst_y,
+                                     cairo_composite_glyphs_info_t *info,
+                                     cairo_clip_t                           *clip,
+                                     cairo_bool_t                           via_msaa_compositor);
+
+cairo_private void
+_cairo_gl_image_node_destroy (cairo_rtree_node_t *node);
+
+cairo_private void
+_cairo_gl_image_node_fini (void *data);
+
+cairo_private void
+_cairo_gl_image_cache_unlock (cairo_gl_context_t *ctx);
+
+cairo_int_status_t
+_cairo_gl_image_cache_init (cairo_gl_context_t *ctx);
+
+cairo_private void
+_cairo_gl_ensure_framebuffer (cairo_gl_context_t *ctx,
+                              cairo_gl_surface_t *surface);
+
 cairo_private cairo_surface_t *
 _cairo_gl_surface_create_scratch (cairo_gl_context_t   *ctx,
                                  cairo_content_t       content,
                                  int                   width,
-                                 int                   height);
+                                 int                   height,
+                                 cairo_bool_t          true_alpha);
+
+cairo_private cairo_surface_t *
+_cairo_gl_pattern_to_source (cairo_surface_t *dst,
+                            const cairo_pattern_t *pattern,
+                            cairo_bool_t is_mask,
+                            const cairo_rectangle_int_t *extents,
+                            const cairo_rectangle_int_t *sample,
+                            int *src_x, int *src_y);
+
+cairo_private cairo_int_status_t
+_cairo_gl_msaa_compositor_draw_clip (cairo_gl_context_t *ctx,
+                                    cairo_gl_composite_t *setup,
+                                    cairo_clip_t *clip,
+                                    cairo_traps_t *traps);
+
+cairo_private cairo_surface_t *
+_cairo_gl_white_source (void);
+
+static inline cairo_gl_operand_t *
+source_to_operand (cairo_surface_t *surface)
+{
+    cairo_gl_source_t *source = (cairo_gl_source_t *)surface;
+    return source ? &source->operand : NULL;
+}
+
+static inline void
+_cairo_gl_glyph_cache_unlock (cairo_gl_glyph_cache_t *cache)
+{
+    _cairo_rtree_unpin (&cache->rtree);
+}
+
+cairo_private void
+_cairo_gl_scissor_to_extents (cairo_gl_surface_t       *surface,
+                             const cairo_rectangle_int_t       *extents);
+
+
+cairo_private cairo_bool_t
+_cairo_gl_hairline_style_is_hairline (const cairo_stroke_style_t *style,
+                                      const cairo_matrix_t       *ctm);
+
+cairo_private cairo_status_t
+_cairo_gl_hairline_move_to (void *closure,
+                            const cairo_point_t *point);
+
+cairo_private cairo_status_t
+_cairo_gl_hairline_line_to (void *closure,
+                            const cairo_point_t *point);
+
+cairo_private cairo_status_t
+_cairo_gl_hairline_line_to_dashed (void *closure,
+                                   const cairo_point_t *point);
+
+cairo_private cairo_status_t
+_cairo_gl_hairline_curve_to (void *closure,
+                             const cairo_point_t *p0,
+                             const cairo_point_t *p1,
+                             const cairo_point_t *p2);
+
+cairo_private cairo_status_t
+_cairo_gl_hairline_close_path (void *closure);
+
+cairo_private cairo_status_t
+_cairo_gl_path_fixed_stroke_to_hairline (const cairo_path_fixed_t *path,
+                                         cairo_gl_hairline_closure_t *closure,
+                                         const cairo_stroke_style_t *style,
+                                         const cairo_matrix_t *ctm,
+                                         const cairo_matrix_t *ctm_inverse,
+                                         cairo_path_fixed_move_to_func_t *move_to,
+                                         cairo_path_fixed_line_to_func_t *line_to,
+                                         cairo_path_fixed_curve_to_func_t *curve_to,
+                                         cairo_path_fixed_close_path_func_t *close_path);
 
 slim_hidden_proto (cairo_gl_surface_create);
 slim_hidden_proto (cairo_gl_surface_create_for_texture);
index b3af6f7..b9a0f7d 100644 (file)
@@ -106,8 +106,8 @@ typedef struct cairo_gl_shader_impl {
 static cairo_status_t
 _cairo_gl_shader_compile (cairo_gl_context_t *ctx,
                          cairo_gl_shader_t *shader,
-                         cairo_gl_var_type_t src,
-                         cairo_gl_var_type_t mask,
+                         cairo_gl_operand_t *src,
+                         cairo_gl_operand_t *mask,
                          cairo_bool_t use_coverage,
                          const char *fragment_text);
 
@@ -163,10 +163,20 @@ link_shader_core_2_0 (cairo_gl_context_t *ctx, GLuint *program,
                                  "Vertex");
     dispatch->BindAttribLocation (*program, CAIRO_GL_COLOR_ATTRIB_INDEX,
                                  "Color");
+    dispatch->BindAttribLocation (*program, CAIRO_GL_COVERAGE_ATTRIB_INDEX,
+                                 "Coverage");
     dispatch->BindAttribLocation (*program, CAIRO_GL_TEXCOORD0_ATTRIB_INDEX,
                                  "MultiTexCoord0");
     dispatch->BindAttribLocation (*program, CAIRO_GL_TEXCOORD1_ATTRIB_INDEX,
                                  "MultiTexCoord1");
+    dispatch->BindAttribLocation (*program, CAIRO_GL_START_COORD0_ATTRIB_INDEX,
+                                 "StartCoords0");
+    dispatch->BindAttribLocation (*program, CAIRO_GL_START_COORD1_ATTRIB_INDEX,
+                                 "StartCoords1");
+    dispatch->BindAttribLocation (*program, CAIRO_GL_STOP_COORD0_ATTRIB_INDEX,
+                                 "StopCoords0");
+    dispatch->BindAttribLocation (*program, CAIRO_GL_STOP_COORD1_ATTRIB_INDEX,
+                                 "StopCoords1");
 
     dispatch->LinkProgram (*program);
     dispatch->GetProgramiv (*program, GL_LINK_STATUS, &gl_status);
@@ -202,19 +212,99 @@ destroy_program_core_2_0 (cairo_gl_context_t *ctx, GLuint shader)
     ctx->dispatch.DeleteProgram (shader);
 }
 
+typedef struct _cairo_gl_uniform_entry {
+    cairo_hash_entry_t base;
+    char *name;
+    GLint location;
+} cairo_gl_uniform_entry_t;
+
 static void
+_cairo_gl_uniform_init_key (cairo_gl_uniform_entry_t *key,
+                           const char *name)
+{
+    unsigned long sum = 0;
+    unsigned int i;
+
+    for (i = 0; i < strlen(name); i++)
+        sum += name[i];
+    key->base.hash = sum;
+    key->name = strdup(name);
+    key->location = -1;
+}
+
+static cairo_status_t
+create_gl_uniform_entry (const char *name,
+                        cairo_gl_uniform_entry_t **entry)
+{
+    *entry = malloc (sizeof (cairo_gl_uniform_entry_t));
+    if (unlikely (*entry == NULL))
+        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+    _cairo_gl_uniform_init_key (*entry, name);
+    return CAIRO_STATUS_SUCCESS;
+}
+
+
+static cairo_bool_t
+_cairo_gl_uniform_equal (const void *key_a,
+                        const void *key_b)
+{
+    const cairo_gl_uniform_entry_t *a = key_a;
+    const cairo_gl_uniform_entry_t *b = key_b;
+
+    return strcmp (a->name, b->name) == 0;
+}
+
+static cairo_int_status_t
+get_uniform_location (cairo_gl_context_t *ctx,
+                     cairo_gl_shader_t *shader,
+                     const char *name,
+                     GLint *location)
+{
+    cairo_gl_uniform_entry_t *key, *uniform_entry;
+    cairo_int_status_t status;
+
+    status = create_gl_uniform_entry (name, &key);
+    if (status)
+       return status;
+
+    //_cairo_gl_uniform_init_key (key, name);
+    uniform_entry = _cairo_hash_table_lookup (shader->uniform_cache,
+                                             &key->base);
+    if (uniform_entry) {
+       *location = uniform_entry->location;
+       free (key->name);
+       free (key);
+       return CAIRO_INT_STATUS_SUCCESS;
+    }
+
+    key->location = ctx->dispatch.GetUniformLocation (shader->program, name);
+    status = _cairo_hash_table_insert (shader->uniform_cache, &key->base);
+    *location = key->location;
+
+    return status;
+}
+
+static cairo_int_status_t
 bind_float_core_2_0 (cairo_gl_context_t *ctx,
                     cairo_gl_shader_t *shader,
                     const char *name,
                     float value)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
-    GLint location = dispatch->GetUniformLocation (shader->program, name);
-    assert (location != -1);
+    GLint location;
+    cairo_int_status_t status;
+
+    status = get_uniform_location (ctx, shader, name, &location);
+    if (status)
+       return status;
+
+    assert(location != -1);
     dispatch->Uniform1f (location, value);
+    return CAIRO_INT_STATUS_SUCCESS;
 }
 
-static void
+static cairo_int_status_t
 bind_vec2_core_2_0 (cairo_gl_context_t *ctx,
                    cairo_gl_shader_t *shader,
                    const char *name,
@@ -222,12 +312,19 @@ bind_vec2_core_2_0 (cairo_gl_context_t *ctx,
                    float value1)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
-    GLint location = dispatch->GetUniformLocation (shader->program, name);
-    assert (location != -1);
+    GLint location;
+    cairo_int_status_t status;
+
+    status = get_uniform_location (ctx, shader, name, &location);
+    if (status)
+       return status;
+
+    assert(location != -1);
     dispatch->Uniform2f (location, value0, value1);
+    return CAIRO_INT_STATUS_SUCCESS;
 }
 
-static void
+static cairo_int_status_t
 bind_vec3_core_2_0 (cairo_gl_context_t *ctx,
                    cairo_gl_shader_t *shader,
                    const char *name,
@@ -236,12 +333,19 @@ bind_vec3_core_2_0 (cairo_gl_context_t *ctx,
                    float value2)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
-    GLint location = dispatch->GetUniformLocation (shader->program, name);
-    assert (location != -1);
+    GLint location;
+    cairo_int_status_t status;
+
+    status = get_uniform_location (ctx, shader, name, &location);
+    if (status)
+       return status;
+
+    assert(location != -1);
     dispatch->Uniform3f (location, value0, value1, value2);
+    return CAIRO_INT_STATUS_SUCCESS;
 }
 
-static void
+static cairo_int_status_t
 bind_vec4_core_2_0 (cairo_gl_context_t *ctx,
                    cairo_gl_shader_t *shader,
                    const char *name,
@@ -251,38 +355,59 @@ bind_vec4_core_2_0 (cairo_gl_context_t *ctx,
                    float value3)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
-    GLint location = dispatch->GetUniformLocation (shader->program, name);
-    assert (location != -1);
+    GLint location;
+    cairo_int_status_t status;
+
+    status = get_uniform_location (ctx, shader, name, &location);
+    if (status)
+       return status;
+
+    assert(location != -1);
     dispatch->Uniform4f (location, value0, value1, value2, value3);
+    return CAIRO_INT_STATUS_SUCCESS;
 }
 
-static void
+static cairo_int_status_t
 bind_matrix_core_2_0 (cairo_gl_context_t *ctx,
                      cairo_gl_shader_t *shader,
                      const char *name,
                      cairo_matrix_t* m)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
-    GLint location = dispatch->GetUniformLocation (shader->program, name);
+    GLint location;
+    cairo_int_status_t status;
     float gl_m[16] = {
         m->xx, m->xy, m->x0,
         m->yx, m->yy, m->y0,
         0,     0,     1
     };
-    assert (location != -1);
+
+    status = get_uniform_location (ctx, shader, name, &location);
+    if (status)
+       return status;
+
+    assert(location != -1);
     dispatch->UniformMatrix3fv (location, 1, GL_TRUE, gl_m);
+    return CAIRO_INT_STATUS_SUCCESS;
 }
 
-static void
+static cairo_int_status_t
 bind_matrix4f_core_2_0 (cairo_gl_context_t *ctx,
                        cairo_gl_shader_t *shader,
                        const char *name,
                        GLfloat* gl_m)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
-    GLint location = dispatch->GetUniformLocation (shader->program, name);
-    assert (location != -1);
+    GLint location;
+    cairo_int_status_t status;
+
+    status = get_uniform_location (ctx, shader, name, &location);
+    if (status)
+       return status;
+
+    assert(location != -1);
     dispatch->UniformMatrix4fv (location, 1, GL_FALSE, gl_m);
+    return CAIRO_INT_STATUS_SUCCESS;
 }
 
 static void
@@ -290,9 +415,9 @@ use_program_core_2_0 (cairo_gl_context_t *ctx,
                      cairo_gl_shader_t *shader)
 {
     if (shader)
-       ctx->dispatch.UseProgram (shader->program);
+        ctx->dispatch.UseProgram (shader->program);
     else
-       ctx->dispatch.UseProgram (0);
+        ctx->dispatch.UseProgram (0);
 }
 
 static const cairo_gl_shader_impl_t shader_impl_core_2_0 = {
@@ -316,11 +441,17 @@ typedef struct _cairo_shader_cache_entry {
     cairo_gl_operand_type_t mask;
     cairo_gl_operand_type_t dest;
     cairo_bool_t use_coverage;
+    cairo_bool_t use_color_attribute;
     cairo_gl_shader_in_t in;
     GLint src_gl_filter;
     cairo_bool_t src_border_fade;
+    cairo_extend_t src_extend;
     GLint mask_gl_filter;
     cairo_bool_t mask_border_fade;
+    cairo_extend_t mask_extend;
+
+    cairo_bool_t src_use_atlas;
+    cairo_bool_t mask_use_atlas;
 
     cairo_gl_context_t *ctx; /* XXX: needed to destroy the program */
     cairo_gl_shader_t shader;
@@ -331,12 +462,16 @@ _cairo_gl_shader_cache_equal_desktop (const void *key_a, const void *key_b)
 {
     const cairo_shader_cache_entry_t *a = key_a;
     const cairo_shader_cache_entry_t *b = key_b;
+    cairo_bool_t both_have_npot_repeat =
+       a->ctx->has_npot_repeat && b->ctx->has_npot_repeat;
 
     return a->src  == b->src  &&
            a->mask == b->mask &&
            a->dest == b->dest &&
           a->use_coverage == b->use_coverage &&
-           a->in   == b->in;
+           a->in   == b->in &&
+          (both_have_npot_repeat || a->src_extend == b->src_extend) &&
+          (both_have_npot_repeat || a->mask_extend == b->mask_extend);
 }
 
 /*
@@ -349,6 +484,8 @@ _cairo_gl_shader_cache_equal_gles2 (const void *key_a, const void *key_b)
 {
     const cairo_shader_cache_entry_t *a = key_a;
     const cairo_shader_cache_entry_t *b = key_b;
+    cairo_bool_t both_have_npot_repeat =
+       a->ctx->has_npot_repeat && b->ctx->has_npot_repeat;
 
     return a->src  == b->src  &&
           a->mask == b->mask &&
@@ -357,14 +494,16 @@ _cairo_gl_shader_cache_equal_gles2 (const void *key_a, const void *key_b)
           a->in   == b->in   &&
           a->src_gl_filter == b->src_gl_filter &&
           a->src_border_fade == b->src_border_fade &&
+          (both_have_npot_repeat || a->src_extend == b->src_extend) &&
           a->mask_gl_filter == b->mask_gl_filter &&
-          a->mask_border_fade == b->mask_border_fade;
+          a->mask_border_fade == b->mask_border_fade &&
+          (both_have_npot_repeat || a->mask_extend == b->mask_extend);
 }
 
 static unsigned long
 _cairo_gl_shader_cache_hash (const cairo_shader_cache_entry_t *entry)
 {
-    return (entry->src << 24) | (entry->mask << 16) | (entry->dest << 8) | (entry->in << 1) | entry->use_coverage;
+    return (entry->src << 16) | (entry->mask << 13) | (entry->dest << 10) | (entry->in << 8) | (entry->mask_extend << 6) | (entry->src_extend << 4) |(entry->mask_use_atlas << 3) | (entry->src_use_atlas << 2) |(entry->use_color_attribute << 1) | entry->use_coverage;
 }
 
 static void
@@ -383,6 +522,7 @@ _cairo_gl_shader_init (cairo_gl_shader_t *shader)
 {
     shader->fragment_shader = 0;
     shader->program = 0;
+    shader->uniform_cache = _cairo_hash_table_create (_cairo_gl_uniform_equal);
 }
 
 cairo_status_t
@@ -428,8 +568,8 @@ _cairo_gl_context_init_shaders (cairo_gl_context_t *ctx)
     _cairo_gl_shader_init (&ctx->fill_rectangles_shader);
     status = _cairo_gl_shader_compile (ctx,
                                       &ctx->fill_rectangles_shader,
-                                      CAIRO_GL_VAR_NONE,
-                                      CAIRO_GL_VAR_NONE,
+                                      NULL,
+                                      NULL,
                                       FALSE,
                                       fill_fs_source);
     if (unlikely (status))
@@ -449,6 +589,16 @@ _cairo_gl_context_fini_shaders (cairo_gl_context_t *ctx)
     }
 
     _cairo_cache_fini (&ctx->shaders);
+    _cairo_gl_shader_fini (ctx, &ctx->fill_rectangles_shader);
+}
+
+static void
+destroy_uniform_callback (void *entry, void *closure)
+{
+    cairo_gl_uniform_entry_t *key = entry;
+    _cairo_hash_table_remove ((cairo_hash_table_t *) closure, &key->base);
+    free (key->name);
+    free (key);
 }
 
 void
@@ -460,20 +610,32 @@ _cairo_gl_shader_fini (cairo_gl_context_t *ctx,
 
     if (shader->program)
         ctx->shader_impl->destroy_program (ctx, shader->program);
+
+    if (shader->uniform_cache) {
+       _cairo_hash_table_foreach (shader->uniform_cache,
+                                  destroy_uniform_callback,
+                                  shader->uniform_cache);
+       _cairo_hash_table_destroy (shader->uniform_cache);
+    }
 }
 
 static const char *operand_names[] = { "source", "mask", "dest" };
 
 static cairo_gl_var_type_t
-cairo_gl_operand_get_var_type (cairo_gl_operand_type_t type)
+cairo_gl_operand_get_var_type (cairo_gl_operand_type_t type,
+                               cairo_bool_t use_color_attribute)
 {
     switch (type) {
     default:
     case CAIRO_GL_OPERAND_COUNT:
         ASSERT_NOT_REACHED;
     case CAIRO_GL_OPERAND_NONE:
-    case CAIRO_GL_OPERAND_CONSTANT:
         return CAIRO_GL_VAR_NONE;
+    case CAIRO_GL_OPERAND_CONSTANT:
+        if (use_color_attribute)
+            return CAIRO_GL_VAR_COLOR;
+        else
+            return CAIRO_GL_VAR_NONE;
     case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
@@ -486,17 +648,27 @@ cairo_gl_operand_get_var_type (cairo_gl_operand_type_t type)
 static void
 cairo_gl_shader_emit_variable (cairo_output_stream_t *stream,
                                cairo_gl_var_type_t type,
-                               cairo_gl_tex_t name)
+                               cairo_gl_tex_t name,
+                               cairo_bool_t use_atlas)
 {
     switch (type) {
     default:
         ASSERT_NOT_REACHED;
     case CAIRO_GL_VAR_NONE:
         break;
+    case CAIRO_GL_VAR_COLOR:
+        _cairo_output_stream_printf (stream,
+                                     "varying vec4 fragment_color;\n");
+        break;
     case CAIRO_GL_VAR_TEXCOORDS:
         _cairo_output_stream_printf (stream,
                                      "varying vec2 %s_texcoords;\n",
                                      operand_names[name]);
+        if (use_atlas)
+            _cairo_output_stream_printf (stream,
+                                         "varying vec2 %s_start_coords;\n"
+                                         "varying vec2 %s_stop_coords;\n",
+                                         operand_names[name], operand_names[name]);
         break;
     }
 }
@@ -511,6 +683,10 @@ cairo_gl_shader_emit_vertex (cairo_output_stream_t *stream,
         ASSERT_NOT_REACHED;
     case CAIRO_GL_VAR_NONE:
         break;
+    case CAIRO_GL_VAR_COLOR:
+        _cairo_output_stream_printf (stream,
+                                     "    fragment_color = Color;\n");
+        break;
     case CAIRO_GL_VAR_TEXCOORDS:
         _cairo_output_stream_printf (stream,
                                      "    %s_texcoords = MultiTexCoord%d.xy;\n",
@@ -528,41 +704,70 @@ cairo_gl_shader_dcl_coverage (cairo_output_stream_t *stream)
 static void
 cairo_gl_shader_def_coverage (cairo_output_stream_t *stream)
 {
-    _cairo_output_stream_printf (stream, "    coverage = Color.a;\n");
+    _cairo_output_stream_printf (stream, "    coverage = Coverage.a;\n");
+}
+
+static void
+cairo_gl_shader_def_use_atlas (cairo_output_stream_t *stream,
+                               cairo_gl_var_type_t type,
+                               cairo_gl_tex_t name)
+{
+    if (type == CAIRO_GL_VAR_TEXCOORDS) {
+            _cairo_output_stream_printf (stream,
+                                        "    %s_start_coords = StartCoords%d.xy;\n"
+                                        "    %s_stop_coords = StopCoords%d.xy;\n",
+                                        operand_names[name], name,
+                                        operand_names[name], name);
+    }
 }
 
 static cairo_status_t
-cairo_gl_shader_get_vertex_source (cairo_gl_var_type_t src,
-                                   cairo_gl_var_type_t mask,
-                                  cairo_bool_t use_coverage,
+cairo_gl_shader_get_vertex_source (cairo_gl_var_type_t src_type,
+                                   cairo_gl_var_type_t mask_type,
+                                   cairo_bool_t src_use_atlas,
+                                   cairo_bool_t mask_use_atlas,
+                                   cairo_bool_t use_coverage,
                                    cairo_gl_var_type_t dest,
-                                  char **out)
+                                   char **out)
 {
     cairo_output_stream_t *stream = _cairo_memory_stream_create ();
     unsigned char *source;
     unsigned long length;
     cairo_status_t status;
 
-    cairo_gl_shader_emit_variable (stream, src, CAIRO_GL_TEX_SOURCE);
-    cairo_gl_shader_emit_variable (stream, mask, CAIRO_GL_TEX_MASK);
+    cairo_gl_shader_emit_variable (stream, src_type, CAIRO_GL_TEX_SOURCE,
+                                  src_use_atlas);
+    cairo_gl_shader_emit_variable (stream, mask_type, CAIRO_GL_TEX_MASK,
+                                  mask_use_atlas);
     if (use_coverage)
        cairo_gl_shader_dcl_coverage (stream);
 
     _cairo_output_stream_printf (stream,
                                 "attribute vec4 Vertex;\n"
                                 "attribute vec4 Color;\n"
+                                "attribute vec4 Coverage;\n"
                                 "attribute vec4 MultiTexCoord0;\n"
                                 "attribute vec4 MultiTexCoord1;\n"
+                                "attribute vec2 StartCoords0;\n"
+                                "attribute vec2 StartCoords1;\n"
+                                "attribute vec2 StopCoords0;\n"
+                                "attribute vec2 StopCoords1;\n"
                                 "uniform mat4 ModelViewProjectionMatrix;\n"
                                 "void main()\n"
                                 "{\n"
                                 "    gl_Position = ModelViewProjectionMatrix * Vertex;\n");
 
-    cairo_gl_shader_emit_vertex (stream, src, CAIRO_GL_TEX_SOURCE);
-    cairo_gl_shader_emit_vertex (stream, mask, CAIRO_GL_TEX_MASK);
+    cairo_gl_shader_emit_vertex (stream, src_type, CAIRO_GL_TEX_SOURCE);
+    cairo_gl_shader_emit_vertex (stream, mask_type, CAIRO_GL_TEX_MASK);
+
     if (use_coverage)
        cairo_gl_shader_def_coverage (stream);
 
+    if (src_use_atlas)
+       cairo_gl_shader_def_use_atlas (stream, src_type, CAIRO_GL_TEX_SOURCE);
+    if (mask_use_atlas)
+       cairo_gl_shader_def_use_atlas (stream, mask_type, CAIRO_GL_TEX_MASK);
+
     _cairo_output_stream_write (stream,
                                "}\n\0", 3);
 
@@ -598,6 +803,7 @@ cairo_gl_shader_emit_color (cairo_output_stream_t *stream,
 {
     const char *namestr = operand_names[name];
     const char *rectstr = (ctx->tex_target == GL_TEXTURE_RECTANGLE ? "Rect" : "");
+    cairo_bool_t use_atlas = _cairo_gl_operand_get_use_atlas (op);
 
     switch (op->type) {
     case CAIRO_GL_OPERAND_COUNT:
@@ -613,22 +819,44 @@ cairo_gl_shader_emit_color (cairo_output_stream_t *stream,
             namestr);
         break;
     case CAIRO_GL_OPERAND_CONSTANT:
-        _cairo_output_stream_printf (stream, 
-            "uniform vec4 %s_constant;\n"
-            "vec4 get_%s()\n"
-            "{\n"
-            "    return %s_constant;\n"
-            "}\n",
-            namestr, namestr, namestr);
+        if (op->use_color_attribute)
+          _cairo_output_stream_printf (stream,
+                                       "varying vec4 fragment_color;\n"
+                                       "vec4 get_%s()\n"
+                                       "{\n"
+                                       "    return fragment_color;\n"
+                                       "}\n",
+                                       namestr);
+        else
+          _cairo_output_stream_printf (stream,
+                                       "uniform vec4 %s_constant;\n"
+                                       "vec4 get_%s()\n"
+                                       "{\n"
+                                       "    return %s_constant;\n"
+                                       "}\n",
+                                       namestr, namestr, namestr);
         break;
     case CAIRO_GL_OPERAND_TEXTURE:
-       _cairo_output_stream_printf (stream,
-            "uniform sampler2D%s %s_sampler;\n"
-            "uniform vec2 %s_texdims;\n"
-            "varying vec2 %s_texcoords;\n"
-            "vec4 get_%s()\n"
-            "{\n",
-            rectstr, namestr, namestr, namestr, namestr);
+       if (! use_atlas) {
+           _cairo_output_stream_printf (stream,
+               "uniform sampler2D%s %s_sampler;\n"
+               "uniform vec2 %s_texdims;\n"
+               "varying vec2 %s_texcoords;\n"
+               "vec4 get_%s()\n"
+               "{\n",
+               rectstr, namestr, namestr, namestr, namestr);
+       } else {
+           _cairo_output_stream_printf (stream,
+               "uniform sampler2D%s %s_sampler;\n"
+               "uniform vec2 %s_texdims;\n"
+               "varying vec2 %s_texcoords;\n"
+               "varying vec2 %s_start_coords;\n"
+               "varying vec2 %s_stop_coords;\n"
+               "vec4 get_%s()\n"
+               "{\n",
+               rectstr, namestr, namestr, namestr, namestr, namestr, namestr);
+       }
+
        if (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES &&
            _cairo_gl_shader_needs_border_fade (op))
        {
@@ -641,10 +869,17 @@ cairo_gl_shader_emit_color (cairo_output_stream_t *stream,
        }
        else
        {
-           _cairo_output_stream_printf (stream,
-               "    return texture2D%s (%s_sampler, %s_texcoords);\n"
-               "}\n",
-               rectstr, namestr, namestr);
+           if (! use_atlas) {
+               _cairo_output_stream_printf (stream,
+                   "    return texture2D%s (%s_sampler, %s_wrap (%s_texcoords));\n"
+                   "}\n",
+                   rectstr, namestr, namestr, namestr);
+           } else {
+               _cairo_output_stream_printf (stream,
+                   "    return texture2D%s (%s_sampler, %s_wrap (%s_texcoords, %s_start_coords, %s_stop_coords));\n"
+                   "}\n",
+                   rectstr, namestr, namestr, namestr, namestr, namestr);
+           }
        }
         break;
     case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
@@ -669,9 +904,9 @@ cairo_gl_shader_emit_color (cairo_output_stream_t *stream,
        else
        {
            _cairo_output_stream_printf (stream,
-               "    return texture2D%s (%s_sampler, vec2 (%s_texcoords.x, 0.5));\n"
+               "    return texture2D%s (%s_sampler, %s_wrap (vec2 (%s_texcoords.x, 0.5)));\n"
                "}\n",
-               rectstr, namestr, namestr);
+               rectstr, namestr, namestr, namestr);
        }
        break;
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_A0:
@@ -706,9 +941,10 @@ cairo_gl_shader_emit_color (cairo_output_stream_t *stream,
        else
        {
            _cairo_output_stream_printf (stream,
-               "    return mix (vec4 (0.0), texture2D%s (%s_sampler, vec2(t, 0.5)), is_valid);\n"
+               "    vec4 texel = texture2D%s (%s_sampler, %s_wrap (vec2 (t, 0.5)));\n"
+               "    return mix (vec4 (0.0), texel, is_valid);\n"
                "}\n",
-               rectstr, namestr);
+               rectstr, namestr, namestr);
        }
        break;
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_NONE:
@@ -750,9 +986,10 @@ cairo_gl_shader_emit_color (cairo_output_stream_t *stream,
        else
        {
            _cairo_output_stream_printf (stream,
-               "    return mix (vec4 (0.0), texture2D%s (%s_sampler, vec2 (upper_t, 0.5)), has_color);\n"
+               "    vec4 texel = texture2D%s (%s_sampler, %s_wrap (vec2(upper_t, 0.5)));\n"
+               "    return mix (vec4 (0.0), texel, has_color);\n"
                "}\n",
-               rectstr, namestr);
+               rectstr, namestr, namestr);
        }
        break;
     case CAIRO_GL_OPERAND_RADIAL_GRADIENT_EXT:
@@ -778,11 +1015,12 @@ cairo_gl_shader_emit_color (cairo_output_stream_t *stream,
            "    float has_color = step (0., det) * max (is_valid.x, is_valid.y);\n"
            "    \n"
            "    float upper_t = mix (t.y, t.x, is_valid.x);\n"
-           "    return mix (vec4 (0.0), texture2D%s (%s_sampler, vec2 (upper_t, 0.5)), has_color);\n"
+           "    vec4 texel = texture2D%s (%s_sampler, %s_wrap (vec2(upper_t, 0.5)));\n"
+           "    return mix (vec4 (0.0), texel, has_color);\n"
            "}\n",
            namestr, rectstr, namestr, namestr, namestr, namestr,
            namestr, namestr, namestr, namestr, namestr,
-           namestr, namestr, namestr, rectstr, namestr);
+           namestr, namestr, namestr, rectstr, namestr, namestr);
        break;
     }
 }
@@ -838,6 +1076,100 @@ _cairo_gl_shader_emit_border_fade (cairo_output_stream_t *stream,
     _cairo_output_stream_printf (stream, "}\n");
 }
 
+/*
+ * Emits the wrap function used by an operand.
+ *
+ * In OpenGL ES 2.0, repeat wrap modes (GL_REPEAT and GL_MIRRORED REPEAT) are
+ * only available for NPOT textures if the GL_OES_texture_npot is supported.
+ * If GL_OES_texture_npot is not supported, we need to implement the wrapping
+ * functionality in the shader.
+ */
+static void
+_cairo_gl_shader_emit_wrap (cairo_gl_context_t *ctx,
+                           cairo_output_stream_t *stream,
+                           cairo_gl_operand_t *operand,
+                           cairo_gl_tex_t name)
+{
+    const char *namestr = operand_names[name];
+    cairo_extend_t extend = _cairo_gl_operand_get_extend (operand);
+    cairo_bool_t use_atlas = _cairo_gl_operand_get_use_atlas (operand);
+
+    if (use_atlas)
+       _cairo_output_stream_printf (stream,
+           "vec2 %s_wrap (vec2 coords, vec2 start_coords, vec2 stop_coords)\n"
+           "{\n",
+           namestr);
+    else
+       _cairo_output_stream_printf (stream,
+           "vec2 %s_wrap(vec2 coords)\n"
+           "{\n",
+           namestr);
+
+    if (use_atlas) {
+       if (extend == CAIRO_EXTEND_REPEAT) {
+           _cairo_output_stream_printf (stream,
+               "    vec2 range = stop_coords - start_coords;\n"
+               "    return mod (coords - start_coords, range) + start_coords;\n");
+       } else if (extend == CAIRO_EXTEND_REFLECT){
+           _cairo_output_stream_printf (stream,
+               "    vec2 range = stop_coords - start_coords;\n"
+               "    vec2 frac = mod (coords - start_coords, range);\n"
+               "    return mix(frac + start_coords, range - frac + start_coords,  mod(floor((coords - start_coords) / range), 2.0));\n");
+       }
+       else if (extend == CAIRO_EXTEND_PAD) {
+           _cairo_output_stream_printf (stream,
+               "    bvec2 compare_to_start = lessThan (coords, start_coords);\n"
+               "    bvec2 compare_to_stop = greaterThan (coords, stop_coords);\n"
+               "    if (all (compare_to_start))\n"
+               "        return start_coords;\n"
+               "    else if (all (compare_to_stop))\n"
+               "        return stop_coords;\n"
+               "    else if (compare_to_start.x && compare_to_stop.y)\n"
+               "        return vec2 (start_coords.x, stop_coords.y);\n"
+               "    else if (compare_to_start.x && ! compare_to_stop.y)\n"
+               "        return vec2 (start_coords.x, coords.y);\n"
+               "    else if (compare_to_stop.x && compare_to_start.y)\n"
+               "        return vec2 (stop_coords.x, start_coords.y);\n"
+               "    else if (compare_to_stop.x && ! compare_to_stop.y)\n"
+               "        return vec2 (stop_coords.x, coords.y);\n"
+               "    else if (compare_to_start.y && ! compare_to_start.x)\n"
+               "        return vec2 (coords.x, start_coords.y);\n"
+               "    else if (compare_to_stop.y && ! compare_to_start.x)\n"
+               "        return vec2 (coords.x, stop_coords.y);\n"
+               "    else\n"
+               "        return coords;\n");
+       }
+       else {
+           _cairo_output_stream_printf (stream,
+               "    if (any (lessThan (coords, start_coords)))\n"
+               "        return vec2 (-1.0);\n"
+               "    if (any (greaterThan (coords, stop_coords)))\n"
+               "        return vec2 (-1.0);\n"
+               "    else\n"
+               "        return coords;\n");
+       }
+    }
+    else {
+       if (! ctx->has_npot_repeat &&
+           (extend == CAIRO_EXTEND_REPEAT ||
+            extend == CAIRO_EXTEND_REFLECT)) {
+           if (extend == CAIRO_EXTEND_REPEAT) {
+               _cairo_output_stream_printf (stream,
+                   "    return fract(coords);\n");
+           } else { /* CAIRO_EXTEND_REFLECT */
+               _cairo_output_stream_printf (stream,
+                   "    return mix(fract(coords), 1.0 - fract(coords), floor(mod(coords, 2.0)));\n");
+           }
+       }
+       else
+       {
+           _cairo_output_stream_printf (stream, "    return coords;\n");
+       }
+    }
+
+    _cairo_output_stream_printf (stream, "}\n");
+}
+
 static cairo_status_t
 cairo_gl_shader_get_fragment_source (cairo_gl_context_t *ctx,
                                      cairo_gl_shader_in_t in,
@@ -858,6 +1190,9 @@ cairo_gl_shader_get_fragment_source (cairo_gl_context_t *ctx,
        "precision mediump float;\n"
        "#endif\n");
 
+    _cairo_gl_shader_emit_wrap (ctx, stream, src, CAIRO_GL_TEX_SOURCE);
+    _cairo_gl_shader_emit_wrap (ctx, stream, mask, CAIRO_GL_TEX_MASK);
+
     if (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES) {
        if (_cairo_gl_shader_needs_border_fade (src))
            _cairo_gl_shader_emit_border_fade (stream, src, CAIRO_GL_TEX_SOURCE);
@@ -912,23 +1247,54 @@ cairo_gl_shader_get_fragment_source (cairo_gl_context_t *ctx,
 static cairo_status_t
 _cairo_gl_shader_compile (cairo_gl_context_t *ctx,
                          cairo_gl_shader_t *shader,
-                         cairo_gl_var_type_t src,
-                         cairo_gl_var_type_t mask,
+                         cairo_gl_operand_t *src,
+                         cairo_gl_operand_t *mask,
                          cairo_bool_t use_coverage,
                          const char *fragment_text)
 {
     unsigned int vertex_shader;
     cairo_status_t status;
+    cairo_gl_var_type_t src_type;
+    cairo_gl_var_type_t mask_type;
+    cairo_extend_t src_atlas_extend = CAIRO_EXTEND_NONE;
+    cairo_extend_t mask_atlas_extend = CAIRO_EXTEND_NONE;
+    cairo_bool_t src_use_atlas = FALSE;
+    cairo_bool_t mask_use_atlas = FALSE;
 
     assert (shader->program == 0);
 
-    vertex_shader = cairo_gl_var_type_hash (src, mask, use_coverage,
+    if (src != NULL) {
+      src_type = cairo_gl_operand_get_var_type (src->type,
+                                                src->use_color_attribute);
+      src_atlas_extend = _cairo_gl_operand_get_atlas_extend (src);
+      src_use_atlas = _cairo_gl_operand_get_use_atlas (src);
+    }
+    else
+      src_type = CAIRO_GL_VAR_NONE;
+
+    if (mask != NULL) {
+      mask_type = cairo_gl_operand_get_var_type (mask->type,
+                                                 mask->use_color_attribute);
+      mask_atlas_extend = _cairo_gl_operand_get_atlas_extend (mask);
+      mask_use_atlas = _cairo_gl_operand_get_use_atlas (mask);
+    }
+    else
+      mask_type = CAIRO_GL_VAR_NONE;
+
+    vertex_shader = cairo_gl_var_type_hash (src_type, mask_type,
+                                           src_atlas_extend,
+                                           mask_atlas_extend,
+                                           src_use_atlas,
+                                           mask_use_atlas,
+                                           use_coverage,
                                            CAIRO_GL_VAR_NONE);
     if (ctx->vertex_shaders[vertex_shader] == 0) {
        char *source;
 
-       status = cairo_gl_shader_get_vertex_source (src,
-                                                   mask,
+       status = cairo_gl_shader_get_vertex_source (src_type,
+                                                   mask_type,
+                                                   src_use_atlas,
+                                                   mask_use_atlas,
                                                    use_coverage,
                                                    CAIRO_GL_VAR_NONE,
                                                    &source);
@@ -963,13 +1329,14 @@ _cairo_gl_shader_compile (cairo_gl_context_t *ctx,
  * texture unit 1 if present, so we can just initialize these once at
  * compile time.
  */
-static void
+static cairo_int_status_t
 _cairo_gl_shader_set_samplers (cairo_gl_context_t *ctx,
                               cairo_gl_shader_t *shader)
 {
     cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
     GLint location;
     GLint saved_program;
+    cairo_int_status_t status;
 
     /* We have to save/restore the current program because we might be
      * asked for a different program while a shader is bound.  This shouldn't
@@ -978,17 +1345,22 @@ _cairo_gl_shader_set_samplers (cairo_gl_context_t *ctx,
     glGetIntegerv (GL_CURRENT_PROGRAM, &saved_program);
     dispatch->UseProgram (shader->program);
 
-    location = dispatch->GetUniformLocation (shader->program, "source_sampler");
+    status = get_uniform_location (ctx, shader, "source_sampler", &location);
+    if (status)
+       return status;
     if (location != -1) {
        dispatch->Uniform1i (location, CAIRO_GL_TEX_SOURCE);
     }
 
-    location = dispatch->GetUniformLocation (shader->program, "mask_sampler");
+    get_uniform_location (ctx, shader, "mask_sampler", &location);
+    if (status)
+       return status;
     if (location != -1) {
        dispatch->Uniform1i (location, CAIRO_GL_TEX_MASK);
     }
 
     dispatch->UseProgram (saved_program);
+    return CAIRO_INT_STATUS_SUCCESS;
 }
 
 void
@@ -1065,15 +1437,21 @@ _cairo_gl_get_shader_by_type (cairo_gl_context_t *ctx,
     char *fs_source;
     cairo_status_t status;
 
+    lookup.ctx = ctx;
     lookup.src = source->type;
     lookup.mask = mask->type;
     lookup.dest = CAIRO_GL_OPERAND_NONE;
     lookup.use_coverage = use_coverage;
+    lookup.use_color_attribute = source->use_color_attribute;
     lookup.in = in;
     lookup.src_gl_filter = _cairo_gl_operand_get_gl_filter (source);
     lookup.src_border_fade = _cairo_gl_shader_needs_border_fade (source);
+    lookup.src_extend = _cairo_gl_operand_get_atlas_extend (source);
     lookup.mask_gl_filter = _cairo_gl_operand_get_gl_filter (mask);
     lookup.mask_border_fade = _cairo_gl_shader_needs_border_fade (mask);
+    lookup.mask_extend = _cairo_gl_operand_get_atlas_extend (mask);
+    lookup.src_use_atlas = _cairo_gl_operand_get_use_atlas (source);
+    lookup.mask_use_atlas = _cairo_gl_operand_get_use_atlas (mask);
     lookup.base.hash = _cairo_gl_shader_cache_hash (&lookup);
     lookup.base.size = 1;
 
@@ -1106,27 +1484,29 @@ _cairo_gl_get_shader_by_type (cairo_gl_context_t *ctx,
     _cairo_gl_shader_init (&entry->shader);
     status = _cairo_gl_shader_compile (ctx,
                                       &entry->shader,
-                                      cairo_gl_operand_get_var_type (source->type),
-                                      cairo_gl_operand_get_var_type (mask->type),
+                                      source,
+                                      mask,
                                       use_coverage,
                                       fs_source);
     free (fs_source);
 
-    if (unlikely (status)) {
-       free (entry);
-       return status;
-    }
+    if (unlikely (status))
+       goto error;
 
-    _cairo_gl_shader_set_samplers (ctx, &entry->shader);
+    status = _cairo_gl_shader_set_samplers (ctx, &entry->shader);
+    if (unlikely (status))
+       goto error;
 
     status = _cairo_cache_insert (&ctx->shaders, &entry->base);
-    if (unlikely (status)) {
-       _cairo_gl_shader_fini (ctx, &entry->shader);
-       free (entry);
-       return status;
-    }
+    if (unlikely (status))
+       goto error;
 
     *shader = &entry->shader;
 
     return CAIRO_STATUS_SUCCESS;
+
+error:
+    _cairo_gl_shader_fini (ctx, &entry->shader);
+    free (entry);
+    return status;
 }
diff --git a/src/cairo-gl-source.c b/src/cairo-gl-source.c
new file mode 100644 (file)
index 0000000..baef634
--- /dev/null
@@ -0,0 +1,110 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairoint.h"
+
+#include "cairo-gl-private.h"
+
+#include "cairo-surface-backend-private.h"
+
+static cairo_status_t
+_cairo_gl_source_finish (void *abstract_surface)
+{
+    cairo_gl_source_t *source = abstract_surface;
+
+    _cairo_gl_operand_destroy (&source->operand);
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static const cairo_surface_backend_t cairo_gl_source_backend = {
+    CAIRO_SURFACE_TYPE_GL,
+    _cairo_gl_source_finish,
+    NULL, /* read-only wrapper */
+};
+
+cairo_surface_t *
+_cairo_gl_pattern_to_source (cairo_surface_t *dst,
+                            const cairo_pattern_t *pattern,
+                            cairo_bool_t is_mask,
+                            const cairo_rectangle_int_t *extents,
+                            const cairo_rectangle_int_t *sample,
+                            int *src_x, int *src_y)
+{
+    cairo_gl_source_t *source;
+    cairo_int_status_t status;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    if (pattern == NULL)
+       return _cairo_gl_white_source ();
+
+    source = malloc (sizeof (*source));
+    if (unlikely (source == NULL))
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+    _cairo_surface_init (&source->base,
+                        &cairo_gl_source_backend,
+                        NULL, /* device */
+                        CAIRO_CONTENT_COLOR_ALPHA);
+
+    *src_x = *src_y = 0;
+    status = _cairo_gl_operand_init (&source->operand, pattern,
+                                    (cairo_gl_surface_t *)dst,
+                                    sample, extents, FALSE);
+    if (unlikely (status)) {
+       cairo_surface_destroy (&source->base);
+       return _cairo_surface_create_in_error (status);
+    }
+
+    return &source->base;
+}
+
+cairo_surface_t *
+_cairo_gl_white_source (void)
+{
+    cairo_gl_source_t *source;
+
+    source = malloc (sizeof (*source));
+    if (unlikely (source == NULL))
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+    _cairo_surface_init (&source->base,
+                        &cairo_gl_source_backend,
+                        NULL, /* device */
+                        CAIRO_CONTENT_COLOR_ALPHA);
+
+    _cairo_gl_solid_operand_init (&source->operand, CAIRO_COLOR_WHITE);
+
+    return &source->base;
+}
index 3e52f28..0b23056 100644 (file)
@@ -240,13 +240,14 @@ emit_aligned_boxes (cairo_gl_context_t *ctx,
     const struct _cairo_boxes_chunk *chunk;
     int i;
 
+    TRACE ((stderr, "%s: num_boxes=%d\n", __FUNCTION__, boxes->num_boxes));
     for (chunk = &boxes->chunks; chunk; chunk = chunk->next) {
        for (i = 0; i < chunk->count; i++) {
            int x1 = _cairo_fixed_integer_part (chunk->base[i].p1.x);
            int y1 = _cairo_fixed_integer_part (chunk->base[i].p1.y);
            int x2 = _cairo_fixed_integer_part (chunk->base[i].p2.x);
            int y2 = _cairo_fixed_integer_part (chunk->base[i].p2.y);
-           _cairo_gl_composite_emit_rect (ctx, x1, y1, x2, y2, 0);
+           _cairo_gl_composite_emit_rect (ctx, x1, y1, x2, y2, 255);
        }
     }
 }
@@ -261,7 +262,8 @@ fill_boxes (void            *_dst,
     cairo_gl_context_t *ctx;
     cairo_int_status_t status;
 
-    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE, NULL);
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE);
     if (unlikely (status))
         goto FAIL;
 
@@ -279,65 +281,65 @@ FAIL:
     return status;
 }
 
-typedef struct cairo_gl_source {
-    cairo_surface_t base;
-
-    cairo_gl_operand_t operand;
-} cairo_gl_source_t;
-
-static cairo_status_t
-_cairo_gl_source_finish (void *abstract_surface)
+static cairo_int_status_t
+draw_image_boxes (void *_dst,
+                 cairo_image_surface_t *image,
+                 cairo_boxes_t *boxes,
+                 int dx, int dy)
 {
-    cairo_gl_source_t *source = abstract_surface;
+    cairo_gl_surface_t *dst = _dst;
+    struct _cairo_boxes_chunk *chunk;
+    int i;
+
+    for (chunk = &boxes->chunks; chunk; chunk = chunk->next) {
+       for (i = 0; i < chunk->count; i++) {
+           cairo_box_t *b = &chunk->base[i];
+           int x = _cairo_fixed_integer_part (b->p1.x);
+           int y = _cairo_fixed_integer_part (b->p1.y);
+           int w = _cairo_fixed_integer_part (b->p2.x) - x;
+           int h = _cairo_fixed_integer_part (b->p2.y) - y;
+           cairo_status_t status;
+
+           status = _cairo_gl_surface_draw_image (dst, image,
+                                                  x + dx, y + dy,
+                                                  w, h,
+                                                  x, y);
+           if (unlikely (status))
+               return status;
+       }
+    }
 
-    _cairo_gl_operand_destroy (&source->operand);
     return CAIRO_STATUS_SUCCESS;
 }
 
-static const cairo_surface_backend_t cairo_gl_source_backend = {
-    CAIRO_SURFACE_TYPE_GL,
-    _cairo_gl_source_finish,
-    NULL, /* read-only wrapper */
-};
-
-static cairo_surface_t *
-pattern_to_surface (cairo_surface_t *dst,
-                   const cairo_pattern_t *pattern,
-                   cairo_bool_t is_mask,
-                   const cairo_rectangle_int_t *extents,
-                   const cairo_rectangle_int_t *sample,
-                   int *src_x, int *src_y)
+static cairo_int_status_t copy_boxes (void *_dst,
+                                     cairo_surface_t *src,
+                                     cairo_boxes_t *boxes,
+                                     const cairo_rectangle_int_t *extents,
+                                     int dx, int dy)
 {
-    cairo_gl_source_t *source;
+    cairo_gl_composite_t setup;
+    cairo_gl_context_t *ctx;
     cairo_int_status_t status;
 
-    source = malloc (sizeof (*source));
-    if (unlikely (source == NULL))
-       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
-
-    _cairo_surface_init (&source->base,
-                        &cairo_gl_source_backend,
-                        NULL, /* device */
-                        CAIRO_CONTENT_COLOR_ALPHA);
-
-    *src_x = *src_y = 0;
-    status = _cairo_gl_operand_init (&source->operand, pattern, (cairo_gl_surface_t *)dst,
-                                    extents->x, extents->y,
-                                    extents->x, extents->y,
-                                    extents->width, extents->height);
-    if (unlikely (status)) {
-       cairo_surface_destroy (&source->base);
-       return _cairo_surface_create_in_error (status);
-    }
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    status = _cairo_gl_composite_init (&setup, CAIRO_OPERATOR_SOURCE, _dst, FALSE);
+    if (unlikely (status))
+        goto FAIL;
 
-    return &source->base;
-}
+    _cairo_gl_composite_set_source_operand (&setup, source_to_operand (src));
+    _cairo_gl_operand_translate (&setup.src, -dx, -dy);
 
-static inline cairo_gl_operand_t *
-source_to_operand (cairo_surface_t *surface)
-{
-    cairo_gl_source_t *source = (cairo_gl_source_t *)surface;
-    return source ? &source->operand : NULL;
+    status = _cairo_gl_composite_begin (&setup, &ctx);
+    if (unlikely (status))
+        goto FAIL;
+
+    emit_aligned_boxes (ctx, boxes);
+    status = _cairo_gl_context_release (ctx, CAIRO_STATUS_SUCCESS);
+
+FAIL:
+    _cairo_gl_composite_fini (&setup);
+    return status;
 }
 
 static cairo_int_status_t
@@ -357,16 +359,36 @@ composite_boxes (void                     *_dst,
     cairo_gl_composite_t setup;
     cairo_gl_context_t *ctx;
     cairo_int_status_t status;
-
-    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE, extents);
+    cairo_gl_operand_t tmp_operand;
+    cairo_gl_operand_t *src_operand;
+
+    TRACE ((stderr, "%s mask=(%d,%d), dst=(%d, %d)\n", __FUNCTION__,
+           mask_x, mask_y, dst_x, dst_y));
+
+    if (abstract_mask) {
+       if (op == CAIRO_OPERATOR_CLEAR) {
+           _cairo_gl_solid_operand_init (&tmp_operand, CAIRO_COLOR_WHITE);
+           src_operand = &tmp_operand;
+           op = CAIRO_OPERATOR_DEST_OUT;
+       } else if (op == CAIRO_OPERATOR_SOURCE) {
+           /* requires a LERP in the shader between dest and source */
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+       } else
+           src_operand = source_to_operand (abstract_src);
+    } else
+       src_operand = source_to_operand (abstract_src);
+
+    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE);
     if (unlikely (status))
         goto FAIL;
 
     _cairo_gl_composite_set_source_operand (&setup,
-                                           source_to_operand (abstract_src));
+                                           src_operand);
+    _cairo_gl_operand_translate (&setup.src, -src_x, -src_y);
 
     _cairo_gl_composite_set_mask_operand (&setup,
                                          source_to_operand (abstract_mask));
+    _cairo_gl_operand_translate (&setup.mask, -mask_x, -mask_y);
 
     status = _cairo_gl_composite_begin (&setup, &ctx);
     if (unlikely (status))
@@ -377,12 +399,15 @@ composite_boxes (void                     *_dst,
 
 FAIL:
     _cairo_gl_composite_fini (&setup);
+    if (src_operand == &tmp_operand)
+       _cairo_gl_operand_destroy (&tmp_operand);
     return status;
 }
 
 static cairo_int_status_t
 _cairo_gl_span_renderer_init (cairo_abstract_span_renderer_t   *_r,
                              const cairo_composite_rectangles_t *composite,
+                             cairo_antialias_t                  antialias,
                              cairo_bool_t                       needs_clip)
 {
     cairo_gl_span_renderer_t *r = (cairo_gl_span_renderer_t *)_r;
@@ -390,6 +415,13 @@ _cairo_gl_span_renderer_init (cairo_abstract_span_renderer_t       *_r,
     cairo_operator_t op = composite->op;
     cairo_int_status_t status;
 
+    if (op == CAIRO_OPERATOR_SOURCE) {
+       if (! _cairo_pattern_is_opaque (&composite->source_pattern.base,
+                                       &composite->source_sample_area))
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+       op = CAIRO_OPERATOR_OVER;
+    }
+
     /* XXX earlier! */
     if (op == CAIRO_OPERATOR_CLEAR) {
        source = &_cairo_pattern_white.base;
@@ -407,17 +439,14 @@ _cairo_gl_span_renderer_init (cairo_abstract_span_renderer_t      *_r,
 
     status = _cairo_gl_composite_init (&r->setup,
                                        op, (cairo_gl_surface_t *)composite->surface,
-                                       FALSE, &composite->unbounded);
+                                       FALSE);
     if (unlikely (status))
         goto FAIL;
 
     status = _cairo_gl_composite_set_source (&r->setup, source,
-                                            composite->unbounded.x,
-                                            composite->unbounded.y,
-                                            composite->unbounded.x,
-                                            composite->unbounded.y,
-                                            composite->unbounded.width,
-                                            composite->unbounded.height);
+                                            &composite->source_sample_area,
+                                            &composite->unbounded,
+                                            FALSE);
     if (unlikely (status))
         goto FAIL;
 
@@ -427,12 +456,8 @@ _cairo_gl_span_renderer_init (cairo_abstract_span_renderer_t       *_r,
     } else {
        status = _cairo_gl_composite_set_mask (&r->setup,
                                               &composite->mask_pattern.base,
-                                              composite->unbounded.x,
-                                              composite->unbounded.y,
-                                              composite->unbounded.x,
-                                              composite->unbounded.y,
-                                              composite->unbounded.width,
-                                              composite->unbounded.height);
+                                              &composite->mask_sample_area,
+                                              &composite->unbounded);
        if (unlikely (status))
            goto FAIL;
     }
@@ -473,6 +498,9 @@ _cairo_gl_span_renderer_fini (cairo_abstract_span_renderer_t *_r,
 {
     cairo_gl_span_renderer_t *r = (cairo_gl_span_renderer_t *) _r;
 
+    if (status == CAIRO_INT_STATUS_UNSUPPORTED)
+       return;
+
     if (status == CAIRO_INT_STATUS_SUCCESS)
        r->base.finish (r);
 
@@ -482,21 +510,26 @@ _cairo_gl_span_renderer_fini (cairo_abstract_span_renderer_t *_r,
 const cairo_compositor_t *
 _cairo_gl_span_compositor_get (void)
 {
-    static cairo_spans_compositor_t compositor;
+    static cairo_spans_compositor_t spans;
+    static cairo_compositor_t shape;
 
-    if (compositor.base.delegate == NULL) {
+    if (spans.base.delegate == NULL) {
        /* The fallback to traps here is essentially just for glyphs... */
-       _cairo_spans_compositor_init (&compositor,
-                                     _cairo_gl_traps_compositor_get());
-
-       compositor.fill_boxes = fill_boxes;
-       //compositor.check_composite_boxes = check_composite_boxes;
-       compositor.pattern_to_surface = pattern_to_surface;
-       compositor.composite_boxes = composite_boxes;
-       //compositor.check_span_renderer = check_span_renderer;
-       compositor.renderer_init = _cairo_gl_span_renderer_init;
-       compositor.renderer_fini = _cairo_gl_span_renderer_fini;
+       _cairo_shape_mask_compositor_init (&shape,
+                                          _cairo_gl_traps_compositor_get());
+       shape.glyphs = NULL;
+
+       _cairo_spans_compositor_init (&spans, &shape);
+       spans.fill_boxes = fill_boxes;
+       spans.draw_image_boxes = draw_image_boxes;
+       spans.copy_boxes = copy_boxes;
+       //spans.check_composite_boxes = check_composite_boxes;
+       spans.pattern_to_surface = _cairo_gl_pattern_to_source;
+       spans.composite_boxes = composite_boxes;
+       //spans.check_span_renderer = check_span_renderer;
+       spans.renderer_init = _cairo_gl_span_renderer_init;
+       spans.renderer_fini = _cairo_gl_span_renderer_fini;
     }
 
-    return &compositor.base;
+    return &spans.base;
 }
index 0ba356e..31d0ee0 100644 (file)
@@ -44,6 +44,7 @@
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
 #include "cairo-gl-private.h"
+#include "cairo-image-surface-inline.h"
 
 cairo_status_t
 _cairo_gl_surface_acquire_dest_image (void                   *abstract_surface,
@@ -141,7 +142,7 @@ _cairo_gl_surface_clone_similar (void                    *abstract_surface,
     return UNSUPPORTED ("unknown src surface type in clone_similar");
 }
 
-/** Creates a cairo-gl pattern surface for the given trapezoids */
+/* Creates a cairo-gl pattern surface for the given trapezoids */
 static cairo_status_t
 _cairo_gl_get_traps_pattern (cairo_gl_surface_t *dst,
                             int dst_x, int dst_y,
@@ -250,7 +251,8 @@ _cairo_gl_surface_composite (cairo_operator_t                 op,
     status = _cairo_gl_composite_set_source (&setup, src,
                                              src_x, src_y,
                                              dst_x, dst_y,
-                                             width, height);
+                                             width, height,
+                                             FALSE);
     if (unlikely (status))
         goto CLEANUP;
 
@@ -367,7 +369,8 @@ _cairo_gl_surface_fill_rectangles (void                        *abstract_dst,
     status = _cairo_gl_composite_set_source (&setup, &solid.base,
                                              0, 0,
                                              0, 0,
-                                             0, 0);
+                                             0, 0,
+                                             FALSE);
     if (unlikely (status))
         goto CLEANUP;
 
@@ -579,7 +582,8 @@ _cairo_gl_surface_create_span_renderer (cairo_operator_t     op,
     status = _cairo_gl_composite_set_source (&renderer->setup, src,
                                              extents->x, extents->y,
                                              extents->x, extents->y,
-                                             extents->width, extents->height);
+                                             extents->width, extents->height,
+                                             FALSE);
     if (unlikely (status))
         goto FAIL;
 
index 9fcbc3e..754b0a8 100644 (file)
@@ -49,6 +49,8 @@
 #include "cairo-image-surface-private.h"
 #include "cairo-surface-backend-private.h"
 
+static const cairo_surface_backend_t _cairo_gl_surface_backend;
+
 static cairo_status_t
 _cairo_gl_surface_flush (void *abstract_surface);
 
@@ -349,12 +351,38 @@ _cairo_gl_operator_is_supported (cairo_operator_t op)
     return op < CAIRO_OPERATOR_SATURATE;
 }
 
+static void
+_cairo_gl_surface_embedded_operand_init (cairo_gl_surface_t *surface)
+{
+    cairo_gl_operand_t *operand = &surface->operand;
+    cairo_surface_attributes_t *attributes = &operand->texture.attributes;
+
+    memset (operand, 0, sizeof (cairo_gl_operand_t));
+
+    operand->type = CAIRO_GL_OPERAND_TEXTURE;
+    operand->texture.surface = surface;
+    operand->texture.tex = surface->tex;
+
+    if (_cairo_gl_device_requires_power_of_two_textures (surface->base.device)) {
+       cairo_matrix_init_identity (&attributes->matrix);
+    } else {
+       cairo_matrix_init_scale (&attributes->matrix,
+                                1.0 / surface->width,
+                                1.0 / surface->height);
+    }
+
+    attributes->extend = CAIRO_EXTEND_NONE;
+    attributes->filter = CAIRO_FILTER_NEAREST;
+}
+
 void
 _cairo_gl_surface_init (cairo_device_t *device,
                        cairo_gl_surface_t *surface,
                        cairo_content_t content,
                        int width, int height)
 {
+    assert (width > 0 && height > 0);
+
     _cairo_surface_init (&surface->base,
                         &_cairo_gl_surface_backend,
                         device,
@@ -363,6 +391,9 @@ _cairo_gl_surface_init (cairo_device_t *device,
     surface->width = width;
     surface->height = height;
     surface->needs_update = FALSE;
+    surface->needs_to_cache = FALSE;
+
+    _cairo_gl_surface_embedded_operand_init (surface);
 }
 
 static cairo_surface_t *
@@ -375,13 +406,15 @@ _cairo_gl_surface_create_scratch_for_texture (cairo_gl_context_t   *ctx,
     cairo_gl_surface_t *surface;
 
     assert (width <= ctx->max_framebuffer_size && height <= ctx->max_framebuffer_size);
-
     surface = calloc (1, sizeof (cairo_gl_surface_t));
     if (unlikely (surface == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
 
-    _cairo_gl_surface_init (&ctx->base, surface, content, width, height);
     surface->tex = tex;
+    _cairo_gl_surface_init (&ctx->base, surface, content, width, height);
+
+    surface->supports_msaa = ctx->supports_msaa;
+    surface->supports_stencil = TRUE;
 
     /* Create the texture used to store the surface's data. */
     _cairo_gl_context_activate (ctx, CAIRO_GL_TEX_TEMP);
@@ -396,7 +429,8 @@ cairo_surface_t *
 _cairo_gl_surface_create_scratch (cairo_gl_context_t   *ctx,
                                  cairo_content_t       content,
                                  int                   width,
-                                 int                   height)
+                                 int                   height,
+                                 cairo_bool_t          true_alpha)
 {
     cairo_gl_surface_t *surface;
     GLenum format;
@@ -425,7 +459,10 @@ _cairo_gl_surface_create_scratch (cairo_gl_context_t   *ctx,
        break;
     case CAIRO_CONTENT_ALPHA:
        /* We want to be trying GL_ALPHA framebuffer objects here. */
-       format = GL_RGBA;
+       if (true_alpha)
+           format = GL_ALPHA;
+       else
+           format = GL_RGBA;
        break;
     case CAIRO_CONTENT_COLOR:
        /* GL_RGB is almost what we want here -- sampling 1 alpha when
@@ -458,7 +495,10 @@ _cairo_gl_surface_clear (cairo_gl_surface_t  *surface,
     if (unlikely (status))
        return status;
 
-    _cairo_gl_context_set_destination (ctx, surface);
+    if (ctx->current_target == surface)
+       _cairo_gl_composite_flush (ctx);
+
+    _cairo_gl_context_set_destination (ctx, surface, surface->msaa_active);
     if (surface->base.content & CAIRO_CONTENT_COLOR) {
         r = color->red   * color->alpha;
         g = color->green * color->alpha;
@@ -472,10 +512,11 @@ _cairo_gl_surface_clear (cairo_gl_surface_t  *surface,
         a = 1.0;
     }
 
-    glDisable (GL_SCISSOR_TEST);
+    _disable_scissor_buffer ();
     glClearColor (r, g, b, a);
     glClear (GL_COLOR_BUFFER_BIT);
 
+    surface->content_changed = TRUE;
     return _cairo_gl_context_release (ctx, status);
 }
 
@@ -506,7 +547,7 @@ cairo_gl_surface_create (cairo_device_t             *abstract_device,
        return _cairo_surface_create_in_error (status);
 
     surface = (cairo_gl_surface_t *)
-       _cairo_gl_surface_create_scratch (ctx, content, width, height);
+       _cairo_gl_surface_create_scratch (ctx, content, width, height, FALSE);
     if (unlikely (surface->base.status)) {
        status = _cairo_gl_context_release (ctx, surface->base.status);
        cairo_surface_destroy (&surface->base);
@@ -550,6 +591,8 @@ slim_hidden_def (cairo_gl_surface_create);
  * This function always returns a valid pointer, but it will return a
  * pointer to a "nil" surface if an error such as out of memory
  * occurs. You can use cairo_surface_status() to check for this.
+ *
+ * Since: TBD
  **/
 cairo_surface_t *
 cairo_gl_surface_create_for_texture (cairo_device_t    *abstract_device,
@@ -666,7 +709,10 @@ cairo_gl_surface_swapbuffers (cairo_surface_t *abstract_surface)
         if (unlikely (status))
             return;
 
-        cairo_surface_flush (abstract_surface);
+       /* For swapping on EGL, at least, we need a valid context/target. */
+       _cairo_gl_context_set_destination (ctx, surface, FALSE);
+       /* And in any case we should flush any pending operations. */
+       _cairo_gl_composite_flush (ctx);
 
        ctx->swap_buffers (ctx, surface);
 
@@ -703,7 +749,8 @@ _cairo_gl_surface_create_similar (void               *abstract_surface,
     if (unlikely (status))
        return _cairo_surface_create_in_error (status);
 
-    surface = _cairo_gl_surface_create_scratch (ctx, content, width, height);
+    surface = _cairo_gl_surface_create_scratch (ctx, content, width,
+                                               height, FALSE);
 
     status = _cairo_gl_context_release (ctx, status);
     if (unlikely (status)) {
@@ -726,8 +773,8 @@ _cairo_gl_surface_fill_alpha_channel (cairo_gl_surface_t *dst,
     _cairo_gl_composite_flush (ctx);
     glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
 
-    status = _cairo_gl_composite_init (&setup, CAIRO_OPERATOR_SOURCE, dst,
-                                       FALSE, NULL);
+    status = _cairo_gl_composite_init (&setup, CAIRO_OPERATOR_SOURCE,
+                                      dst, FALSE);
     if (unlikely (status))
         goto CLEANUP;
 
@@ -801,8 +848,6 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst,
     if (unlikely (status))
        goto FAIL;
 
-    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP)
-       glPixelStorei (GL_UNPACK_ROW_LENGTH, src->stride / cpp);
     if (_cairo_gl_surface_is_texture (dst)) {
        void *data_start = src->data + src_y * src->stride + src_x * cpp;
        void *data_start_gles2 = NULL;
@@ -815,9 +860,10 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst,
         * b. the row stride cannot be handled by GL itself using a 4 byte
         *     alignment constraint
         */
-       if (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES &&
-           (src->width * cpp < src->stride - 3 ||
-            width != src->width))
+       if (src->stride < 0 ||
+           (ctx->gl_flavor == CAIRO_GL_FLAVOR_ES &&
+            (src->width * cpp < src->stride - 3 ||
+             width != src->width)))
        {
            glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
            status = _cairo_gl_surface_extract_image_data (src, src_x, src_y,
@@ -825,10 +871,14 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst,
                                                           &data_start_gles2);
            if (unlikely (status))
                goto FAIL;
+
+           data_start = data_start_gles2;
        }
        else
        {
            glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
+           if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP)
+               glPixelStorei (GL_UNPACK_ROW_LENGTH, src->stride / cpp);
        }
 
         _cairo_gl_context_activate (ctx, CAIRO_GL_TEX_TEMP);
@@ -837,9 +887,7 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst,
        glTexParameteri (ctx->tex_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexSubImage2D (ctx->tex_target, 0,
                         dst_x, dst_y, width, height,
-                        format, type,
-                        data_start_gles2 != NULL ? data_start_gles2 :
-                                                   data_start);
+                        format, type, data_start);
 
        free (data_start_gles2);
 
@@ -857,11 +905,10 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst,
 
         tmp = _cairo_gl_surface_create_scratch (ctx,
                                                 dst->base.content,
-                                                width, height);
-        if (unlikely (tmp->status)) {
-            cairo_surface_destroy (tmp);
+                                                width, height, FALSE);
+        if (unlikely (tmp->status))
             goto FAIL;
-        }
+
         status = _cairo_gl_surface_draw_image ((cairo_gl_surface_t *) tmp,
                                                src,
                                                src_x, src_y,
@@ -869,12 +916,25 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst,
                                                0, 0);
         if (status == CAIRO_INT_STATUS_SUCCESS) {
             cairo_surface_pattern_t tmp_pattern;
+           cairo_rectangle_int_t r;
+           cairo_clip_t *clip;
 
             _cairo_pattern_init_for_surface (&tmp_pattern, tmp);
+           cairo_matrix_init_translate (&tmp_pattern.base.matrix,
+                                        -dst_x, -dst_y);
+           tmp_pattern.base.filter = CAIRO_FILTER_NEAREST;
+           tmp_pattern.base.extend = CAIRO_EXTEND_NONE;
+
+           r.x = dst_x;
+           r.y = dst_y;
+           r.width = width;
+           r.height = height;
+           clip = _cairo_clip_intersect_rectangle (NULL, &r);
            status = _cairo_surface_paint (&dst->base,
                                           CAIRO_OPERATOR_SOURCE,
                                           &tmp_pattern.base,
-                                          NULL);
+                                          clip);
+           _cairo_clip_destroy (clip);
             _cairo_pattern_fini (&tmp_pattern.base);
         }
 
@@ -882,14 +942,13 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst,
     }
 
 FAIL:
-    if (ctx->gl_flavor == CAIRO_GL_FLAVOR_DESKTOP)
-       glPixelStorei (GL_UNPACK_ROW_LENGTH, 0);
-
     status = _cairo_gl_context_release (ctx, status);
 
     if (clone)
         cairo_surface_destroy (&clone->base);
 
+    if (likely (status))
+       dst->content_changed = TRUE;
     return status;
 }
 
@@ -911,21 +970,32 @@ _cairo_gl_surface_finish (void *abstract_surface)
         return status;
 
     if (ctx->operands[CAIRO_GL_TEX_SOURCE].type == CAIRO_GL_OPERAND_TEXTURE &&
-        ctx->operands[CAIRO_GL_TEX_SOURCE].texture.surface == surface)
+        ctx->operands[CAIRO_GL_TEX_SOURCE].texture.surface == surface) {
+       _cairo_gl_composite_flush (ctx);
         _cairo_gl_context_destroy_operand (ctx, CAIRO_GL_TEX_SOURCE);
-    if (ctx->operands[CAIRO_GL_TEX_MASK].type == CAIRO_GL_OPERAND_TEXTURE &&
-        ctx->operands[CAIRO_GL_TEX_MASK].texture.surface == surface)
+    }
+    else if (ctx->operands[CAIRO_GL_TEX_MASK].type == CAIRO_GL_OPERAND_TEXTURE &&
+        ctx->operands[CAIRO_GL_TEX_MASK].texture.surface == surface) {
+       _cairo_gl_composite_flush (ctx);
         _cairo_gl_context_destroy_operand (ctx, CAIRO_GL_TEX_MASK);
+    }
+
     if (ctx->current_target == surface)
        ctx->current_target = NULL;
 
-    if (surface->depth)
-        ctx->dispatch.DeleteFramebuffers (1, &surface->depth);
     if (surface->fb)
         ctx->dispatch.DeleteFramebuffers (1, &surface->fb);
     if (surface->owns_tex)
        glDeleteTextures (1, &surface->tex);
 
+#if CAIRO_HAS_GL_SURFACE
+    if (surface->msaa_fb)
+       ctx->dispatch.DeleteFramebuffers (1, &surface->msaa_fb);
+    if (surface->msaa_rb)
+       ctx->dispatch.DeleteRenderbuffers (1, &surface->msaa_rb);
+#endif
+
+
     return _cairo_gl_context_release (ctx, status);
 }
 
@@ -941,6 +1011,7 @@ _cairo_gl_surface_map_to_image (void      *abstract_surface,
     unsigned int cpp;
     cairo_bool_t invert;
     cairo_status_t status;
+    int y;
 
     /* Want to use a switch statement here but the compiler gets whiny. */
     if (surface->base.content == CAIRO_CONTENT_COLOR_ALPHA) {
@@ -1004,12 +1075,14 @@ _cairo_gl_surface_map_to_image (void      *abstract_surface,
        return _cairo_surface_create_in_error (status);
     }
 
+    cairo_surface_set_device_offset (&image->base, -extents->x, -extents->y);
+
     /* This is inefficient, as we'd rather just read the thing without making
      * it the destination.  But then, this is the fallback path, so let's not
      * fall back instead.
      */
     _cairo_gl_composite_flush (ctx);
-    _cairo_gl_context_set_destination (ctx, surface);
+    _cairo_gl_context_set_destination (ctx, surface, FALSE);
 
     invert = ! _cairo_gl_surface_is_texture (surface) &&
            ctx->has_mesa_pack_invert;
@@ -1019,7 +1092,12 @@ _cairo_gl_surface_map_to_image (void      *abstract_surface,
        glPixelStorei (GL_PACK_ROW_LENGTH, image->stride / cpp);
     if (invert)
        glPixelStorei (GL_PACK_INVERT_MESA, 1);
-    glReadPixels (extents->x, extents->y,
+
+    y = extents->y;
+    if (! _cairo_gl_surface_is_texture (surface))
+       y = surface->height - extents->y - extents->height;
+
+    glReadPixels (extents->x, y,
                  extents->width, extents->height,
                  format, type, image->data);
     if (invert)
@@ -1028,11 +1106,52 @@ _cairo_gl_surface_map_to_image (void      *abstract_surface,
     status = _cairo_gl_context_release (ctx, status);
     if (unlikely (status)) {
        cairo_surface_destroy (&image->base);
-       image = (cairo_image_surface_t *)
-           _cairo_surface_create_in_error (status);
+       return _cairo_surface_create_in_error (status);
     }
 
-    return &image->base;
+    /* We must invert the image manualy if we lack GL_MESA_pack_invert */
+    if (! ctx->has_mesa_pack_invert && ! _cairo_gl_surface_is_texture (surface)) {
+       uint8_t stack[1024], *row = stack;
+       uint8_t *top = image->data;
+       uint8_t *bot = image->data + (image->height-1)*image->stride;
+
+       if (image->stride > sizeof(stack)) {
+           row = malloc (image->stride);
+           if (unlikely (row == NULL)) {
+               cairo_surface_destroy (&image->base);
+               return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+           }
+       }
+
+       while (top < bot) {
+           memcpy (row, top, image->stride);
+           memcpy (top, bot, image->stride);
+           memcpy (bot, row, image->stride);
+           top += image->stride;
+           bot -= image->stride;
+       }
+
+       if (row != stack)
+           free(row);
+    }
+
+    image->base.is_clear = FALSE;
+    return image;
+}
+
+static cairo_surface_t *
+_cairo_gl_surface_source (void                *abstract_surface,
+                         cairo_rectangle_int_t *extents)
+{
+    cairo_gl_surface_t *surface = abstract_surface;
+
+    if (extents) {
+       extents->x = extents->y = 0;
+       extents->width  = surface->width;
+       extents->height = surface->height;
+    }
+
+    return &surface->base;
 }
 
 static cairo_status_t
@@ -1121,22 +1240,26 @@ _cairo_gl_surface_paint (void                   *surface,
                         const cairo_pattern_t  *source,
                         const cairo_clip_t     *clip)
 {
-#if 0
+    cairo_int_status_t status;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *)surface;
+
     /* simplify the common case of clearing the surface */
     if (clip == NULL) {
         if (op == CAIRO_OPERATOR_CLEAR)
-            return _cairo_gl_surface_clear (abstract_surface, CAIRO_COLOR_TRANSPARENT);
+            return _cairo_gl_surface_clear (surface, CAIRO_COLOR_TRANSPARENT);
        else if (source->type == CAIRO_PATTERN_TYPE_SOLID &&
                 (op == CAIRO_OPERATOR_SOURCE ||
                  (op == CAIRO_OPERATOR_OVER && _cairo_pattern_is_opaque_solid (source)))) {
-            return _cairo_gl_surface_clear (abstract_surface,
+            return _cairo_gl_surface_clear (surface,
                                             &((cairo_solid_pattern_t *) source)->color);
         }
     }
-#endif
 
-    return _cairo_compositor_paint (get_compositor (surface), surface,
-                                   op, source, clip);
+    status = _cairo_compositor_paint (get_compositor (surface), surface,
+                                     op, source, clip);
+    if (likely (status))
+       dst->content_changed = TRUE;
+    return status;
 }
 
 static cairo_int_status_t
@@ -1146,8 +1269,14 @@ _cairo_gl_surface_mask (void                      *surface,
                        const cairo_pattern_t   *mask,
                        const cairo_clip_t      *clip)
 {
-    return _cairo_compositor_mask (get_compositor (surface), surface,
-                                  op, source, mask, clip);
+    cairo_int_status_t status;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *) surface;
+
+    status = _cairo_compositor_mask (get_compositor (surface), surface,
+                                    op, source, mask, clip);
+    if (likely (status))
+       dst->content_changed = TRUE;
+    return status;
 }
 
 static cairo_int_status_t
@@ -1162,10 +1291,16 @@ _cairo_gl_surface_stroke (void                          *surface,
                           cairo_antialias_t             antialias,
                           const cairo_clip_t           *clip)
 {
-    return _cairo_compositor_stroke (get_compositor (surface), surface,
-                                    op, source, path, style,
-                                    ctm, ctm_inverse, tolerance, antialias,
-                                    clip);
+    cairo_int_status_t status;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *)surface;
+
+    status = _cairo_compositor_stroke (get_compositor (surface), surface,
+                                      op, source, path, style,
+                                      ctm, ctm_inverse, tolerance,
+                                      antialias, clip);
+    if (likely (status))
+       dst->content_changed = TRUE;
+    return status;
 }
 
 static cairo_int_status_t
@@ -1178,10 +1313,16 @@ _cairo_gl_surface_fill (void                    *surface,
                         cairo_antialias_t       antialias,
                         const cairo_clip_t     *clip)
 {
-    return _cairo_compositor_fill (get_compositor (surface), surface,
-                                  op, source, path,
-                                  fill_rule, tolerance, antialias,
-                                  clip);
+    cairo_int_status_t status;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *)surface;
+
+    status = _cairo_compositor_fill (get_compositor (surface), surface,
+                                    op, source, path,
+                                    fill_rule, tolerance, antialias,
+                                    clip);
+    if (likely (status))
+       dst->content_changed = TRUE;
+    return status;
 }
 
 static cairo_int_status_t
@@ -1193,12 +1334,18 @@ _cairo_gl_surface_glyphs (void                  *surface,
                          cairo_scaled_font_t   *font,
                          const cairo_clip_t    *clip)
 {
-    return _cairo_compositor_glyphs (get_compositor (surface), surface,
-                                    op, source, glyphs, num_glyphs, font,
-                                    clip);
+    cairo_int_status_t status;
+    cairo_gl_surface_t *dst = (cairo_gl_surface_t *)surface;
+
+    status = _cairo_compositor_glyphs (get_compositor (surface), surface,
+                                      op, source, glyphs, num_glyphs,
+                                      font, clip);
+    if (likely (status))
+       dst->content_changed = TRUE;
+    return status;
 }
 
-const cairo_surface_backend_t _cairo_gl_surface_backend = {
+static const cairo_surface_backend_t _cairo_gl_surface_backend = {
     CAIRO_SURFACE_TYPE_GL,
     _cairo_gl_surface_finish,
     _cairo_default_context_create,
@@ -1208,6 +1355,7 @@ const cairo_surface_backend_t _cairo_gl_surface_backend = {
     _cairo_gl_surface_map_to_image,
     _cairo_gl_surface_unmap_image,
 
+    _cairo_gl_surface_source,
     _cairo_gl_surface_acquire_source_image,
     _cairo_gl_surface_release_source_image,
     NULL, /* snapshot */
@@ -1228,3 +1376,20 @@ const cairo_surface_backend_t _cairo_gl_surface_backend = {
     NULL, /* fill/stroke */
     _cairo_gl_surface_glyphs,
 };
+
+cairo_status_t
+cairo_gl_surface_set_binding_texture (cairo_surface_t *abstract_surface,
+                              unsigned int    texture)
+{
+    cairo_gl_surface_t *surface = (cairo_gl_surface_t *) abstract_surface;
+
+    if ((cairo_surface_get_type (&surface->base) != CAIRO_SURFACE_TYPE_GL) ||
+       surface->tex)
+       return CAIRO_STATUS_SURFACE_TYPE_MISMATCH;
+
+    surface->bounded_tex = texture;
+    surface->operand.texture.tex = texture;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
index afc74d0..7129f61 100644 (file)
@@ -69,7 +69,7 @@ set_clip_region (void *_surface,
 {
     cairo_gl_surface_t *surface = _surface;
 
-    //surface->clip_region = region;
+    surface->clip_region = region;
     return CAIRO_STATUS_SUCCESS;
 }
 
@@ -132,7 +132,7 @@ fill_boxes (void            *_dst,
     cairo_gl_context_t *ctx;
     cairo_int_status_t status;
 
-    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE, NULL);
+    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE);
     if (unlikely (status))
         goto FAIL;
 
@@ -150,67 +150,6 @@ FAIL:
     return status;
 }
 
-typedef struct cairo_gl_source {
-    cairo_surface_t base;
-
-    cairo_gl_operand_t operand;
-} cairo_gl_source_t;
-
-static cairo_status_t
-_cairo_gl_source_finish (void *abstract_surface)
-{
-    cairo_gl_source_t *source = abstract_surface;
-
-    _cairo_gl_operand_destroy (&source->operand);
-    return CAIRO_STATUS_SUCCESS;
-}
-
-static const cairo_surface_backend_t cairo_gl_source_backend = {
-    CAIRO_SURFACE_TYPE_GL,
-    _cairo_gl_source_finish,
-    NULL, /* read-only wrapper */
-};
-
-static cairo_surface_t *
-pattern_to_surface (cairo_surface_t *dst,
-                   const cairo_pattern_t *pattern,
-                   cairo_bool_t is_mask,
-                   const cairo_rectangle_int_t *extents,
-                   const cairo_rectangle_int_t *sample,
-                   int *src_x, int *src_y)
-{
-    cairo_gl_source_t *source;
-    cairo_int_status_t status;
-
-    source = malloc (sizeof (*source));
-    if (unlikely (source == NULL))
-       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
-
-    _cairo_surface_init (&source->base,
-                        &cairo_gl_source_backend,
-                        NULL, /* device */
-                        CAIRO_CONTENT_COLOR_ALPHA);
-
-    *src_x = *src_y = 0;
-    status = _cairo_gl_operand_init (&source->operand, pattern, (cairo_gl_surface_t *)dst,
-                                    extents->x, extents->y,
-                                    extents->x, extents->y,
-                                    extents->width, extents->height);
-    if (unlikely (status)) {
-       cairo_surface_destroy (&source->base);
-       return _cairo_surface_create_in_error (status);
-    }
-
-    return &source->base;
-}
-
-static inline cairo_gl_operand_t *
-source_to_operand (cairo_surface_t *surface)
-{
-    cairo_gl_source_t *source = (cairo_gl_source_t *)surface;
-    return &source->operand;
-}
-
 static cairo_int_status_t
 composite_boxes (void                  *_dst,
                 cairo_operator_t       op,
@@ -229,7 +168,7 @@ composite_boxes (void                       *_dst,
     cairo_gl_context_t *ctx;
     cairo_int_status_t status;
 
-    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE, extents);
+    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE);
     if (unlikely (status))
         goto FAIL;
 
@@ -269,7 +208,7 @@ composite (void                     *_dst,
     cairo_gl_context_t *ctx;
     cairo_int_status_t status;
 
-    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE, NULL);
+    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE);
     if (unlikely (status))
         goto FAIL;
 
@@ -327,39 +266,42 @@ lerp (void                        *dst,
     return CAIRO_STATUS_SUCCESS;
 }
 
-static cairo_gl_surface_t *
-traps_to_surface (void *_dst,
+static cairo_int_status_t
+traps_to_operand (void *_dst,
                  const cairo_rectangle_int_t *extents,
                  cairo_antialias_t     antialias,
-                 cairo_traps_t         *traps)
+                 cairo_traps_t         *traps,
+                 cairo_gl_operand_t    *operand)
 {
     pixman_format_code_t pixman_format;
     pixman_image_t *pixman_image;
     cairo_surface_t *image, *mask;
+    cairo_surface_pattern_t pattern;
     cairo_status_t status;
 
-    pixman_format = antialias != CAIRO_ANTIALIAS_NONE ? PIXMAN_a8 : PIXMAN_a1,
+    pixman_format = antialias != CAIRO_ANTIALIAS_NONE ? PIXMAN_a8 : PIXMAN_a1;
     pixman_image = pixman_image_create_bits (pixman_format,
                                             extents->width,
                                             extents->height,
                                             NULL, 0);
     if (unlikely (pixman_image == NULL))
-       return (cairo_gl_surface_t *)_cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
     _pixman_image_add_traps (pixman_image, extents->x, extents->y, traps);
     image = _cairo_image_surface_create_for_pixman_image (pixman_image,
                                                          pixman_format);
     if (unlikely (image->status)) {
        pixman_image_unref (pixman_image);
-       return (cairo_gl_surface_t *)image;
+       return image->status;
     }
 
-    mask = _cairo_surface_create_similar_scratch (_dst, CAIRO_CONTENT_ALPHA,
+    mask = _cairo_surface_create_similar_scratch (_dst,
+                                                 CAIRO_CONTENT_COLOR_ALPHA,
                                                  extents->width,
                                                  extents->height);
     if (unlikely (mask->status)) {
        cairo_surface_destroy (image);
-       return (cairo_gl_surface_t *)mask;
+       return mask->status;
     }
 
     status = _cairo_gl_surface_draw_image ((cairo_gl_surface_t *)mask,
@@ -368,12 +310,29 @@ traps_to_surface (void *_dst,
                                           extents->width, extents->height,
                                           0, 0);
     cairo_surface_destroy (image);
-    if (unlikely (status)) {
-       cairo_surface_destroy (mask);
-       return (cairo_gl_surface_t*)_cairo_surface_create_in_error (status);
-    }
+    if (unlikely (status))
+       goto error;
+
+    _cairo_pattern_init_for_surface (&pattern, mask);
+    cairo_matrix_init_translate (&pattern.base.matrix,
+                                -extents->x, -extents->y);
+    pattern.base.filter = CAIRO_FILTER_NEAREST;
+    pattern.base.extend = CAIRO_EXTEND_NONE;
+    status = _cairo_gl_operand_init (operand, &pattern.base, _dst,
+                                    &_cairo_unbounded_rectangle,
+                                    &_cairo_unbounded_rectangle,
+                                    FALSE);
+    _cairo_pattern_fini (&pattern.base);
 
-    return (cairo_gl_surface_t*)mask;
+    if (unlikely (status))
+       goto error;
+
+    operand->texture.owns_surface = mask;
+    return CAIRO_STATUS_SUCCESS;
+
+error:
+    cairo_surface_destroy (mask);
+    return status;
 }
 
 static cairo_int_status_t
@@ -390,21 +349,17 @@ composite_traps (void                     *_dst,
 {
     cairo_gl_composite_t setup;
     cairo_gl_context_t *ctx;
-    cairo_gl_surface_t *mask;
     cairo_int_status_t status;
 
-    mask = traps_to_surface (_dst, extents, antialias, traps);
-    if (unlikely (mask->base.status))
-       return mask->base.status;
-
-    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE, NULL);
+    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE);
     if (unlikely (status))
         goto FAIL;
 
     _cairo_gl_composite_set_source_operand (&setup,
                                            source_to_operand (abstract_src));
-
-    //_cairo_gl_composite_set_mask_surface (&setup, mask, 0, 0);
+    status = traps_to_operand (_dst, extents, antialias, traps, &setup.mask);
+    if (unlikely (status))
+       goto FAIL;
 
     status = _cairo_gl_composite_begin (&setup, &ctx);
     if (unlikely (status))
@@ -419,7 +374,6 @@ composite_traps (void                       *_dst,
 
 FAIL:
     _cairo_gl_composite_fini (&setup);
-    cairo_surface_destroy (&mask->base);
     return status;
 }
 
@@ -450,7 +404,8 @@ tristrip_to_surface (void *_dst,
        return (cairo_gl_surface_t *)image;
     }
 
-    mask = _cairo_surface_create_similar_scratch (_dst, CAIRO_CONTENT_ALPHA,
+    mask = _cairo_surface_create_similar_scratch (_dst,
+                                                 CAIRO_CONTENT_COLOR_ALPHA,
                                                  extents->width,
                                                  extents->height);
     if (unlikely (mask->status)) {
@@ -493,7 +448,7 @@ composite_tristrip (void            *_dst,
     if (unlikely (mask->base.status))
        return mask->base.status;
 
-    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE, NULL);
+    status = _cairo_gl_composite_init (&setup, op, _dst, FALSE);
     if (unlikely (status))
         goto FAIL;
 
@@ -519,6 +474,15 @@ FAIL:
     return status;
 }
 
+static cairo_int_status_t
+check_composite (const cairo_composite_rectangles_t *extents)
+{
+    if (! _cairo_gl_operator_is_supported (extents->op))
+       return UNSUPPORTED ("unsupported operator");
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
 const cairo_compositor_t *
 _cairo_gl_traps_compositor_get (void)
 {
@@ -529,11 +493,11 @@ _cairo_gl_traps_compositor_get (void)
        compositor.acquire = acquire;
        compositor.release = release;
        compositor.set_clip_region = set_clip_region;
-       compositor.pattern_to_surface = pattern_to_surface;
+       compositor.pattern_to_surface = _cairo_gl_pattern_to_source;
        compositor.draw_image_boxes = draw_image_boxes;
        //compositor.copy_boxes = copy_boxes;
        compositor.fill_boxes = fill_boxes;
-       //compositor.check_composite = check_composite;
+       compositor.check_composite = check_composite;
        compositor.composite = composite;
        compositor.lerp = lerp;
        //compositor.check_composite_boxes = check_composite_boxes;
index d23b8a5..837cb81 100644 (file)
@@ -31,8 +31,8 @@
  * The Initial Developer of the Original Code is Eric Anholt.
  */
 
-/**
- * @file cairo-gl.h
+/*
+ * cairo-gl.h:
  *
  * The cairo-gl backend provides an implementation of possibly
  * hardware-accelerated cairo rendering by targeting the OpenGL API.
@@ -43,7 +43,7 @@
  *
  * Cairo-gl allows interoperability with other GL rendering through GL
  * context sharing.  Cairo-gl surfaces are created in reference to a
- * #cairo_device_t, which represents an GL context created by the user.
+ * #cairo_device_t, which represents a GL context created by the user.
  * When that GL context is created with its sharePtr set to another
  * context (or vice versa), its objects (textures backing cairo-gl
  * surfaces) can be accessed in the other OpenGL context.  This allows
@@ -55,7 +55,7 @@
  * call which interacts with a cairo-gl surface or the cairo-gl
  * device.  As a result, the user must make their own context current
  * between any cairo calls and their own OpenGL rendering.
- */
+ **/
 
 #ifndef CAIRO_GL_H
 #define CAIRO_GL_H
@@ -88,6 +88,14 @@ cairo_gl_surface_get_height (cairo_surface_t *abstract_surface);
 cairo_public void
 cairo_gl_surface_swapbuffers (cairo_surface_t *surface);
 
+cairo_public void
+cairo_gl_device_set_thread_aware (cairo_device_t       *device,
+                                 cairo_bool_t           thread_aware);
+
+cairo_public cairo_status_t
+cairo_gl_surface_set_binding_texture (cairo_surface_t *abstract_surface,
+                                     unsigned int    texture);
+
 #if CAIRO_HAS_GLX_FUNCTIONS
 #include <GL/glx.h>
 
index f89fa32..e182e0d 100644 (file)
@@ -53,6 +53,10 @@ typedef struct _cairo_glx_context {
     Window dummy_window;
     GLXContext context;
 
+    Display *previous_display;
+    GLXDrawable previous_drawable;
+    GLXContext previous_context;
+
     cairo_bool_t has_multithread_makecurrent;
 } cairo_glx_context_t;
 
@@ -62,19 +66,43 @@ typedef struct _cairo_glx_surface {
     Window win;
 } cairo_glx_surface_t;
 
+static cairo_bool_t
+_context_acquisition_changed_glx_state (cairo_glx_context_t *ctx,
+                                       GLXDrawable current_drawable)
+{
+    return !(ctx->previous_display == ctx->display &&
+            ctx->previous_drawable == current_drawable &&
+            ctx->previous_context == ctx->context);
+}
+
+static GLXDrawable
+_glx_get_current_drawable (cairo_glx_context_t *ctx)
+{
+    if (ctx->base.current_target == NULL ||
+       _cairo_gl_surface_is_texture (ctx->base.current_target)) {
+       return ctx->dummy_window;
+    }
+
+    return ((cairo_glx_surface_t *) ctx->base.current_target)->win;
+}
+
+static void
+_glx_query_current_state (cairo_glx_context_t * ctx)
+{
+    ctx->previous_drawable = glXGetCurrentDrawable ();
+    ctx->previous_display = glXGetCurrentDisplay ();
+    ctx->previous_context = glXGetCurrentContext ();
+}
+
 static void
 _glx_acquire (void *abstract_ctx)
 {
     cairo_glx_context_t *ctx = abstract_ctx;
-    GLXDrawable current_drawable;
+    GLXDrawable current_drawable = _glx_get_current_drawable (ctx);
 
-    if (ctx->base.current_target == NULL ||
-        _cairo_gl_surface_is_texture (ctx->base.current_target)) {
-        current_drawable = ctx->dummy_window;
-    } else {
-        cairo_glx_surface_t *surface = (cairo_glx_surface_t *) ctx->base.current_target;
-        current_drawable = surface->win;
-    }
+    _glx_query_current_state (ctx);
+    if (!_context_acquisition_changed_glx_state (ctx, current_drawable))
+       return;
 
     glXMakeCurrent (ctx->display, current_drawable, ctx->context);
 }
@@ -94,9 +122,10 @@ _glx_release (void *abstract_ctx)
 {
     cairo_glx_context_t *ctx = abstract_ctx;
 
-    if (!ctx->has_multithread_makecurrent) {
-       glXMakeCurrent (ctx->display, None, None);
-    }
+    if (ctx->has_multithread_makecurrent || !ctx->base.thread_aware)
+       return;
+
+    glXMakeCurrent (ctx->display, None, None);
 }
 
 static void
@@ -117,7 +146,7 @@ _glx_destroy (void *abstract_ctx)
     if (ctx->dummy_window != None)
        XDestroyWindow (ctx->display, ctx->dummy_window);
 
-    glXMakeCurrent (ctx->display, 0, 0);
+    glXMakeCurrent (ctx->display, None, None);
 }
 
 static cairo_status_t
@@ -180,14 +209,16 @@ cairo_glx_device_create (Display *dpy, GLXContext gl_ctx)
     Window dummy = None;
     const char *glx_extensions;
 
-    status = _glx_dummy_ctx (dpy, gl_ctx, &dummy);
-    if (unlikely (status))
-       return _cairo_gl_context_create_in_error (status);
-
     ctx = calloc (1, sizeof (cairo_glx_context_t));
     if (unlikely (ctx == NULL))
        return _cairo_gl_context_create_in_error (CAIRO_STATUS_NO_MEMORY);
 
+    status = _glx_dummy_ctx (dpy, gl_ctx, &dummy);
+    if (unlikely (status)) {
+       free (ctx);
+       return _cairo_gl_context_create_in_error (status);
+    }
+
     ctx->display = dpy;
     ctx->dummy_window = dummy;
     ctx->context = gl_ctx;
@@ -265,6 +296,9 @@ cairo_gl_surface_create_for_window (cairo_device_t  *device,
     if (device->backend->type != CAIRO_DEVICE_TYPE_GL)
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
 
+    if (width <= 0 || height <= 0)
+        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
+
     surface = calloc (1, sizeof (cairo_glx_surface_t));
     if (unlikely (surface == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
index d232f9b..15dc46f 100644 (file)
 
 #include "cairoint.h"
 
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
 #include "cairo-error-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-gstate-private.h"
 #include "cairo-pattern-private.h"
 #include "cairo-traps-private.h"
@@ -328,7 +330,7 @@ _cairo_gstate_redirect_target (cairo_gstate_t *gstate, cairo_surface_t *child)
 }
 
 /**
- * _cairo_gstate_is_group
+ * _cairo_gstate_is_group:
  * @gstate: a #cairo_gstate_t
  *
  * Check if _cairo_gstate_redirect_target has been called on the head
@@ -382,7 +384,7 @@ _cairo_gstate_get_original_target (cairo_gstate_t *gstate)
  * This space left intentionally blank.
  *
  * Return value: a pointer to the gstate's #cairo_clip_t structure.
- */
+ **/
 cairo_clip_t *
 _cairo_gstate_get_clip (cairo_gstate_t *gstate)
 {
@@ -516,8 +518,8 @@ _cairo_gstate_get_line_join (cairo_gstate_t *gstate)
 cairo_status_t
 _cairo_gstate_set_dash (cairo_gstate_t *gstate, const double *dash, int num_dashes, double offset)
 {
-    unsigned int i;
-    double dash_total;
+    double dash_total, on_total, off_total;
+    int i, j;
 
     free (gstate->stroke_style.dash);
 
@@ -535,14 +537,27 @@ _cairo_gstate_set_dash (cairo_gstate_t *gstate, const double *dash, int num_dash
        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
     }
 
-    memcpy (gstate->stroke_style.dash, dash, gstate->stroke_style.num_dashes * sizeof (double));
-
-    dash_total = 0.0;
-    for (i = 0; i < gstate->stroke_style.num_dashes; i++) {
-       if (gstate->stroke_style.dash[i] < 0)
+    on_total = off_total = dash_total = 0.0;
+    for (i = j = 0; i < num_dashes; i++) {
+       if (dash[i] < 0)
            return _cairo_error (CAIRO_STATUS_INVALID_DASH);
 
-       dash_total += gstate->stroke_style.dash[i];
+       if (dash[i] == 0 && i > 0 && i < num_dashes - 1) {
+           if (dash[++i] < 0)
+               return _cairo_error (CAIRO_STATUS_INVALID_DASH);
+
+           gstate->stroke_style.dash[j-1] += dash[i];
+           gstate->stroke_style.num_dashes -= 2;
+       } else
+           gstate->stroke_style.dash[j++] = dash[i];
+
+       if (dash[i]) {
+           dash_total += dash[i];
+           if ((i & 1) == 0)
+               on_total += dash[i];
+           else
+               off_total += dash[i];
+       }
     }
 
     if (dash_total == 0.0)
@@ -550,8 +565,19 @@ _cairo_gstate_set_dash (cairo_gstate_t *gstate, const double *dash, int num_dash
 
     /* An odd dash value indicate symmetric repeating, so the total
      * is twice as long. */
-    if (gstate->stroke_style.num_dashes & 1)
+    if (gstate->stroke_style.num_dashes & 1) {
        dash_total *= 2;
+       on_total += off_total;
+    }
+
+    if (dash_total - on_total < CAIRO_FIXED_ERROR_DOUBLE) {
+       /* Degenerate dash -> solid line */
+       free (gstate->stroke_style.dash);
+       gstate->stroke_style.dash = NULL;
+       gstate->stroke_style.num_dashes = 0;
+       gstate->stroke_style.dash_offset = 0.0;
+       return CAIRO_STATUS_SUCCESS;
+    }
 
     /* The dashing code doesn't like a negative offset or a big positive
      * offset, so we compute an equivalent offset which is guaranteed to be
index f4fb7cd..928c74b 100644 (file)
@@ -111,6 +111,8 @@ static const unsigned long hash_table_sizes[] = {
 struct _cairo_hash_table {
     cairo_hash_keys_equal_func_t keys_equal;
 
+    cairo_hash_entry_t *cache[32];
+
     const unsigned long *table_size;
     cairo_hash_entry_t **entries;
 
@@ -173,6 +175,7 @@ _cairo_hash_table_create (cairo_hash_keys_equal_func_t keys_equal)
     else
        hash_table->keys_equal = keys_equal;
 
+    memset (&hash_table->cache, 0, sizeof (hash_table->cache));
     hash_table->table_size = &hash_table_sizes[0];
 
     hash_table->entries = calloc (*hash_table->table_size,
@@ -337,19 +340,24 @@ _cairo_hash_table_lookup (cairo_hash_table_t *hash_table,
 {
     cairo_hash_entry_t *entry;
     unsigned long table_size, i, idx, step;
+    unsigned long hash = key->hash;
+
+    entry = hash_table->cache[hash & 31];
+    if (entry && entry->hash == hash && hash_table->keys_equal (key, entry))
+       return entry;
 
     table_size = *hash_table->table_size;
-    idx = key->hash % table_size;
+    idx = hash % table_size;
 
     entry = hash_table->entries[idx];
     if (ENTRY_IS_LIVE (entry)) {
-       if (entry->hash == key->hash && hash_table->keys_equal (key, entry))
-           return entry;
+       if (entry->hash == hash && hash_table->keys_equal (key, entry))
+               goto insert_cache;
     } else if (ENTRY_IS_FREE (entry))
        return NULL;
 
     i = 1;
-    step = 1 + key->hash % (table_size - 2);
+    step = 1 + hash % (table_size - 2);
     do {
        idx += step;
        if (idx >= table_size)
@@ -357,14 +365,18 @@ _cairo_hash_table_lookup (cairo_hash_table_t *hash_table,
 
        entry = hash_table->entries[idx];
        if (ENTRY_IS_LIVE (entry)) {
-           if (entry->hash == key->hash && hash_table->keys_equal (key, entry))
-               return entry;
+           if (entry->hash == hash && hash_table->keys_equal (key, entry))
+                   goto insert_cache;
        } else if (ENTRY_IS_FREE (entry))
            return NULL;
     } while (++i < table_size);
 
     ASSERT_NOT_REACHED;
     return NULL;
+
+insert_cache:
+    hash_table->cache[hash & 31] = entry;
+    return entry;
 }
 
 /**
@@ -459,6 +471,7 @@ _cairo_hash_table_insert (cairo_hash_table_t *hash_table,
        hash_table->free_entries--;
 
     *entry = key_and_value;
+    hash_table->cache[key_and_value->hash & 31] = key_and_value;
     hash_table->live_entries++;
 
     return CAIRO_STATUS_SUCCESS;
@@ -509,6 +522,7 @@ _cairo_hash_table_remove (cairo_hash_table_t *hash_table,
 {
     *_cairo_hash_table_lookup_exact_key (hash_table, key) = DEAD_ENTRY;
     hash_table->live_entries--;
+    hash_table->cache[key->hash & 31] = NULL;
 
     /* Check for table resize. Don't do this when iterating as this will
      * reorder elements of the table and cause the iteration to potentially
index d299c9f..5a1ea4a 100644 (file)
@@ -93,6 +93,8 @@ draw_image_boxes (void *_dst,
     struct _cairo_boxes_chunk *chunk;
     int i;
 
+    TRACE ((stderr, "%s x %d\n", __FUNCTION__, boxes->num_boxes));
+
     for (chunk = &boxes->chunks; chunk; chunk = chunk->next) {
        for (i = 0; i < chunk->count; i++) {
            cairo_box_t *b = &chunk->base[i];
@@ -279,6 +281,8 @@ fill_rectangles (void                       *_dst,
     uint32_t pixel;
     int i;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (fill_reduces_to_source (op, color, dst) &&
        color_to_pixel (color, dst->pixman_format, &pixel))
     {
@@ -321,6 +325,8 @@ fill_boxes (void            *_dst,
     uint32_t pixel;
     int i;
 
+    TRACE ((stderr, "%s x %d\n", __FUNCTION__, boxes->num_boxes));
+
     if (fill_reduces_to_source (op, color, dst) &&
        color_to_pixel (color, dst->pixman_format, &pixel))
     {
@@ -379,6 +385,9 @@ composite (void                     *_dst,
 {
     cairo_image_source_t *src = (cairo_image_source_t *)abstract_src;
     cairo_image_source_t *mask = (cairo_image_source_t *)abstract_mask;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (mask) {
        pixman_image_composite32 (_pixman_operator (op),
                                  src->pixman_image, mask->pixman_image, to_pixman_image (_dst),
@@ -415,6 +424,8 @@ lerp (void                  *_dst,
     cairo_image_source_t *src = (cairo_image_source_t *)abstract_src;
     cairo_image_source_t *mask = (cairo_image_source_t *)abstract_mask;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
 #if PIXMAN_HAS_OP_LERP
     pixman_image_composite32 (PIXMAN_OP_LERP_SRC,
                              src->pixman_image, mask->pixman_image, dst->pixman_image,
@@ -424,6 +435,10 @@ lerp (void                 *_dst,
                              width,  height);
 #else
     /* Punch the clip out of the destination */
+    TRACE ((stderr, "%s - OUT_REVERSE (mask=%d/%p, dst=%d/%p)\n",
+           __FUNCTION__,
+           mask->base.unique_id, mask->pixman_image,
+           dst->base.unique_id, dst->pixman_image));
     pixman_image_composite32 (PIXMAN_OP_OUT_REVERSE,
                              mask->pixman_image, NULL, dst->pixman_image,
                              mask_x, mask_y,
@@ -432,6 +447,11 @@ lerp (void                 *_dst,
                              width,  height);
 
     /* Now add the two results together */
+    TRACE ((stderr, "%s - ADD (src=%d/%p, mask=%d/%p, dst=%d/%p)\n",
+           __FUNCTION__,
+           src->base.unique_id, src->pixman_image,
+           mask->base.unique_id, mask->pixman_image,
+           dst->base.unique_id, dst->pixman_image));
     pixman_image_composite32 (PIXMAN_OP_ADD,
                              src->pixman_image, mask->pixman_image, dst->pixman_image,
                              src_x,  src_y,
@@ -460,10 +480,12 @@ composite_boxes (void                     *_dst,
     pixman_image_t *dst = to_pixman_image (_dst);
     pixman_image_t *src = ((cairo_image_source_t *)abstract_src)->pixman_image;
     pixman_image_t *mask = abstract_mask ? ((cairo_image_source_t *)abstract_mask)->pixman_image : NULL;
+    pixman_image_t *free_src = NULL;
     struct _cairo_boxes_chunk *chunk;
     int i;
 
     /* XXX consider using a region? saves multiple prepare-composite */
+    TRACE ((stderr, "%s x %d\n", __FUNCTION__, boxes->num_boxes));
 
     if (((cairo_surface_t *)_dst)->is_clear &&
        (op == CAIRO_OPERATOR_SOURCE ||
@@ -475,7 +497,7 @@ composite_boxes (void                       *_dst,
 #if PIXMAN_HAS_OP_LERP
            op = PIXMAN_OP_LERP_CLEAR;
 #else
-           src = _pixman_image_for_color (CAIRO_COLOR_WHITE);
+           free_src = src = _pixman_image_for_color (CAIRO_COLOR_WHITE);
            op = PIXMAN_OP_OUT_REVERSE;
 #endif
        } else if (op == CAIRO_OPERATOR_SOURCE) {
@@ -506,6 +528,9 @@ composite_boxes (void                       *_dst,
        }
     }
 
+    if (free_src)
+       pixman_image_unref (free_src);
+
     return CAIRO_STATUS_SUCCESS;
 }
 
@@ -612,6 +637,8 @@ composite_traps (void                       *_dst,
     pixman_image_t *mask;
     pixman_format_code_t format;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     /* Special case adding trapezoids onto a mask surface; we want to avoid
      * creating an intermediate temporary mask unnecessarily.
      *
@@ -690,6 +717,8 @@ composite_tristrip (void                    *_dst,
     pixman_image_t *mask;
     pixman_format_code_t format;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (strip->num_points < 3)
        return CAIRO_STATUS_SUCCESS;
 
@@ -745,6 +774,8 @@ composite_one_glyph (void                           *_dst,
     cairo_status_t status;
     int x, y;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     status = _cairo_scaled_glyph_lookup (info->font,
                                         info->glyphs[0].index,
                                         CAIRO_SCALED_GLYPH_INFO_SURFACE,
@@ -794,6 +825,8 @@ composite_glyphs_via_mask (void                             *_dst,
     cairo_status_t status;
     int i;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     /* XXX convert the glyphs to common formats a8/a8r8g8b8 to hit
      * optimised paths through pixman. Should we increase the bit
      * depth of the target surface, we should reconsider the appropriate
@@ -916,6 +949,8 @@ composite_glyphs (void                              *_dst,
     cairo_status_t status;
     int i;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (info->num_glyphs == 1)
        return composite_one_glyph(_dst, op, _src, src_x, src_y, dst_x, dst_y, info);
 
@@ -971,6 +1006,12 @@ composite_glyphs (void                            *_dst,
     return status;
 }
 
+static cairo_int_status_t
+check_composite (const cairo_composite_rectangles_t *extents)
+{
+    return CAIRO_STATUS_SUCCESS;
+}
+
 const cairo_compositor_t *
 _cairo_image_traps_compositor_get (void)
 {
@@ -986,7 +1027,7 @@ _cairo_image_traps_compositor_get (void)
        compositor.draw_image_boxes = draw_image_boxes;
        //compositor.copy_boxes = copy_boxes;
        compositor.fill_boxes = fill_boxes;
-       //compositor.check_composite = check_composite;
+       compositor.check_composite = check_composite;
        compositor.composite = composite;
        compositor.lerp = lerp;
        //compositor.check_composite_boxes = check_composite_boxes;
@@ -1190,6 +1231,8 @@ span_renderer_init (cairo_abstract_span_renderer_t        *_r,
     int src_x, src_y;
     int mask_x, mask_y;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (op == CAIRO_OPERATOR_CLEAR) {
        op = PIXMAN_OP_LERP_CLEAR;
     } else if (dst->base.is_clear &&
@@ -1275,6 +1318,8 @@ span_renderer_fini (cairo_abstract_span_renderer_t *_r,
 {
     cairo_image_span_renderer_t *r = (cairo_image_span_renderer_t *) _r;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (status == CAIRO_INT_STATUS_SUCCESS && r->base.finish)
        r->base.finish (r);
 
@@ -1290,18 +1335,37 @@ span_renderer_fini (cairo_abstract_span_renderer_t *_r,
 typedef struct _cairo_image_span_renderer {
     cairo_span_renderer_t base;
 
-    cairo_rectangle_int_t extents;
-
-    float opacity;
-    int stride;
-    uint8_t *data;
-
     const cairo_composite_rectangles_t *composite;
-    pixman_image_t *src, *mask;
-    int src_x, src_y;
 
+    float opacity;
     uint8_t op;
+    int bpp;
 
+    pixman_image_t *src, *mask;
+    union {
+       struct fill {
+           int stride;
+           uint8_t *data;
+           uint32_t pixel;
+       } fill;
+       struct blit {
+           int stride;
+           uint8_t *data;
+           int src_stride;
+           uint8_t *src_data;
+       } blit;
+       struct composite {
+           pixman_image_t *dst;
+           int src_x, src_y;
+           int mask_x, mask_y;
+       } composite;
+       struct finish {
+           cairo_rectangle_int_t extents;
+           int src_x, src_y;
+           int stride;
+           uint8_t *data;
+       } mask;
+    } u;
     uint8_t buf[sizeof(cairo_abstract_span_renderer_t)-128];
 } cairo_image_span_renderer_t;
 COMPILE_TIME_ASSERT (sizeof (cairo_image_span_renderer_t) <= sizeof (cairo_abstract_span_renderer_t));
@@ -1319,8 +1383,8 @@ _cairo_image_spans (void *abstract_renderer,
     if (num_spans == 0)
        return CAIRO_STATUS_SUCCESS;
 
-    mask = r->data + (y - r->extents.y) * r->stride;
-    mask += spans[0].x - r->extents.x;
+    mask = r->u.mask.data + (y - r->u.mask.extents.y) * r->u.mask.stride;
+    mask += spans[0].x - r->u.mask.extents.x;
     row = mask;
 
     do {
@@ -1337,7 +1401,7 @@ _cairo_image_spans (void *abstract_renderer,
     len = row - mask;
     row = mask;
     while (--height) {
-       mask += r->stride;
+       mask += r->u.mask.stride;
        memcpy (mask, row, len);
     }
 
@@ -1354,22 +1418,22 @@ _cairo_image_spans_and_zero (void *abstract_renderer,
     uint8_t *mask;
     int len;
 
-    mask = r->data;
-    if (y > r->extents.y) {
-       len = (y - r->extents.y) * r->stride;
+    mask = r->u.mask.data;
+    if (y > r->u.mask.extents.y) {
+       len = (y - r->u.mask.extents.y) * r->u.mask.stride;
        memset (mask, 0, len);
        mask += len;
     }
 
-    r->extents.y = y + height;
-    r->data = mask + height * r->stride;
+    r->u.mask.extents.y = y + height;
+    r->u.mask.data = mask + height * r->u.mask.stride;
     if (num_spans == 0) {
-       memset (mask, 0, height * r->stride);
+       memset (mask, 0, height * r->u.mask.stride);
     } else {
        uint8_t *row = mask;
 
-       if (spans[0].x != r->extents.x) {
-           len = spans[0].x - r->extents.x;
+       if (spans[0].x != r->u.mask.extents.x) {
+           len = spans[0].x - r->u.mask.extents.x;
            memset (row, 0, len);
            row += len;
        }
@@ -1384,15 +1448,15 @@ _cairo_image_spans_and_zero (void *abstract_renderer,
            spans++;
        } while (--num_spans > 1);
 
-       if (spans[0].x != r->extents.x + r->extents.width) {
-           len = r->extents.x + r->extents.width - spans[0].x;
+       if (spans[0].x != r->u.mask.extents.x + r->u.mask.extents.width) {
+           len = r->u.mask.extents.x + r->u.mask.extents.width - spans[0].x;
            memset (row, 0, len);
        }
 
        row = mask;
        while (--height) {
-           mask += r->stride;
-           memcpy (mask, row, r->extents.width);
+           mask += r->u.mask.stride;
+           memcpy (mask, row, r->u.mask.extents.width);
        }
     }
 
@@ -1404,28 +1468,1098 @@ _cairo_image_finish_spans_and_zero (void *abstract_renderer)
 {
     cairo_image_span_renderer_t *r = abstract_renderer;
 
-    if (r->extents.y < r->extents.height)
-       memset (r->data, 0, (r->extents.height - r->extents.y) * r->stride);
+    if (r->u.mask.extents.y < r->u.mask.extents.height)
+       memset (r->u.mask.data, 0, (r->u.mask.extents.height - r->u.mask.extents.y) * r->u.mask.stride);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_fill8_spans (void *abstract_renderer, int y, int h,
+              const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       do {
+           if (spans[0].coverage) {
+               int len = spans[1].x - spans[0].x;
+               uint8_t *d = r->u.fill.data + r->u.fill.stride*y + spans[0].x;
+               if (len == 1)
+                   *d = r->u.fill.pixel;
+               else
+                   memset(d, r->u.fill.pixel, len);
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           if (spans[0].coverage) {
+               int yy = y, hh = h;
+               do {
+                   int len = spans[1].x - spans[0].x;
+                   uint8_t *d = r->u.fill.data + r->u.fill.stride*yy + spans[0].x;
+                   if (len == 1)
+                       *d = r->u.fill.pixel;
+                   else
+                       memset(d, r->u.fill.pixel, len);
+                   yy++;
+               } while (--hh);
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_fill16_spans (void *abstract_renderer, int y, int h,
+              const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       do {
+           if (spans[0].coverage) {
+               int len = spans[1].x - spans[0].x;
+               uint16_t *d = (uint16_t*)(r->u.fill.data + r->u.fill.stride*y + spans[0].x*2);
+               while (len--)
+                   *d++ = r->u.fill.pixel;
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           if (spans[0].coverage) {
+               int yy = y, hh = h;
+               do {
+                   int len = spans[1].x - spans[0].x;
+                   uint16_t *d = (uint16_t*)(r->u.fill.data + r->u.fill.stride*yy + spans[0].x*2);
+                   while (len--)
+                       *d++ = r->u.fill.pixel;
+                   yy++;
+               } while (--hh);
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_fill32_spans (void *abstract_renderer, int y, int h,
+              const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       do {
+           if (spans[0].coverage) {
+               int len = spans[1].x - spans[0].x;
+               if (len > 32) {
+                   pixman_fill ((uint32_t *)r->u.fill.data, r->u.fill.stride / sizeof(uint32_t), r->bpp,
+                                spans[0].x, y, len, 1, r->u.fill.pixel);
+               } else {
+                   uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*y + spans[0].x*4);
+                   while (len--)
+                       *d++ = r->u.fill.pixel;
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           if (spans[0].coverage) {
+               if (spans[1].x - spans[0].x > 16) {
+                   pixman_fill ((uint32_t *)r->u.fill.data, r->u.fill.stride / sizeof(uint32_t), r->bpp,
+                                spans[0].x, y, spans[1].x - spans[0].x, h,
+                                r->u.fill.pixel);
+               } else {
+                   int yy = y, hh = h;
+                   do {
+                       int len = spans[1].x - spans[0].x;
+                       uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*yy + spans[0].x*4);
+                       while (len--)
+                           *d++ = r->u.fill.pixel;
+                       yy++;
+                   } while (--hh);
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+#if 0
+static cairo_status_t
+_fill_spans (void *abstract_renderer, int y, int h,
+            const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    do {
+       if (spans[0].coverage) {
+               pixman_fill ((uint32_t *) r->data, r->stride, r->bpp,
+                            spans[0].x, y,
+                            spans[1].x - spans[0].x, h,
+                            r->pixel);
+       }
+       spans++;
+    } while (--num_spans > 1);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+#endif
+
+static cairo_status_t
+_blit_spans (void *abstract_renderer, int y, int h,
+            const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+    int cpp;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    cpp = r->bpp/8;
+    if (likely (h == 1)) {
+       uint8_t *src = r->u.blit.src_data + y*r->u.blit.src_stride;
+       uint8_t *dst = r->u.blit.data + y*r->u.blit.stride;
+       do {
+           if (spans[0].coverage) {
+               void *s = src + spans[0].x*cpp;
+               void *d = dst + spans[0].x*cpp;
+               int len = (spans[1].x - spans[0].x) * cpp;
+               switch (len) {
+               case 1:
+                   *(uint8_t *)d = *(uint8_t *)s;
+                   break;
+               case 2:
+                   *(uint16_t *)d = *(uint16_t *)s;
+                   break;
+               case 4:
+                   *(uint32_t *)d = *(uint32_t *)s;
+                   break;
+#if HAVE_UINT64_T
+               case 8:
+                   *(uint64_t *)d = *(uint64_t *)s;
+                   break;
+#endif
+               default:
+                   memcpy(d, s, len);
+                   break;
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           if (spans[0].coverage) {
+               int yy = y, hh = h;
+               do {
+                   void *src = r->u.blit.src_data + yy*r->u.blit.src_stride + spans[0].x*cpp;
+                   void *dst = r->u.blit.data + yy*r->u.blit.stride + spans[0].x*cpp;
+                   int len = (spans[1].x - spans[0].x) * cpp;
+                   switch (len) {
+                   case 1:
+                       *(uint8_t *)dst = *(uint8_t *)src;
+                       break;
+                   case 2:
+                       *(uint16_t *)dst = *(uint16_t *)src;
+                       break;
+                   case 4:
+                       *(uint32_t *)dst = *(uint32_t *)src;
+                       break;
+#if HAVE_UINT64_T
+                   case 8:
+                       *(uint64_t *)dst = *(uint64_t *)src;
+                       break;
+#endif
+                   default:
+                       memcpy(dst, src, len);
+                       break;
+                   }
+                   yy++;
+               } while (--hh);
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_mono_spans (void *abstract_renderer, int y, int h,
+            const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    do {
+       if (spans[0].coverage) {
+           pixman_image_composite32 (r->op,
+                                     r->src, NULL, r->u.composite.dst,
+                                     spans[0].x + r->u.composite.src_x,  y + r->u.composite.src_y,
+                                     0, 0,
+                                     spans[0].x, y,
+                                     spans[1].x - spans[0].x, h);
+       }
+       spans++;
+    } while (--num_spans > 1);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_mono_unbounded_spans (void *abstract_renderer, int y, int h,
+                      const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0) {
+       pixman_image_composite32 (PIXMAN_OP_CLEAR,
+                                 r->src, NULL, r->u.composite.dst,
+                                 spans[0].x + r->u.composite.src_x,  y + r->u.composite.src_y,
+                                 0, 0,
+                                 r->composite->unbounded.x, y,
+                                 r->composite->unbounded.width, h);
+       r->u.composite.mask_y = y + h;
+       return CAIRO_STATUS_SUCCESS;
+    }
+
+    if (y != r->u.composite.mask_y) {
+       pixman_image_composite32 (PIXMAN_OP_CLEAR,
+                                 r->src, NULL, r->u.composite.dst,
+                                 spans[0].x + r->u.composite.src_x,  y + r->u.composite.src_y,
+                                 0, 0,
+                                 r->composite->unbounded.x, r->u.composite.mask_y,
+                                 r->composite->unbounded.width, y - r->u.composite.mask_y);
+    }
+
+    if (spans[0].x != r->composite->unbounded.x) {
+           pixman_image_composite32 (PIXMAN_OP_CLEAR,
+                                     r->src, NULL, r->u.composite.dst,
+                                     spans[0].x + r->u.composite.src_x,  y + r->u.composite.src_y,
+                                     0, 0,
+                                     r->composite->unbounded.x, y,
+                                     spans[0].x - r->composite->unbounded.x, h);
+    }
+
+    do {
+       int op = spans[0].coverage ? r->op : PIXMAN_OP_CLEAR;
+       pixman_image_composite32 (op,
+                                 r->src, NULL, r->u.composite.dst,
+                                 spans[0].x + r->u.composite.src_x,  y + r->u.composite.src_y,
+                                 0, 0,
+                                 spans[0].x, y,
+                                 spans[1].x - spans[0].x, h);
+       spans++;
+    } while (--num_spans > 1);
+
+    if (spans[0].x != r->composite->unbounded.x + r->composite->unbounded.width) {
+           pixman_image_composite32 (PIXMAN_OP_CLEAR,
+                                     r->src, NULL, r->u.composite.dst,
+                                     spans[0].x + r->u.composite.src_x,  y + r->u.composite.src_y,
+                                     0, 0,
+                                     spans[0].x, y,
+                                     r->composite->unbounded.x + r->composite->unbounded.width - spans[0].x, h);
+    }
+
+    r->u.composite.mask_y = y + h;
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_mono_finish_unbounded_spans (void *abstract_renderer)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (r->u.composite.mask_y < r->composite->unbounded.y + r->composite->unbounded.height) {
+       pixman_image_composite32 (PIXMAN_OP_CLEAR,
+                                 r->src, NULL, r->u.composite.dst,
+                                 r->composite->unbounded.x + r->u.composite.src_x,  r->u.composite.mask_y + r->u.composite.src_y,
+                                 0, 0,
+                                 r->composite->unbounded.x, r->u.composite.mask_y,
+                                 r->composite->unbounded.width,
+                                 r->composite->unbounded.y + r->composite->unbounded.height - r->u.composite.mask_y);
+    }
 
     return CAIRO_STATUS_SUCCESS;
 }
 
 static cairo_int_status_t
+mono_renderer_init (cairo_image_span_renderer_t        *r,
+                   const cairo_composite_rectangles_t *composite,
+                   cairo_antialias_t                    antialias,
+                   cairo_bool_t                         needs_clip)
+{
+    cairo_image_surface_t *dst = (cairo_image_surface_t *)composite->surface;
+
+    if (antialias != CAIRO_ANTIALIAS_NONE)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (!_cairo_pattern_is_opaque_solid (&composite->mask_pattern.base))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    r->base.render_rows = NULL;
+    if (composite->source_pattern.base.type == CAIRO_PATTERN_TYPE_SOLID) {
+       const cairo_color_t *color;
+
+       color = &composite->source_pattern.solid.color;
+       if (composite->op == CAIRO_OPERATOR_CLEAR)
+           color = CAIRO_COLOR_TRANSPARENT;
+
+       if (fill_reduces_to_source (composite->op, color, dst) &&
+           color_to_pixel (color, dst->pixman_format, &r->u.fill.pixel)) {
+           /* Use plain C for the fill operations as the span length is
+            * typically small, too small to payback the startup overheads of
+            * using SSE2 etc.
+            */
+           switch (PIXMAN_FORMAT_BPP(dst->pixman_format)) {
+           case 8: r->base.render_rows = _fill8_spans; break;
+           case 16: r->base.render_rows = _fill16_spans; break;
+           case 32: r->base.render_rows = _fill32_spans; break;
+           default: break;
+           }
+           r->u.fill.data = dst->data;
+           r->u.fill.stride = dst->stride;
+       }
+    } else if ((composite->op == CAIRO_OPERATOR_SOURCE ||
+               (composite->op == CAIRO_OPERATOR_OVER &&
+                (dst->base.is_clear || (dst->base.content & CAIRO_CONTENT_ALPHA) == 0))) &&
+              composite->source_pattern.base.type == CAIRO_PATTERN_TYPE_SURFACE &&
+              composite->source_pattern.surface.surface->backend->type == CAIRO_SURFACE_TYPE_IMAGE &&
+              to_image_surface(composite->source_pattern.surface.surface)->format == dst->format)
+    {
+       cairo_image_surface_t *src =
+          to_image_surface(composite->source_pattern.surface.surface);
+       int tx, ty;
+
+       if (_cairo_matrix_is_integer_translation(&composite->source_pattern.base.matrix,
+                                                &tx, &ty) &&
+           composite->bounded.x + tx >= 0 &&
+           composite->bounded.y + ty >= 0 &&
+           composite->bounded.x + composite->bounded.width +  tx <= src->width &&
+           composite->bounded.y + composite->bounded.height + ty <= src->height) {
+
+           r->u.blit.stride = dst->stride;
+           r->u.blit.data = dst->data;
+           r->u.blit.src_stride = src->stride;
+           r->u.blit.src_data = src->data + src->stride * ty + tx * 4;
+           r->base.render_rows = _blit_spans;
+       }
+    }
+
+    if (r->base.render_rows == NULL) {
+       r->src = _pixman_image_for_pattern (dst, &composite->source_pattern.base, FALSE,
+                                           &composite->unbounded,
+                                           &composite->source_sample_area,
+                                           &r->u.composite.src_x, &r->u.composite.src_y);
+       if (unlikely (r->src == NULL))
+           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+       r->u.composite.dst = to_pixman_image (composite->surface);
+       r->op = _pixman_operator (composite->op);
+       if (composite->is_bounded == 0) {
+           r->base.render_rows = _mono_unbounded_spans;
+           r->base.finish = _mono_finish_unbounded_spans;
+           r->u.composite.mask_y = composite->unbounded.y;
+       } else
+           r->base.render_rows = _mono_spans;
+    }
+    r->bpp = PIXMAN_FORMAT_BPP(dst->pixman_format);
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+#define ONE_HALF 0x7f
+#define RB_MASK 0x00ff00ff
+#define RB_ONE_HALF 0x007f007f
+#define RB_MASK_PLUS_ONE 0x01000100
+#define G_SHIFT 8
+static inline uint32_t
+mul8x2_8 (uint32_t a, uint8_t b)
+{
+    uint32_t t = (a & RB_MASK) * b + RB_ONE_HALF;
+    return ((t + ((t >> G_SHIFT) & RB_MASK)) >> G_SHIFT) & RB_MASK;
+}
+
+static inline uint32_t
+add8x2_8x2 (uint32_t a, uint32_t b)
+{
+    uint32_t t = a + b;
+    t |= RB_MASK_PLUS_ONE - ((t >> G_SHIFT) & RB_MASK);
+    return t & RB_MASK;
+}
+
+static inline uint8_t
+mul8_8 (uint8_t a, uint8_t b)
+{
+    uint16_t t = a * (uint16_t)b + ONE_HALF;
+    return ((t >> G_SHIFT) + t) >> G_SHIFT;
+}
+
+static inline uint32_t
+lerp8x4 (uint32_t src, uint8_t a, uint32_t dst)
+{
+    uint8_t ia = ~a;
+    uint32_t r1, r2;
+
+    r1 = add8x2_8x2 (mul8x2_8 (src, a),
+                    mul8x2_8 (dst, ia));
+    r2 = add8x2_8x2 (mul8x2_8 (src >> G_SHIFT, a),
+                    mul8x2_8 (dst >> G_SHIFT, ia));
+
+    return r1 | (r2 << G_SHIFT);
+}
+
+static cairo_status_t
+_fill_a8_lerp_opaque_spans (void *abstract_renderer, int y, int h,
+                           const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       uint8_t *d = r->u.fill.data + r->u.fill.stride*y;
+       do {
+           uint8_t a = spans[0].coverage;
+           if (a) {
+               int len = spans[1].x - spans[0].x;
+               if (a == 0xff) {
+                   memset(d + spans[0].x, r->u.fill.pixel, len);
+               } else {
+                   uint8_t s = mul8_8(a, r->u.fill.pixel);
+                   uint8_t *dst = d + spans[0].x;
+                   a = ~a;
+                   while (len--) {
+                       uint8_t t = mul8_8(*dst, a);
+                       *dst++ = t + s;
+                   }
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           uint8_t a = spans[0].coverage;
+           if (a) {
+               int yy = y, hh = h;
+               if (a == 0xff) {
+                   do {
+                       int len = spans[1].x - spans[0].x;
+                       uint8_t *d = r->u.fill.data + r->u.fill.stride*yy + spans[0].x;
+                       memset(d, r->u.fill.pixel, len);
+                       yy++;
+                   } while (--hh);
+               } else {
+                   uint8_t s = mul8_8(a, r->u.fill.pixel);
+                   a = ~a;
+                   do {
+                       int len = spans[1].x - spans[0].x;
+                       uint8_t *d = r->u.fill.data + r->u.fill.stride*yy + spans[0].x;
+                       while (len--) {
+                           uint8_t t = mul8_8(*d, a);
+                           *d++ = t + s;
+                       }
+                       yy++;
+                   } while (--hh);
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_fill_xrgb32_lerp_opaque_spans (void *abstract_renderer, int y, int h,
+                               const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       do {
+           uint8_t a = spans[0].coverage;
+           if (a) {
+               int len = spans[1].x - spans[0].x;
+               uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*y + spans[0].x*4);
+               if (a == 0xff) {
+                   if (len > 31) {
+                       pixman_fill ((uint32_t *)r->u.fill.data, r->u.fill.stride / sizeof(uint32_t), r->bpp,
+                                    spans[0].x, y, len, 1, r->u.fill.pixel);
+                   } else {
+                       uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*y + spans[0].x*4);
+                       while (len--)
+                           *d++ = r->u.fill.pixel;
+                   }
+               } else while (len--) {
+                   *d = lerp8x4 (r->u.fill.pixel, a, *d);
+                   d++;
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           uint8_t a = spans[0].coverage;
+           if (a) {
+               if (a == 0xff) {
+                   if (spans[1].x - spans[0].x > 16) {
+                       pixman_fill ((uint32_t *)r->u.fill.data, r->u.fill.stride / sizeof(uint32_t), r->bpp,
+                                    spans[0].x, y, spans[1].x - spans[0].x, h,
+                                    r->u.fill.pixel);
+                   } else {
+                       int yy = y, hh = h;
+                       do {
+                           int len = spans[1].x - spans[0].x;
+                           uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*yy + spans[0].x*4);
+                           while (len--)
+                               *d++ = r->u.fill.pixel;
+                           yy++;
+                       } while (--hh);
+                   }
+               } else {
+                   int yy = y, hh = h;
+                   do {
+                       int len = spans[1].x - spans[0].x;
+                       uint32_t *d = (uint32_t *)(r->u.fill.data + r->u.fill.stride*yy + spans[0].x*4);
+                       while (len--) {
+                           *d = lerp8x4 (r->u.fill.pixel, a, *d);
+                           d++;
+                       }
+                       yy++;
+                   } while (--hh);
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_fill_a8_lerp_spans (void *abstract_renderer, int y, int h,
+                    const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       do {
+           uint8_t a = mul8_8 (spans[0].coverage, r->op);
+           if (a) {
+               int len = spans[1].x - spans[0].x;
+               uint8_t *d = r->u.fill.data + r->u.fill.stride*y + spans[0].x;
+               uint16_t p = (uint16_t)a * r->u.fill.pixel + 0x7f;
+               uint16_t ia = ~a;
+               while (len--) {
+                   uint16_t t = *d*ia + p;
+                   *d++ = (t + (t>>8)) >> 8;
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           uint8_t a = mul8_8 (spans[0].coverage, r->op);
+           if (a) {
+               int yy = y, hh = h;
+               uint16_t p = (uint16_t)a * r->u.fill.pixel + 0x7f;
+               uint16_t ia = ~a;
+               do {
+                   int len = spans[1].x - spans[0].x;
+                   uint8_t *d = r->u.fill.data + r->u.fill.stride*yy + spans[0].x;
+                   while (len--) {
+                       uint16_t t = *d*ia + p;
+                       *d++ = (t + (t>>8)) >> 8;
+                   }
+                   yy++;
+               } while (--hh);
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_fill_xrgb32_lerp_spans (void *abstract_renderer, int y, int h,
+                        const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       do {
+           uint8_t a = mul8_8 (spans[0].coverage, r->op);
+           if (a) {
+               int len = spans[1].x - spans[0].x;
+               uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*y + spans[0].x*4);
+               while (len--) {
+                   *d = lerp8x4 (r->u.fill.pixel, a, *d);
+                   d++;
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           uint8_t a = mul8_8 (spans[0].coverage, r->op);
+           if (a) {
+               int yy = y, hh = h;
+               do {
+                   int len = spans[1].x - spans[0].x;
+                   uint32_t *d = (uint32_t *)(r->u.fill.data + r->u.fill.stride*yy + spans[0].x*4);
+                   while (len--) {
+                       *d = lerp8x4 (r->u.fill.pixel, a, *d);
+                       d++;
+                   }
+                   yy++;
+               } while (--hh);
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_blit_xrgb32_lerp_spans (void *abstract_renderer, int y, int h,
+                        const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (likely(h == 1)) {
+       uint8_t *src = r->u.blit.src_data + y*r->u.blit.src_stride;
+       uint8_t *dst = r->u.blit.data + y*r->u.blit.stride;
+       do {
+           uint8_t a = mul8_8 (spans[0].coverage, r->op);
+           if (a) {
+               uint32_t *s = (uint32_t*)src + spans[0].x;
+               uint32_t *d = (uint32_t*)dst + spans[0].x;
+               int len = spans[1].x - spans[0].x;
+               if (a == 0xff) {
+                   if (len == 1)
+                       *d = *s;
+                   else
+                       memcpy(d, s, len*4);
+               } else {
+                   while (len--) {
+                       *d = lerp8x4 (*s, a, *d);
+                       s++, d++;
+                   }
+               }
+           }
+           spans++;
+       } while (--num_spans > 1);
+    } else {
+       do {
+           uint8_t a = mul8_8 (spans[0].coverage, r->op);
+           if (a) {
+               int yy = y, hh = h;
+               do {
+                   uint32_t *s = (uint32_t *)(r->u.blit.src_data + yy*r->u.blit.src_stride + spans[0].x * 4);
+                   uint32_t *d = (uint32_t *)(r->u.blit.data + yy*r->u.blit.stride + spans[0].x * 4);
+                   int len = spans[1].x - spans[0].x;
+                   if (a == 0xff) {
+                       if (len == 1)
+                           *d = *s;
+                       else
+                           memcpy(d, s, len * 4);
+                   } else {
+                       while (len--) {
+                           *d = lerp8x4 (*s, a, *d);
+                           s++, d++;
+                       }
+                   }
+                   yy++;
+               } while (--hh);
+           }
+           spans++;
+       } while (--num_spans > 1);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_inplace_spans (void *abstract_renderer,
+               int y, int h,
+               const cairo_half_open_span_t *spans,
+               unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+    uint8_t *mask;
+    int x0, x1;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (num_spans == 2 && spans[0].coverage == 0xff) {
+       pixman_image_composite32 (r->op, r->src, NULL, r->u.composite.dst,
+                                 spans[0].x + r->u.composite.src_x,
+                                 y + r->u.composite.src_y,
+                                 0, 0,
+                                 spans[0].x, y,
+                                 spans[1].x - spans[0].x, h);
+       return CAIRO_STATUS_SUCCESS;
+    }
+
+    mask = (uint8_t *)pixman_image_get_data (r->mask);
+    x0 = spans[0].x;
+    do {
+       int len = spans[1].x - spans[0].x;
+       *mask++ = spans[0].coverage;
+       if (len > 1) {
+           memset (mask, spans[0].coverage, --len);
+           mask += len;
+       }
+       x1 = spans[1].x;
+       spans++;
+    } while (--num_spans > 1);
+
+    pixman_image_composite32 (r->op, r->src, r->mask, r->u.composite.dst,
+                             x0 + r->u.composite.src_x,
+                             y + r->u.composite.src_y,
+                             0, 0,
+                             x0, y,
+                             x1 - x0, h);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_inplace_src_spans (void *abstract_renderer,
+                   int y, int h,
+                   const cairo_half_open_span_t *spans,
+                   unsigned num_spans)
+{
+    cairo_image_span_renderer_t *r = abstract_renderer;
+    uint8_t *m;
+    int x0;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    x0 = spans[0].x;
+    m = r->buf;
+    do {
+       int len = spans[1].x - spans[0].x;
+       if (spans[0].coverage == 0xff) {
+           if (spans[0].x != x0) {
+#if PIXMAN_HAS_OP_LERP
+               pixman_image_composite32 (PIXMAN_OP_LERP_SRC,
+                                         r->src, r->mask, r->u.composite.dst,
+                                         x0 + r->u.composite.src_x,
+                                         y + r->u.composite.src_y,
+                                         0, 0,
+                                         x0, y,
+                                         spans[0].x - x0, h);
+#else
+               pixman_image_composite32 (PIXMAN_OP_OUT_REVERSE,
+                                         r->mask, NULL, r->u.composite.dst,
+                                         0, 0,
+                                         0, 0,
+                                         x0, y,
+                                         spans[0].x - x0, h);
+               pixman_image_composite32 (PIXMAN_OP_ADD,
+                                         r->src, r->mask, r->u.composite.dst,
+                                         x0 + r->u.composite.src_x,
+                                         y + r->u.composite.src_y,
+                                         0, 0,
+                                         x0, y,
+                                         spans[0].x - x0, h);
+#endif
+           }
+
+           pixman_image_composite32 (PIXMAN_OP_SRC,
+                                     r->src, NULL, r->u.composite.dst,
+                                     spans[0].x + r->u.composite.src_x,
+                                     y + r->u.composite.src_y,
+                                     0, 0,
+                                     spans[0].x, y,
+                                     spans[1].x - spans[0].x, h);
+
+           m = r->buf;
+           x0 = spans[1].x;
+       } else if (spans[0].coverage == 0x0) {
+           if (spans[0].x != x0) {
+#if PIXMAN_HAS_OP_LERP
+               pixman_image_composite32 (PIXMAN_OP_LERP_SRC,
+                                         r->src, r->mask, r->u.composite.dst,
+                                         x0 + r->u.composite.src_x,
+                                         y + r->u.composite.src_y,
+                                         0, 0,
+                                         x0, y,
+                                         spans[0].x - x0, h);
+#else
+               pixman_image_composite32 (PIXMAN_OP_OUT_REVERSE,
+                                         r->mask, NULL, r->u.composite.dst,
+                                         0, 0,
+                                         0, 0,
+                                         x0, y,
+                                         spans[0].x - x0, h);
+               pixman_image_composite32 (PIXMAN_OP_ADD,
+                                         r->src, r->mask, r->u.composite.dst,
+                                         x0 + r->u.composite.src_x,
+                                         y + r->u.composite.src_y,
+                                         0, 0,
+                                         x0, y,
+                                         spans[0].x - x0, h);
+#endif
+           }
+
+           m = r->buf;
+           x0 = spans[1].x;
+       } else {
+           *m++ = spans[0].coverage;
+           if (len > 1) {
+               memset (m, spans[0].coverage, --len);
+               m += len;
+           }
+       }
+       spans++;
+    } while (--num_spans > 1);
+
+    if (spans[0].x != x0) {
+#if PIXMAN_HAS_OP_LERP
+       pixman_image_composite32 (PIXMAN_OP_LERP_SRC,
+                                 r->src, r->mask, r->u.composite.dst,
+                                 x0 + r->u.composite.src_x,
+                                 y + r->u.composite.src_y,
+                                 0, 0,
+                                 x0, y,
+                                 spans[0].x - x0, h);
+#else
+       pixman_image_composite32 (PIXMAN_OP_OUT_REVERSE,
+                                 r->mask, NULL, r->u.composite.dst,
+                                 0, 0,
+                                 0, 0,
+                                 x0, y,
+                                 spans[0].x - x0, h);
+       pixman_image_composite32 (PIXMAN_OP_ADD,
+                                 r->src, r->mask, r->u.composite.dst,
+                                 x0 + r->u.composite.src_x,
+                                 y + r->u.composite.src_y,
+                                 0, 0,
+                                 x0, y,
+                                 spans[0].x - x0, h);
+#endif
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
+inplace_renderer_init (cairo_image_span_renderer_t     *r,
+                      const cairo_composite_rectangles_t *composite,
+                      cairo_antialias_t                 antialias,
+                      cairo_bool_t                      needs_clip)
+{
+    cairo_image_surface_t *dst = (cairo_image_surface_t *)composite->surface;
+
+    if (composite->mask_pattern.base.type != CAIRO_PATTERN_TYPE_SOLID)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    r->base.render_rows = NULL;
+    r->op = composite->mask_pattern.solid.color.alpha_short >> 8;
+
+    if (composite->source_pattern.base.type == CAIRO_PATTERN_TYPE_SOLID) {
+       const cairo_color_t *color;
+
+       color = &composite->source_pattern.solid.color;
+       if (composite->op == CAIRO_OPERATOR_CLEAR)
+           color = CAIRO_COLOR_TRANSPARENT;
+
+       if (fill_reduces_to_source (composite->op, color, dst) &&
+           color_to_pixel (color, dst->pixman_format, &r->u.fill.pixel)) {
+           /* Use plain C for the fill operations as the span length is
+            * typically small, too small to payback the startup overheads of
+            * using SSE2 etc.
+            */
+           if (r->op == 0xff) {
+               switch (dst->format) {
+               case CAIRO_FORMAT_A8:
+                   r->base.render_rows = _fill_a8_lerp_opaque_spans;
+                   break;
+               case CAIRO_FORMAT_RGB24:
+               case CAIRO_FORMAT_ARGB32:
+                   r->base.render_rows = _fill_xrgb32_lerp_opaque_spans;
+                   break;
+               case CAIRO_FORMAT_A1:
+               case CAIRO_FORMAT_RGB16_565:
+               case CAIRO_FORMAT_RGB30:
+               case CAIRO_FORMAT_INVALID:
+               default: break;
+               }
+           } else {
+               switch (dst->format) {
+               case CAIRO_FORMAT_A8:
+                   r->base.render_rows = _fill_a8_lerp_spans;
+                   break;
+               case CAIRO_FORMAT_RGB24:
+               case CAIRO_FORMAT_ARGB32:
+                   r->base.render_rows = _fill_xrgb32_lerp_spans;
+                   break;
+               case CAIRO_FORMAT_A1:
+               case CAIRO_FORMAT_RGB16_565:
+               case CAIRO_FORMAT_RGB30:
+               case CAIRO_FORMAT_INVALID:
+               default: break;
+               }
+           }
+           r->u.fill.data = dst->data;
+           r->u.fill.stride = dst->stride;
+       }
+    } else if ((dst->format == CAIRO_FORMAT_ARGB32 || dst->format == CAIRO_FORMAT_RGB24) &&
+              (composite->op == CAIRO_OPERATOR_SOURCE ||
+               (composite->op == CAIRO_OPERATOR_OVER &&
+                (dst->base.is_clear || (dst->base.content & CAIRO_CONTENT_ALPHA) == 0))) &&
+              composite->source_pattern.base.type == CAIRO_PATTERN_TYPE_SURFACE &&
+              composite->source_pattern.surface.surface->backend->type == CAIRO_SURFACE_TYPE_IMAGE &&
+              to_image_surface(composite->source_pattern.surface.surface)->format == dst->format)
+    {
+       cairo_image_surface_t *src =
+          to_image_surface(composite->source_pattern.surface.surface);
+       int tx, ty;
+
+       if (_cairo_matrix_is_integer_translation(&composite->source_pattern.base.matrix,
+                                                &tx, &ty) &&
+           composite->bounded.x + tx >= 0 &&
+           composite->bounded.y + ty >= 0 &&
+           composite->bounded.x + composite->bounded.width + tx <= src->width &&
+           composite->bounded.y + composite->bounded.height + ty <= src->height) {
+
+           assert(PIXMAN_FORMAT_BPP(dst->pixman_format) == 32);
+           r->u.blit.stride = dst->stride;
+           r->u.blit.data = dst->data;
+           r->u.blit.src_stride = src->stride;
+           r->u.blit.src_data = src->data + src->stride * ty + tx * 4;
+           r->base.render_rows = _blit_xrgb32_lerp_spans;
+       }
+    }
+    if (r->base.render_rows == NULL) {
+       unsigned int width;
+       const cairo_pattern_t *src = &composite->source_pattern.base;
+
+       if (r->op != 0xff)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       if (composite->is_bounded == 0)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       width = (composite->bounded.width + 3) & ~3;
+       r->base.render_rows = _inplace_spans;
+       if (dst->base.is_clear &&
+           (composite->op == CAIRO_OPERATOR_SOURCE ||
+            composite->op == CAIRO_OPERATOR_OVER ||
+            composite->op == CAIRO_OPERATOR_ADD)) {
+           r->op = PIXMAN_OP_SRC;
+       } else if (composite->op == CAIRO_OPERATOR_SOURCE) {
+           r->base.render_rows = _inplace_src_spans;
+           r->u.composite.mask_y = r->composite->unbounded.y;
+           width = (composite->unbounded.width + 3) & ~3;
+       } else if (composite->op == CAIRO_OPERATOR_CLEAR) {
+           r->op = PIXMAN_OP_OUT_REVERSE;
+           src = NULL;
+       } else {
+           r->op = _pixman_operator (composite->op);
+       }
+
+       if (width > sizeof (r->buf))
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       r->src = _pixman_image_for_pattern (dst, src, FALSE,
+                                           &composite->bounded,
+                                           &composite->source_sample_area,
+                                           &r->u.composite.src_x, &r->u.composite.src_y);
+       if (unlikely (r->src == NULL))
+           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+       /* Create an effectively unbounded mask by repeating the single line */
+       r->mask = pixman_image_create_bits (PIXMAN_a8,
+                                           width, composite->unbounded.height,
+                                           (uint32_t *)r->buf, 0);
+       if (unlikely (r->mask == NULL)) {
+           pixman_image_unref (r->src);
+           return _cairo_error(CAIRO_STATUS_NO_MEMORY);
+       }
+
+       r->u.composite.dst = dst->pixman_image;
+    }
+
+    r->bpp = PIXMAN_FORMAT_BPP(dst->pixman_format);
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
 span_renderer_init (cairo_abstract_span_renderer_t     *_r,
                    const cairo_composite_rectangles_t *composite,
+                   cairo_antialias_t                    antialias,
                    cairo_bool_t                         needs_clip)
 {
     cairo_image_span_renderer_t *r = (cairo_image_span_renderer_t *)_r;
     cairo_image_surface_t *dst = (cairo_image_surface_t *)composite->surface;
     const cairo_pattern_t *source = &composite->source_pattern.base;
     cairo_operator_t op = composite->op;
+    cairo_int_status_t status;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (needs_clip)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
 
     r->composite = composite;
     r->mask = NULL;
     r->src = NULL;
+    r->base.finish = NULL;
 
-    if (needs_clip)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
+    status = mono_renderer_init (r, composite, antialias, needs_clip);
+    if (status != CAIRO_INT_STATUS_UNSUPPORTED)
+       return status;
+
+    status = inplace_renderer_init (r, composite, antialias, needs_clip);
+    if (status != CAIRO_INT_STATUS_UNSUPPORTED)
+       return status;
+
+    r->bpp = 0;
 
     if (op == CAIRO_OPERATOR_CLEAR) {
 #if PIXMAN_HAS_OP_LERP
@@ -1453,7 +2587,7 @@ span_renderer_init (cairo_abstract_span_renderer_t        *_r,
     r->src = _pixman_image_for_pattern (dst, source, FALSE,
                                        &composite->unbounded,
                                        &composite->source_sample_area,
-                                       &r->src_x, &r->src_y);
+                                       &r->u.mask.src_x, &r->u.mask.src_y);
     if (unlikely (r->src == NULL))
        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
@@ -1479,8 +2613,8 @@ span_renderer_init (cairo_abstract_span_renderer_t        *_r,
        {
            pixman_image_unref (r->src);
            r->src = mask;
-           r->src_x = mask_x;
-           r->src_y = mask_y;
+           r->u.mask.src_x = mask_x;
+           r->u.mask.src_y = mask_y;
            mask = NULL;
        }
 
@@ -1490,21 +2624,21 @@ span_renderer_init (cairo_abstract_span_renderer_t      *_r,
        }
     }
 
-    r->extents = composite->unbounded;
-    r->stride = (r->extents.width + 3) & ~3;
-    if (r->extents.height * r->stride > (int)sizeof (r->buf)) {
+    r->u.mask.extents = composite->unbounded;
+    r->u.mask.stride = (r->u.mask.extents.width + 3) & ~3;
+    if (r->u.mask.extents.height * r->u.mask.stride > (int)sizeof (r->buf)) {
        r->mask = pixman_image_create_bits (PIXMAN_a8,
-                                           r->extents.width,
-                                           r->extents.height,
+                                           r->u.mask.extents.width,
+                                           r->u.mask.extents.height,
                                            NULL, 0);
 
        r->base.render_rows = _cairo_image_spans;
        r->base.finish = NULL;
     } else {
        r->mask = pixman_image_create_bits (PIXMAN_a8,
-                                           r->extents.width,
-                                           r->extents.height,
-                                           (uint32_t *)r->buf, r->stride);
+                                           r->u.mask.extents.width,
+                                           r->u.mask.extents.height,
+                                           (uint32_t *)r->buf, r->u.mask.stride);
 
        r->base.render_rows = _cairo_image_spans_and_zero;
        r->base.finish = _cairo_image_finish_spans_and_zero;
@@ -1512,10 +2646,10 @@ span_renderer_init (cairo_abstract_span_renderer_t      *_r,
     if (unlikely (r->mask == NULL))
        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
-    r->data = (uint8_t *) pixman_image_get_data (r->mask);
-    r->stride = pixman_image_get_stride (r->mask);
+    r->u.mask.data = (uint8_t *) pixman_image_get_data (r->mask);
+    r->u.mask.stride = pixman_image_get_stride (r->mask);
 
-    r->extents.height += r->extents.y;
+    r->u.mask.extents.height += r->u.mask.extents.y;
     return CAIRO_STATUS_SUCCESS;
 }
 
@@ -1525,7 +2659,9 @@ span_renderer_fini (cairo_abstract_span_renderer_t *_r,
 {
     cairo_image_span_renderer_t *r = (cairo_image_span_renderer_t *) _r;
 
-    if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (likely (status == CAIRO_INT_STATUS_SUCCESS && r->bpp == 0)) {
        const cairo_composite_rectangles_t *composite = r->composite;
 
        if (r->base.finish)
@@ -1533,8 +2669,8 @@ span_renderer_fini (cairo_abstract_span_renderer_t *_r,
 
        pixman_image_composite32 (r->op, r->src, r->mask,
                                  to_pixman_image (composite->surface),
-                                 composite->unbounded.x + r->src_x,
-                                 composite->unbounded.y + r->src_y,
+                                 composite->unbounded.x + r->u.mask.src_x,
+                                 composite->unbounded.y + r->u.mask.src_y,
                                  0, 0,
                                  composite->unbounded.x,
                                  composite->unbounded.y,
@@ -1552,27 +2688,33 @@ span_renderer_fini (cairo_abstract_span_renderer_t *_r,
 const cairo_compositor_t *
 _cairo_image_spans_compositor_get (void)
 {
-    static cairo_spans_compositor_t compositor;
+    static cairo_spans_compositor_t spans;
+    static cairo_compositor_t shape;
 
-    if (compositor.base.delegate == NULL) {
-       _cairo_spans_compositor_init (&compositor,
-                                     _cairo_image_traps_compositor_get());
+    if (spans.base.delegate == NULL) {
+       _cairo_shape_mask_compositor_init (&shape,
+                                          _cairo_image_traps_compositor_get());
+       shape.glyphs = NULL;
+
+       _cairo_spans_compositor_init (&spans, &shape);
 
-       compositor.flags = 0;
+       spans.flags = 0;
 #if PIXMAN_HAS_OP_LERP
-       compositor.flags |= CAIRO_SPANS_COMPOSITOR_HAS_LERP;
+       spans.flags |= CAIRO_SPANS_COMPOSITOR_HAS_LERP;
 #endif
 
-       //compositor.acquire = acquire;
-       //compositor.release = release;
-       compositor.fill_boxes = fill_boxes;
-       compositor.pattern_to_surface = _cairo_image_source_create_for_pattern;
-       //compositor.check_composite_boxes = check_composite_boxes;
-       compositor.composite_boxes = composite_boxes;
-       //compositor.check_span_renderer = check_span_renderer;
-       compositor.renderer_init = span_renderer_init;
-       compositor.renderer_fini = span_renderer_fini;
+       //spans.acquire = acquire;
+       //spans.release = release;
+       spans.fill_boxes = fill_boxes;
+       spans.draw_image_boxes = draw_image_boxes;
+       //spans.copy_boxes = copy_boxes;
+       spans.pattern_to_surface = _cairo_image_source_create_for_pattern;
+       //spans.check_composite_boxes = check_composite_boxes;
+       spans.composite_boxes = composite_boxes;
+       //spans.check_span_renderer = check_span_renderer;
+       spans.renderer_init = span_renderer_init;
+       spans.renderer_fini = span_renderer_fini;
     }
 
-    return &compositor.base;
+    return &spans.base;
 }
index 943790d..c5bd228 100644 (file)
 
 #include "cairo-compositor-private.h"
 #include "cairo-error-private.h"
-#include "cairo-pattern-private.h"
+#include "cairo-pattern-inline.h"
 #include "cairo-paginated-private.h"
 #include "cairo-recording-surface-private.h"
 #include "cairo-surface-observer-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
 #include "cairo-surface-subsurface-private.h"
 
 #define PIXMAN_MAX_INT ((pixman_fixed_1 >> 1) - pixman_fixed_e) /* need to ensure deltas also fit */
@@ -71,6 +71,8 @@ _pixman_transparent_image (void)
 {
     pixman_image_t *image;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     image = __pixman_transparent_image;
     if (unlikely (image == NULL)) {
        pixman_color_t color;
@@ -101,6 +103,8 @@ _pixman_black_image (void)
 {
     pixman_image_t *image;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     image = __pixman_black_image;
     if (unlikely (image == NULL)) {
        pixman_color_t color;
@@ -131,6 +135,8 @@ _pixman_white_image (void)
 {
     pixman_image_t *image;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     image = __pixman_white_image;
     if (unlikely (image == NULL)) {
        pixman_color_t color;
@@ -175,18 +181,21 @@ static int n_cached;
 static pixman_image_t *
 _pixman_transparent_image (void)
 {
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     return _pixman_image_for_color (CAIRO_COLOR_TRANSPARENT);
 }
 
 static pixman_image_t *
 _pixman_black_image (void)
 {
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     return _pixman_image_for_color (CAIRO_COLOR_BLACK);
 }
 
 static pixman_image_t *
 _pixman_white_image (void)
 {
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     return _pixman_image_for_color (CAIRO_COLOR_WHITE);
 }
 #endif /* !PIXMAN_HAS_ATOMIC_OPS */
@@ -294,6 +303,8 @@ _pixman_image_for_gradient (const cairo_gradient_pattern_t *pattern,
     unsigned int i;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (pattern->n_stops > ARRAY_LENGTH(pixman_stops_static)) {
        pixman_stops = _cairo_malloc_ab (pattern->n_stops,
                                         sizeof(pixman_gradient_stop_t));
@@ -384,6 +395,8 @@ _pixman_image_for_mesh (const cairo_mesh_pattern_t *pattern,
     pixman_image_t *image;
     int width, height;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     *tx = -extents->x;
     *ty = -extents->y;
     width = extents->width;
@@ -419,6 +432,13 @@ _acquire_source_cleanup (pixman_image_t *pixman_image,
     free (data);
 }
 
+static void
+_defer_free_cleanup (pixman_image_t *pixman_image,
+                    void *closure)
+{
+    cairo_surface_destroy (closure);
+}
+
 static uint16_t
 expand_channel (uint16_t v, uint32_t bits)
 {
@@ -437,6 +457,8 @@ _pixel_to_solid (cairo_image_surface_t *image, int x, int y)
     uint32_t pixel;
     pixman_color_t color;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     switch (image->format) {
     default:
     case CAIRO_FORMAT_INVALID:
@@ -591,6 +613,82 @@ _pixman_image_set_properties (pixman_image_t *pixman_image,
     return TRUE;
 }
 
+struct proxy {
+    cairo_surface_t base;
+    cairo_surface_t *image;
+};
+
+static cairo_status_t
+proxy_acquire_source_image (void                        *abstract_surface,
+                           cairo_image_surface_t       **image_out,
+                           void                        **image_extra)
+{
+    struct proxy *proxy = abstract_surface;
+    return _cairo_surface_acquire_source_image (proxy->image, image_out, image_extra);
+}
+
+static void
+proxy_release_source_image (void                       *abstract_surface,
+                           cairo_image_surface_t       *image,
+                           void                        *image_extra)
+{
+    struct proxy *proxy = abstract_surface;
+    _cairo_surface_release_source_image (proxy->image, image, image_extra);
+}
+
+static cairo_status_t
+proxy_finish (void *abstract_surface)
+{
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static const cairo_surface_backend_t proxy_backend  = {
+    CAIRO_INTERNAL_SURFACE_TYPE_NULL,
+    proxy_finish,
+    NULL,
+
+    NULL, /* create similar */
+    NULL, /* create similar image */
+    NULL, /* map to image */
+    NULL, /* unmap image */
+
+    _cairo_surface_default_source,
+    proxy_acquire_source_image,
+    proxy_release_source_image,
+};
+
+static cairo_surface_t *
+attach_proxy (cairo_surface_t *source,
+             cairo_surface_t *image)
+{
+    struct proxy *proxy;
+
+    proxy = malloc (sizeof (*proxy));
+    if (unlikely (proxy == NULL))
+       return _cairo_surface_create_in_error (CAIRO_STATUS_NO_MEMORY);
+
+    _cairo_surface_init (&proxy->base, &proxy_backend, NULL, image->content);
+
+    proxy->image = image;
+    _cairo_surface_attach_snapshot (source, &proxy->base, NULL);
+
+    return &proxy->base;
+}
+
+static void
+detach_proxy (cairo_surface_t *source,
+             cairo_surface_t *proxy)
+{
+    cairo_surface_finish (proxy);
+    cairo_surface_destroy (proxy);
+}
+
+static cairo_surface_t *
+get_proxy (cairo_surface_t *proxy)
+{
+    return ((struct proxy *)proxy)->image;
+}
+
 static pixman_image_t *
 _pixman_image_for_recording (cairo_image_surface_t *dst,
                             const cairo_surface_pattern_t *pattern,
@@ -599,7 +697,7 @@ _pixman_image_for_recording (cairo_image_surface_t *dst,
                             const cairo_rectangle_int_t *sample,
                             int *ix, int *iy)
 {
-    cairo_surface_t *source, *clone;
+    cairo_surface_t *source, *clone, *proxy;
     cairo_rectangle_int_t limit;
     pixman_image_t *pixman_image;
     cairo_status_t status;
@@ -607,38 +705,15 @@ _pixman_image_for_recording (cairo_image_surface_t *dst,
     cairo_matrix_t *m, matrix;
     int tx = 0, ty = 0;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     *ix = *iy = 0;
 
-    source = pattern->surface;
-    if (_cairo_surface_is_subsurface (source))
-       source = _cairo_surface_subsurface_get_target_with_offset (source, &tx, &ty);
-    if (_cairo_surface_is_snapshot (source))
-       source = _cairo_surface_snapshot_get_target (source);
-    if (_cairo_surface_is_observer (source))
-       source = _cairo_surface_observer_get_target (source);
-    if (_cairo_surface_is_paginated (source))
-       source = _cairo_paginated_surface_get_target (source);
+    source = _cairo_pattern_get_source (pattern, &limit);
 
     extend = pattern->base.extend;
-    if (_cairo_surface_get_extents (source, &limit)) {
-       if (sample->x >= limit.x &&
-           sample->y >= limit.y &&
-           sample->x + sample->width  <= limit.x + limit.width &&
-           sample->y + sample->height <= limit.y + limit.height)
-       {
-           extend = CAIRO_EXTEND_NONE;
-       }
-       else if (extend == CAIRO_EXTEND_NONE &&
-                (sample->x + sample->width <= limit.x ||
-                 sample->x >= limit.x + limit.width ||
-                 sample->y + sample->height <= limit.y ||
-                 sample->y >= limit.y + limit.height))
-       {
-           return _pixman_transparent_image ();
-       }
-    } else
+    if (_cairo_rectangle_contains_rectangle (&limit, sample))
        extend = CAIRO_EXTEND_NONE;
-
     if (extend == CAIRO_EXTEND_NONE) {
        if (! _cairo_rectangle_intersect (&limit, sample))
            return _pixman_transparent_image ();
@@ -664,15 +739,28 @@ _pixman_image_for_recording (cairo_image_surface_t *dst,
            limit.height = ceil (y2) - limit.y;
        }
     }
+    tx = limit.x;
+    ty = limit.y;
+
+    /* XXX transformations! */
+    proxy = _cairo_surface_has_snapshot (source, &proxy_backend);
+    if (proxy != NULL) {
+       clone = cairo_surface_reference (get_proxy (proxy));
+       goto done;
+    }
 
-    if (dst->base.content == source->content)
-       clone = cairo_image_surface_create (dst->format,
-                                           limit.width, limit.height);
-    else
-       clone = _cairo_image_surface_create_with_content (source->content,
-                                                         limit.width,
-                                                         limit.height);
-    cairo_surface_set_device_offset (clone, -limit.x, -limit.y);
+    if (is_mask) {
+           clone = cairo_image_surface_create (CAIRO_FORMAT_A8,
+                                               limit.width, limit.height);
+    } else {
+       if (dst->base.content == source->content)
+           clone = cairo_image_surface_create (dst->format,
+                                               limit.width, limit.height);
+       else
+           clone = _cairo_image_surface_create_with_content (source->content,
+                                                             limit.width,
+                                                             limit.height);
+    }
 
     m = NULL;
     if (extend == CAIRO_EXTEND_NONE) {
@@ -684,15 +772,21 @@ _pixman_image_for_recording (cairo_image_surface_t *dst,
        /* XXX extract scale factor for repeating patterns */
     }
 
+    /* Handle recursion by returning future reads from the current image */
+    proxy = attach_proxy (source, clone);
     status = _cairo_recording_surface_replay_with_clip (source, m, clone, NULL);
+    detach_proxy (source, proxy);
     if (unlikely (status)) {
        cairo_surface_destroy (clone);
        return NULL;
     }
 
+done:
     pixman_image = pixman_image_ref (((cairo_image_surface_t *)clone)->pixman_image);
     cairo_surface_destroy (clone);
 
+    *ix = -limit.x;
+    *iy = -limit.y;
     if (extend != CAIRO_EXTEND_NONE) {
        if (! _pixman_image_set_properties (pixman_image,
                                            &pattern->base, extents,
@@ -700,9 +794,6 @@ _pixman_image_for_recording (cairo_image_surface_t *dst,
            pixman_image_unref (pixman_image);
            pixman_image= NULL;
        }
-    } else {
-       *ix = -limit.x;
-       *iy = -limit.y;
     }
 
     return pixman_image;
@@ -719,6 +810,8 @@ _pixman_image_for_surface (cairo_image_surface_t *dst,
     cairo_extend_t extend = pattern->base.extend;
     pixman_image_t *pixman_image;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     *ix = *iy = 0;
     pixman_image = NULL;
     if (pattern->surface->type == CAIRO_SURFACE_TYPE_RECORDING)
@@ -730,11 +823,14 @@ _pixman_image_for_surface (cairo_image_surface_t *dst,
        (! is_mask || ! pattern->base.has_component_alpha ||
         (pattern->surface->content & CAIRO_CONTENT_COLOR) == 0))
     {
+       cairo_surface_t *defer_free = NULL;
        cairo_image_surface_t *source = (cairo_image_surface_t *) pattern->surface;
        cairo_surface_type_t type;
 
-       if (_cairo_surface_is_snapshot (&source->base))
-           source = (cairo_image_surface_t *) _cairo_surface_snapshot_get_target (&source->base);
+       if (_cairo_surface_is_snapshot (&source->base)) {
+           defer_free = _cairo_surface_snapshot_get_target (&source->base);
+           source = (cairo_image_surface_t *) defer_free;
+       }
 
        type = source->base.backend->type;
        if (type == CAIRO_SURFACE_TYPE_IMAGE) {
@@ -753,26 +849,30 @@ _pixman_image_for_surface (cairo_image_surface_t *dst,
                    sample->x >= source->width ||
                    sample->y >= source->height)
                {
-                   if (extend == CAIRO_EXTEND_NONE)
+                   if (extend == CAIRO_EXTEND_NONE) {
+                       cairo_surface_destroy (defer_free);
                        return _pixman_transparent_image ();
+                   }
                }
                else
                {
                    pixman_image = _pixel_to_solid (source,
                                                    sample->x, sample->y);
-                    if (pixman_image)
+                    if (pixman_image) {
+                       cairo_surface_destroy (defer_free);
                         return pixman_image;
+                   }
                }
            }
 
 #if PIXMAN_HAS_ATOMIC_OPS
            /* avoid allocating a 'pattern' image if we can reuse the original */
-           *ix = *iy = 0;
            if (extend == CAIRO_EXTEND_NONE &&
                _cairo_matrix_is_pixman_translation (&pattern->base.matrix,
                                                     pattern->base.filter,
                                                     ix, iy))
            {
+               cairo_surface_destroy (defer_free);
                return pixman_image_ref (source->pixman_image);
            }
 #endif
@@ -782,8 +882,16 @@ _pixman_image_for_surface (cairo_image_surface_t *dst,
                                                     source->height,
                                                     (uint32_t *) source->data,
                                                     source->stride);
-           if (unlikely (pixman_image == NULL))
+           if (unlikely (pixman_image == NULL)) {
+               cairo_surface_destroy (defer_free);
                return NULL;
+           }
+
+           if (defer_free) {
+               pixman_image_set_destroy_function (pixman_image,
+                                                  _defer_free_cleanup,
+                                                  defer_free);
+           }
        } else if (type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
            cairo_surface_subsurface_t *sub;
            cairo_bool_t is_contained = FALSE;
@@ -826,23 +934,26 @@ _pixman_image_for_surface (cairo_image_surface_t *dst,
 
            /* Avoid sub-byte offsets, force a copy in that case. */
            if (PIXMAN_FORMAT_BPP (source->pixman_format) >= 8) {
-               void *data = source->data
-                   + sub->extents.x * PIXMAN_FORMAT_BPP(source->pixman_format)/8
-                   + sub->extents.y * source->stride;
-               pixman_image = pixman_image_create_bits (source->pixman_format,
-                                                        sub->extents.width,
-                                                        sub->extents.height,
-                                                        data,
-                                                        source->stride);
-               if (unlikely (pixman_image == NULL))
-                   return NULL;
+               if (is_contained) {
+                   void *data = source->data
+                       + sub->extents.x * PIXMAN_FORMAT_BPP(source->pixman_format)/8
+                       + sub->extents.y * source->stride;
+                   pixman_image = pixman_image_create_bits (source->pixman_format,
+                                                            sub->extents.width,
+                                                            sub->extents.height,
+                                                            data,
+                                                            source->stride);
+                   if (unlikely (pixman_image == NULL))
+                       return NULL;
+               } else {
+                   /* XXX for a simple translation and EXTEND_NONE we can
+                    * fix up the pattern matrix instead.
+                    */
+               }
            }
        }
     }
 
-#if PIXMAN_HAS_ATOMIC_OPS
-    *ix = *iy = 0;
-#endif
     if (pixman_image == NULL) {
        struct acquire_source_cleanup *cleanup;
        cairo_image_surface_t *image;
@@ -853,35 +964,6 @@ _pixman_image_for_surface (cairo_image_surface_t *dst,
        if (unlikely (status))
            return NULL;
 
-       if (sample->x >= 0 && sample->y >= 0 &&
-           sample->x + sample->width  <= image->width &&
-           sample->y + sample->height <= image->height)
-       {
-           extend = CAIRO_EXTEND_NONE;
-       }
-
-       if (sample->width == 1 && sample->height == 1) {
-           if (sample->x < 0 ||
-               sample->y < 0 ||
-               sample->x >= image->width ||
-               sample->y >= image->height)
-           {
-               if (extend == CAIRO_EXTEND_NONE) {
-                   pixman_image = _pixman_transparent_image ();
-                   _cairo_surface_release_source_image (pattern->surface, image, extra);
-                   return pixman_image;
-               }
-           }
-           else
-           {
-               pixman_image = _pixel_to_solid (image, sample->x, sample->y);
-                if (pixman_image) {
-                    _cairo_surface_release_source_image (pattern->surface, image, extra);
-                    return pixman_image;
-                }
-           }
-       }
-
        pixman_image = pixman_image_create_bits (image->pixman_format,
                                                 image->width,
                                                 image->height,
@@ -916,6 +998,98 @@ _pixman_image_for_surface (cairo_image_surface_t *dst,
     return pixman_image;
 }
 
+struct raster_source_cleanup {
+    const cairo_pattern_t *pattern;
+    cairo_surface_t *surface;
+    cairo_image_surface_t *image;
+    void *image_extra;
+};
+
+static void
+_raster_source_cleanup (pixman_image_t *pixman_image,
+                       void *closure)
+{
+    struct raster_source_cleanup *data = closure;
+
+    _cairo_surface_release_source_image (data->surface,
+                                        data->image,
+                                        data->image_extra);
+
+    _cairo_raster_source_pattern_release (data->pattern,
+                                         data->surface);
+
+    free (data);
+}
+
+static pixman_image_t *
+_pixman_image_for_raster (cairo_image_surface_t *dst,
+                         const cairo_raster_source_pattern_t *pattern,
+                         cairo_bool_t is_mask,
+                         const cairo_rectangle_int_t *extents,
+                         const cairo_rectangle_int_t *sample,
+                         int *ix, int *iy)
+{
+    pixman_image_t *pixman_image;
+    struct raster_source_cleanup *cleanup;
+    cairo_image_surface_t *image;
+    void *extra;
+    cairo_status_t status;
+    cairo_surface_t *surface;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    *ix = *iy = 0;
+
+    surface = _cairo_raster_source_pattern_acquire (&pattern->base,
+                                                   &dst->base, NULL);
+    if (unlikely (surface == NULL || surface->status))
+       return NULL;
+
+    status = _cairo_surface_acquire_source_image (surface, &image, &extra);
+    if (unlikely (status)) {
+       _cairo_raster_source_pattern_release (&pattern->base, surface);
+       return NULL;
+    }
+
+    assert (image->width == pattern->extents.width);
+    assert (image->height == pattern->extents.height);
+
+    pixman_image = pixman_image_create_bits (image->pixman_format,
+                                            image->width,
+                                            image->height,
+                                            (uint32_t *) image->data,
+                                            image->stride);
+    if (unlikely (pixman_image == NULL)) {
+       _cairo_surface_release_source_image (surface, image, extra);
+       _cairo_raster_source_pattern_release (&pattern->base, surface);
+       return NULL;
+    }
+
+    cleanup = malloc (sizeof (*cleanup));
+    if (unlikely (cleanup == NULL)) {
+       pixman_image_unref (pixman_image);
+       _cairo_surface_release_source_image (surface, image, extra);
+       _cairo_raster_source_pattern_release (&pattern->base, surface);
+       return NULL;
+    }
+
+    cleanup->pattern = &pattern->base;
+    cleanup->surface = surface;
+    cleanup->image = image;
+    cleanup->image_extra = extra;
+    pixman_image_set_destroy_function (pixman_image,
+                                      _raster_source_cleanup, cleanup);
+
+    if (! _pixman_image_set_properties (pixman_image,
+                                       &pattern->base, extents,
+                                       ix, iy)) {
+       pixman_image_unref (pixman_image);
+       pixman_image= NULL;
+    }
+
+    return pixman_image;
+}
+
 pixman_image_t *
 _pixman_image_for_pattern (cairo_image_surface_t *dst,
                           const cairo_pattern_t *pattern,
@@ -926,6 +1100,8 @@ _pixman_image_for_pattern (cairo_image_surface_t *dst,
 {
     *tx = *ty = 0;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (pattern == NULL)
        return _pixman_white_image ();
 
@@ -950,6 +1126,11 @@ _pixman_image_for_pattern (cairo_image_surface_t *dst,
                                          is_mask, extents, sample,
                                          tx, ty);
 
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return _pixman_image_for_raster (dst,
+                                        (const cairo_raster_source_pattern_t *) pattern,
+                                        is_mask, extents, sample,
+                                        tx, ty);
     }
 }
 
@@ -962,7 +1143,7 @@ _cairo_image_source_finish (void *abstract_surface)
     return CAIRO_STATUS_SUCCESS;
 }
 
-static const cairo_surface_backend_t cairo_image_source_backend = {
+const cairo_surface_backend_t _cairo_image_source_backend = {
     CAIRO_SURFACE_TYPE_IMAGE,
     _cairo_image_source_finish,
     NULL, /* read-only wrapper */
@@ -978,6 +1159,8 @@ _cairo_image_source_create_for_pattern (cairo_surface_t *dst,
 {
     cairo_image_source_t *source;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     source = malloc (sizeof (cairo_image_source_t));
     if (unlikely (source == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
@@ -993,7 +1176,7 @@ _cairo_image_source_create_for_pattern (cairo_surface_t *dst,
     }
 
     _cairo_surface_init (&source->base,
-                        &cairo_image_source_backend,
+                        &_cairo_image_source_backend,
                         NULL, /* device */
                         CAIRO_CONTENT_COLOR_ALPHA);
 
diff --git a/src/cairo-image-surface-inline.h b/src/cairo-image-surface-inline.h
new file mode 100644 (file)
index 0000000..95cbb99
--- /dev/null
@@ -0,0 +1,82 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2002 University of Southern California
+ * Copyright Â© 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is University of Southern
+ * California.
+ *
+ * Contributor(s):
+ *     Carl D. Worth <cworth@cworth.org>
+ */
+
+#ifndef CAIRO_IMAGE_SURFACE_INLINE_H
+#define CAIRO_IMAGE_SURFACE_INLINE_H
+
+#include "cairo-image-surface-private.h"
+
+CAIRO_BEGIN_DECLS
+
+static inline void
+_cairo_image_surface_set_parent (cairo_image_surface_t *image,
+                                cairo_surface_t *parent)
+{
+    image->parent = parent;
+}
+
+/**
+ * _cairo_surface_is_image:
+ * @surface: a #cairo_surface_t
+ *
+ * Checks if a surface is an #cairo_image_surface_t
+ *
+ * Return value: %TRUE if the surface is an image surface
+ **/
+static inline cairo_bool_t
+_cairo_surface_is_image (const cairo_surface_t *surface)
+{
+    return surface->backend == &_cairo_image_surface_backend;
+}
+
+/**
+ * _cairo_surface_is_image_source:
+ * @surface: a #cairo_surface_t
+ *
+ * Checks if a surface is an #cairo_image_source_t
+ *
+ * Return value: %TRUE if the surface is an image source
+ **/
+static inline cairo_bool_t
+_cairo_surface_is_image_source (const cairo_surface_t *surface)
+{
+    return surface->backend == &_cairo_image_source_backend;
+}
+
+CAIRO_END_DECLS
+
+#endif /* CAIRO_IMAGE_SURFACE_INLINE_H */
index 227a447..3388c64 100644 (file)
@@ -51,6 +51,20 @@ struct _cairo_image_surface {
     pixman_image_t *pixman_image;
     const cairo_compositor_t *compositor;
 
+    /* Parenting is tricky wrt lifetime tracking...
+     *
+     * One use for tracking the parent of an image surface is for
+     * create_similar_image() where we wish to create a device specific
+     * surface but return an image surface to the user. In such a case,
+     * the image may be owned by the device specific surface, its parent,
+     * but the user lifetime tracking is then performed on the image. So
+     * when the image is then finalized we call cairo_surface_destroy()
+     * on the parent. However, for normal usage where the lifetime tracking
+     * is done on the parent surface, we need to be careful to unhook
+     * the image->parent pointer before finalizing the image.
+     */
+    cairo_surface_t *parent;
+
     pixman_format_code_t pixman_format;
     cairo_format_t format;
     unsigned char *data;
@@ -64,6 +78,7 @@ struct _cairo_image_surface {
     unsigned transparency : 2;
     unsigned color : 2;
 };
+#define to_image_surface(S) ((cairo_image_surface_t *)(S))
 
 /* A wrapper for holding pixman images returned by create_for_pattern */
 typedef struct _cairo_image_source {
@@ -74,6 +89,7 @@ typedef struct _cairo_image_source {
 } cairo_image_source_t;
 
 cairo_private extern const cairo_surface_backend_t _cairo_image_surface_backend;
+cairo_private extern const cairo_surface_backend_t _cairo_image_source_backend;
 
 cairo_private const cairo_compositor_t *
 _cairo_image_mask_compositor_get (void);
@@ -84,6 +100,52 @@ _cairo_image_traps_compositor_get (void);
 cairo_private const cairo_compositor_t *
 _cairo_image_spans_compositor_get (void);
 
+#define _cairo_image_default_compositor_get _cairo_image_spans_compositor_get
+
+cairo_private cairo_int_status_t
+_cairo_image_surface_paint (void                       *abstract_surface,
+                           cairo_operator_t             op,
+                           const cairo_pattern_t       *source,
+                           const cairo_clip_t          *clip);
+
+cairo_private cairo_int_status_t
+_cairo_image_surface_mask (void                                *abstract_surface,
+                          cairo_operator_t              op,
+                          const cairo_pattern_t        *source,
+                          const cairo_pattern_t        *mask,
+                          const cairo_clip_t           *clip);
+
+cairo_private cairo_int_status_t
+_cairo_image_surface_stroke (void                      *abstract_surface,
+                            cairo_operator_t            op,
+                            const cairo_pattern_t      *source,
+                            const cairo_path_fixed_t   *path,
+                            const cairo_stroke_style_t *style,
+                            const cairo_matrix_t       *ctm,
+                            const cairo_matrix_t       *ctm_inverse,
+                            double                      tolerance,
+                            cairo_antialias_t           antialias,
+                            const cairo_clip_t         *clip);
+
+cairo_private cairo_int_status_t
+_cairo_image_surface_fill (void                                *abstract_surface,
+                          cairo_operator_t              op,
+                          const cairo_pattern_t        *source,
+                          const cairo_path_fixed_t     *path,
+                          cairo_fill_rule_t             fill_rule,
+                          double                        tolerance,
+                          cairo_antialias_t             antialias,
+                          const cairo_clip_t           *clip);
+
+cairo_private cairo_int_status_t
+_cairo_image_surface_glyphs (void                      *abstract_surface,
+                            cairo_operator_t            op,
+                            const cairo_pattern_t      *source,
+                            cairo_glyph_t              *glyphs,
+                            int                         num_glyphs,
+                            cairo_scaled_font_t        *scaled_font,
+                            const cairo_clip_t         *clip);
+
 cairo_private void
 _cairo_image_surface_init (cairo_image_surface_t *surface,
                           pixman_image_t       *pixman_image,
@@ -96,6 +158,11 @@ _cairo_image_surface_map_to_image (void *abstract_other,
 cairo_private cairo_int_status_t
 _cairo_image_surface_unmap_image (void *abstract_surface,
                                  cairo_image_surface_t *image);
+
+cairo_private cairo_surface_t *
+_cairo_image_surface_source (void                      *abstract_surface,
+                            cairo_rectangle_int_t      *extents);
+
 cairo_private cairo_status_t
 _cairo_image_surface_acquire_source_image (void                    *abstract_surface,
                                           cairo_image_surface_t  **image_out,
@@ -149,20 +216,6 @@ _pixman_image_add_tristrip (pixman_image_t *image,
                            int dst_x, int dst_y,
                            cairo_tristrip_t *strip);
 
-/**
- * _cairo_surface_is_image:
- * @surface: a #cairo_surface_t
- *
- * Checks if a surface is an #cairo_image_surface_t
- *
- * Return value: %TRUE if the surface is an image surface
- **/
-static inline cairo_bool_t
-_cairo_surface_is_image (const cairo_surface_t *surface)
-{
-    return surface->backend == &_cairo_image_surface_backend;
-}
-
 CAIRO_END_DECLS
 
 #endif /* CAIRO_IMAGE_SURFACE_PRIVATE_H */
index 6adbdd6..98f70c5 100644 (file)
@@ -45,7 +45,7 @@
 #include "cairo-compositor-private.h"
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
-#include "cairo-image-surface-private.h"
+#include "cairo-image-surface-inline.h"
 #include "cairo-paginated-private.h"
 #include "cairo-pattern-private.h"
 #include "cairo-recording-surface-private.h"
@@ -68,7 +68,7 @@
  * Image surfaces provide the ability to render to memory buffers
  * either allocated by cairo or by the calling code.  The supported
  * image formats are those defined in #cairo_format_t.
- */
+ **/
 
 /**
  * CAIRO_HAS_IMAGE_SURFACE:
@@ -77,8 +77,8 @@
  * The image surface backend is always built in.
  * This macro was added for completeness in cairo 1.8.
  *
- * @Since: 1.8
- */
+ * Since: 1.8
+ **/
 
 static cairo_bool_t
 _cairo_image_surface_is_size_valid (int width, int height)
@@ -147,6 +147,7 @@ _cairo_image_surface_init (cairo_image_surface_t *surface,
                           pixman_image_t       *pixman_image,
                           pixman_format_code_t  pixman_format)
 {
+    surface->parent = NULL;
     surface->pixman_image = pixman_image;
 
     surface->pixman_format = pixman_format;
@@ -372,6 +373,8 @@ _cairo_image_surface_create_with_pixman_format (unsigned char               *data,
  * This function always returns a valid pointer, but it will return a
  * pointer to a "nil" surface if an error such as out of memory
  * occurs. You can use cairo_surface_status() to check for this.
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_image_surface_create (cairo_format_t     format,
@@ -487,6 +490,8 @@ slim_hidden_def (cairo_format_stride_for_width);
  *
  * See cairo_surface_set_user_data() for a means of attaching a
  * destroy-notification fallback to the surface if necessary.
+ *
+ * Since: 1.0
  **/
     cairo_surface_t *
 cairo_image_surface_create_for_data (unsigned char     *data,
@@ -544,7 +549,7 @@ slim_hidden_def (cairo_image_surface_create_for_data);
  *
  * Since: 1.2
  **/
-    unsigned char *
+unsigned char *
 cairo_image_surface_get_data (cairo_surface_t *surface)
 {
     cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
@@ -568,7 +573,7 @@ slim_hidden_def (cairo_image_surface_get_data);
  *
  * Since: 1.2
  **/
-    cairo_format_t
+cairo_format_t
 cairo_image_surface_get_format (cairo_surface_t *surface)
 {
     cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
@@ -589,8 +594,10 @@ slim_hidden_def (cairo_image_surface_get_format);
  * Get the width of the image surface in pixels.
  *
  * Return value: the width of the surface in pixels.
+ *
+ * Since: 1.0
  **/
-    int
+int
 cairo_image_surface_get_width (cairo_surface_t *surface)
 {
     cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
@@ -611,8 +618,10 @@ slim_hidden_def (cairo_image_surface_get_width);
  * Get the height of the image surface in pixels.
  *
  * Return value: the height of the surface in pixels.
+ *
+ * Since: 1.0
  **/
-    int
+int
 cairo_image_surface_get_height (cairo_surface_t *surface)
 {
     cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
@@ -639,7 +648,7 @@ slim_hidden_def (cairo_image_surface_get_height);
  *
  * Since: 1.2
  **/
-    int
+int
 cairo_image_surface_get_stride (cairo_surface_t *surface)
 {
 
@@ -714,7 +723,7 @@ _cairo_format_bits_per_pixel (cairo_format_t format)
     }
 }
 
-    static cairo_surface_t *
+static cairo_surface_t *
 _cairo_image_surface_create_similar (void             *abstract_other,
                                     cairo_content_t    content,
                                     int                width,
@@ -722,6 +731,8 @@ _cairo_image_surface_create_similar (void          *abstract_other,
 {
     cairo_image_surface_t *other = abstract_other;
 
+    TRACE ((stderr, "%s (other=%u)\n", __FUNCTION__, other->base.unique_id));
+
     if (! _cairo_image_surface_is_size_valid (width, height))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
 
@@ -742,6 +753,24 @@ _cairo_image_surface_snapshot (void *abstract_surface)
     cairo_image_surface_t *image = abstract_surface;
     cairo_image_surface_t *clone;
 
+    /* If we own the image, we can simply steal the memory for the snapshot */
+    if (image->owns_data && image->base._finishing) {
+       clone = (cairo_image_surface_t *)
+           _cairo_image_surface_create_for_pixman_image (image->pixman_image,
+                                                         image->pixman_format);
+       if (unlikely (clone->base.status))
+           return &clone->base;
+
+       image->pixman_image = NULL;
+       image->owns_data = FALSE;
+
+       clone->transparency = image->transparency;
+       clone->color = image->color;
+
+       clone->owns_data = FALSE;
+       return &clone->base;
+    }
+
     clone = (cairo_image_surface_t *)
        _cairo_image_surface_create_with_pixman_format (NULL,
                                                        image->pixman_format,
@@ -810,6 +839,11 @@ _cairo_image_surface_finish (void *abstract_surface)
        surface->data = NULL;
     }
 
+    if (surface->parent) {
+       cairo_surface_destroy (surface->parent);
+       surface->parent = NULL;
+    }
+
     return CAIRO_STATUS_SUCCESS;
 }
 
@@ -819,6 +853,21 @@ _cairo_image_surface_assume_ownership_of_data (cairo_image_surface_t *surface)
     surface->owns_data = TRUE;
 }
 
+cairo_surface_t *
+_cairo_image_surface_source (void                      *abstract_surface,
+                            cairo_rectangle_int_t      *extents)
+{
+    cairo_image_surface_t *surface = abstract_surface;
+
+    if (extents) {
+       extents->x = extents->y = 0;
+       extents->width = surface->width;
+       extents->height = surface->height;
+    }
+
+    return &surface->base;
+}
+
 cairo_status_t
 _cairo_image_surface_acquire_source_image (void                    *abstract_surface,
                                           cairo_image_surface_t  **image_out,
@@ -852,18 +901,22 @@ _cairo_image_surface_get_extents (void                      *abstract_surface,
     return TRUE;
 }
 
-static cairo_int_status_t
+cairo_int_status_t
 _cairo_image_surface_paint (void                       *abstract_surface,
                            cairo_operator_t             op,
                            const cairo_pattern_t       *source,
                            const cairo_clip_t          *clip)
 {
     cairo_image_surface_t *surface = abstract_surface;
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, surface->base.unique_id));
+
     return _cairo_compositor_paint (surface->compositor,
                                    &surface->base, op, source, clip);
 }
 
-static cairo_int_status_t
+cairo_int_status_t
 _cairo_image_surface_mask (void                                *abstract_surface,
                           cairo_operator_t              op,
                           const cairo_pattern_t        *source,
@@ -871,11 +924,15 @@ _cairo_image_surface_mask (void                           *abstract_surface,
                           const cairo_clip_t           *clip)
 {
     cairo_image_surface_t *surface = abstract_surface;
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, surface->base.unique_id));
+
     return _cairo_compositor_mask (surface->compositor,
                                   &surface->base, op, source, mask, clip);
 }
 
-static cairo_int_status_t
+cairo_int_status_t
 _cairo_image_surface_stroke (void                      *abstract_surface,
                             cairo_operator_t            op,
                             const cairo_pattern_t      *source,
@@ -888,13 +945,17 @@ _cairo_image_surface_stroke (void                 *abstract_surface,
                             const cairo_clip_t         *clip)
 {
     cairo_image_surface_t *surface = abstract_surface;
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, surface->base.unique_id));
+
     return _cairo_compositor_stroke (surface->compositor, &surface->base,
                                     op, source, path,
                                     style, ctm, ctm_inverse,
                                     tolerance, antialias, clip);
 }
 
-static cairo_int_status_t
+cairo_int_status_t
 _cairo_image_surface_fill (void                                *abstract_surface,
                           cairo_operator_t              op,
                           const cairo_pattern_t        *source,
@@ -905,13 +966,17 @@ _cairo_image_surface_fill (void                           *abstract_surface,
                           const cairo_clip_t           *clip)
 {
     cairo_image_surface_t *surface = abstract_surface;
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, surface->base.unique_id));
+
     return _cairo_compositor_fill (surface->compositor, &surface->base,
                                   op, source, path,
                                   fill_rule, tolerance, antialias,
                                   clip);
 }
 
-static cairo_int_status_t
+cairo_int_status_t
 _cairo_image_surface_glyphs (void                      *abstract_surface,
                             cairo_operator_t            op,
                             const cairo_pattern_t      *source,
@@ -921,6 +986,10 @@ _cairo_image_surface_glyphs (void                  *abstract_surface,
                             const cairo_clip_t         *clip)
 {
     cairo_image_surface_t *surface = abstract_surface;
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, surface->base.unique_id));
+
     return _cairo_compositor_glyphs (surface->compositor, &surface->base,
                                     op, source,
                                     glyphs, num_glyphs, scaled_font,
@@ -948,6 +1017,7 @@ const cairo_surface_backend_t _cairo_image_surface_backend = {
     _cairo_image_surface_map_to_image,
     _cairo_image_surface_unmap_image,
 
+    _cairo_image_surface_source,
     _cairo_image_surface_acquire_source_image,
     _cairo_image_surface_release_source_image,
     _cairo_image_surface_snapshot,
@@ -959,7 +1029,7 @@ const cairo_surface_backend_t _cairo_image_surface_backend = {
     _cairo_image_surface_get_font_options,
 
     NULL, /* flush */
-    NULL, /* mark dirty */
+    NULL,
 
     _cairo_image_surface_paint,
     _cairo_image_surface_mask,
@@ -1080,9 +1150,12 @@ _cairo_image_analyze_color (cairo_image_surface_t      *image)
     if (image->color != CAIRO_IMAGE_UNKNOWN_COLOR)
        return image->color;
 
-    if (image->format == CAIRO_FORMAT_A1 || image->format == CAIRO_FORMAT_A8)
+    if (image->format == CAIRO_FORMAT_A1)
        return image->color = CAIRO_IMAGE_IS_MONOCHROME;
 
+    if (image->format == CAIRO_FORMAT_A8)
+       return image->color = CAIRO_IMAGE_IS_GRAYSCALE;
+
     if (image->format == CAIRO_FORMAT_ARGB32) {
        image->color = CAIRO_IMAGE_IS_MONOCHROME;
        for (y = 0; y < image->height; y++) {
diff --git a/src/cairo-list-inline.h b/src/cairo-list-inline.h
new file mode 100644 (file)
index 0000000..d00f40e
--- /dev/null
@@ -0,0 +1,209 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2009 Chris Wilson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson.
+ *
+ * Contributor(s):
+ *      Chris Wilson <chris@chris-wilson.co.uk>
+ *
+ */
+
+#ifndef CAIRO_LIST_INLINE_H
+#define CAIRO_LIST_INLINE_H
+
+#include "cairo-list-private.h"
+
+#define cairo_list_entry(ptr, type, member) \
+       cairo_container_of(ptr, type, member)
+
+#define cairo_list_first_entry(ptr, type, member) \
+       cairo_list_entry((ptr)->next, type, member)
+
+#define cairo_list_last_entry(ptr, type, member) \
+       cairo_list_entry((ptr)->prev, type, member)
+
+#define cairo_list_foreach(pos, head)                  \
+       for (pos = (head)->next; pos != (head); pos = pos->next)
+
+#define cairo_list_foreach_entry(pos, type, head, member)              \
+       for (pos = cairo_list_entry((head)->next, type, member);\
+            &pos->member != (head);                                    \
+            pos = cairo_list_entry(pos->member.next, type, member))
+
+#define cairo_list_foreach_entry_safe(pos, n, type, head, member)      \
+       for (pos = cairo_list_entry ((head)->next, type, member),\
+            n = cairo_list_entry (pos->member.next, type, member);\
+            &pos->member != (head);                                    \
+            pos = n, n = cairo_list_entry (n->member.next, type, member))
+
+#define cairo_list_foreach_entry_reverse(pos, type, head, member)      \
+       for (pos = cairo_list_entry((head)->prev, type, member);\
+            &pos->member != (head);                                    \
+            pos = cairo_list_entry(pos->member.prev, type, member))
+
+#define cairo_list_foreach_entry_reverse_safe(pos, n, type, head, member)      \
+       for (pos = cairo_list_entry((head)->prev, type, member),\
+            n = cairo_list_entry (pos->member.prev, type, member);\
+            &pos->member != (head);                                    \
+            pos = n, n = cairo_list_entry (n->member.prev, type, member))
+
+#ifdef CAIRO_LIST_DEBUG
+static inline void
+_cairo_list_validate (const cairo_list_t *link)
+{
+    assert (link->next->prev == link);
+    assert (link->prev->next == link);
+}
+static inline void
+cairo_list_validate (const cairo_list_t *head)
+{
+    cairo_list_t *link;
+
+    cairo_list_foreach (link, head)
+       _cairo_list_validate (link);
+}
+static inline cairo_bool_t
+cairo_list_is_empty (const cairo_list_t *head);
+static inline void
+cairo_list_validate_is_empty (const cairo_list_t *head)
+{
+    assert (head->next == NULL || (cairo_list_is_empty (head) && head->next == head->prev));
+}
+#else
+#define _cairo_list_validate(link)
+#define cairo_list_validate(head)
+#define cairo_list_validate_is_empty(head)
+#endif
+
+static inline void
+cairo_list_init (cairo_list_t *entry)
+{
+    entry->next = entry;
+    entry->prev = entry;
+}
+
+static inline void
+__cairo_list_add (cairo_list_t *entry,
+                 cairo_list_t *prev,
+                 cairo_list_t *next)
+{
+    next->prev = entry;
+    entry->next = next;
+    entry->prev = prev;
+    prev->next = entry;
+}
+
+static inline void
+cairo_list_add (cairo_list_t *entry, cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    cairo_list_validate_is_empty (entry);
+    __cairo_list_add (entry, head, head->next);
+    cairo_list_validate (head);
+}
+
+static inline void
+cairo_list_add_tail (cairo_list_t *entry, cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    cairo_list_validate_is_empty (entry);
+    __cairo_list_add (entry, head->prev, head);
+    cairo_list_validate (head);
+}
+
+static inline void
+__cairo_list_del (cairo_list_t *prev, cairo_list_t *next)
+{
+    next->prev = prev;
+    prev->next = next;
+}
+
+static inline void
+cairo_list_del (cairo_list_t *entry)
+{
+    __cairo_list_del (entry->prev, entry->next);
+    cairo_list_init (entry);
+}
+
+static inline void
+cairo_list_move (cairo_list_t *entry, cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    __cairo_list_del (entry->prev, entry->next);
+    __cairo_list_add (entry, head, head->next);
+    cairo_list_validate (head);
+}
+
+static inline void
+cairo_list_move_tail (cairo_list_t *entry, cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    __cairo_list_del (entry->prev, entry->next);
+    __cairo_list_add (entry, head->prev, head);
+    cairo_list_validate (head);
+}
+
+static inline void
+cairo_list_swap (cairo_list_t *entry, cairo_list_t *other)
+{
+    __cairo_list_add (entry, other->prev, other->next);
+    cairo_list_init (other);
+}
+
+static inline cairo_bool_t
+cairo_list_is_first (const cairo_list_t *entry,
+                    const cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    return entry->prev == head;
+}
+
+static inline cairo_bool_t
+cairo_list_is_last (const cairo_list_t *entry,
+                   const cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    return entry->next == head;
+}
+
+static inline cairo_bool_t
+cairo_list_is_empty (const cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    return head->next == head;
+}
+
+static inline cairo_bool_t
+cairo_list_is_singular (const cairo_list_t *head)
+{
+    cairo_list_validate (head);
+    return head->next == head || head->next == head->prev;
+}
+
+#endif /* CAIRO_LIST_INLINE_H */
index ddfd0a4..9f39b66 100644 (file)
@@ -45,171 +45,4 @@ typedef struct _cairo_list {
     struct _cairo_list *next, *prev;
 } cairo_list_t;
 
-#define cairo_list_entry(ptr, type, member) \
-       cairo_container_of(ptr, type, member)
-
-#define cairo_list_first_entry(ptr, type, member) \
-       cairo_list_entry((ptr)->next, type, member)
-
-#define cairo_list_last_entry(ptr, type, member) \
-       cairo_list_entry((ptr)->prev, type, member)
-
-#define cairo_list_foreach(pos, head)                  \
-       for (pos = (head)->next; pos != (head); pos = pos->next)
-
-#define cairo_list_foreach_entry(pos, type, head, member)              \
-       for (pos = cairo_list_entry((head)->next, type, member);\
-            &pos->member != (head);                                    \
-            pos = cairo_list_entry(pos->member.next, type, member))
-
-#define cairo_list_foreach_entry_safe(pos, n, type, head, member)      \
-       for (pos = cairo_list_entry ((head)->next, type, member),\
-            n = cairo_list_entry (pos->member.next, type, member);\
-            &pos->member != (head);                                    \
-            pos = n, n = cairo_list_entry (n->member.next, type, member))
-
-#define cairo_list_foreach_entry_reverse(pos, type, head, member)      \
-       for (pos = cairo_list_entry((head)->prev, type, member);\
-            &pos->member != (head);                                    \
-            pos = cairo_list_entry(pos->member.prev, type, member))
-
-#define cairo_list_foreach_entry_reverse_safe(pos, n, type, head, member)      \
-       for (pos = cairo_list_entry((head)->prev, type, member),\
-            n = cairo_list_entry (pos->member.prev, type, member);\
-            &pos->member != (head);                                    \
-            pos = n, n = cairo_list_entry (n->member.prev, type, member))
-
-#ifdef CAIRO_LIST_DEBUG
-static inline void
-_cairo_list_validate (const cairo_list_t *link)
-{
-    assert (link->next->prev == link);
-    assert (link->prev->next == link);
-}
-static inline void
-cairo_list_validate (const cairo_list_t *head)
-{
-    cairo_list_t *link;
-
-    cairo_list_foreach (link, head)
-       _cairo_list_validate (link);
-}
-static inline cairo_bool_t
-cairo_list_is_empty (const cairo_list_t *head);
-static inline void
-cairo_list_validate_is_empty (const cairo_list_t *head)
-{
-    assert (head->next == NULL || (cairo_list_is_empty (head) && head->next == head->prev));
-}
-#else
-#define _cairo_list_validate(link)
-#define cairo_list_validate(head)
-#define cairo_list_validate_is_empty(head)
-#endif
-
-static inline void
-cairo_list_init (cairo_list_t *entry)
-{
-    entry->next = entry;
-    entry->prev = entry;
-}
-
-static inline void
-__cairo_list_add (cairo_list_t *entry,
-                 cairo_list_t *prev,
-                 cairo_list_t *next)
-{
-    next->prev = entry;
-    entry->next = next;
-    entry->prev = prev;
-    prev->next = entry;
-}
-
-static inline void
-cairo_list_add (cairo_list_t *entry, cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    cairo_list_validate_is_empty (entry);
-    __cairo_list_add (entry, head, head->next);
-    cairo_list_validate (head);
-}
-
-static inline void
-cairo_list_add_tail (cairo_list_t *entry, cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    cairo_list_validate_is_empty (entry);
-    __cairo_list_add (entry, head->prev, head);
-    cairo_list_validate (head);
-}
-
-static inline void
-__cairo_list_del (cairo_list_t *prev, cairo_list_t *next)
-{
-    next->prev = prev;
-    prev->next = next;
-}
-
-static inline void
-cairo_list_del (cairo_list_t *entry)
-{
-    __cairo_list_del (entry->prev, entry->next);
-    cairo_list_init (entry);
-}
-
-static inline void
-cairo_list_move (cairo_list_t *entry, cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    __cairo_list_del (entry->prev, entry->next);
-    __cairo_list_add (entry, head, head->next);
-    cairo_list_validate (head);
-}
-
-static inline void
-cairo_list_move_tail (cairo_list_t *entry, cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    __cairo_list_del (entry->prev, entry->next);
-    __cairo_list_add (entry, head->prev, head);
-    cairo_list_validate (head);
-}
-
-static inline void
-cairo_list_swap (cairo_list_t *entry, cairo_list_t *other)
-{
-    __cairo_list_add (entry, other->prev, other->next);
-    cairo_list_init (other);
-}
-
-static inline cairo_bool_t
-cairo_list_is_first (const cairo_list_t *entry,
-                    const cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    return entry->prev == head;
-}
-
-static inline cairo_bool_t
-cairo_list_is_last (const cairo_list_t *entry,
-                   const cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    return entry->next == head;
-}
-
-static inline cairo_bool_t
-cairo_list_is_empty (const cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    return head->next == head;
-}
-
-static inline cairo_bool_t
-cairo_list_is_singular (const cairo_list_t *head)
-{
-    cairo_list_validate (head);
-    return head->next == head || head->next == head->prev;
-}
-
 #endif /* CAIRO_LIST_PRIVATE_H */
index e5acf16..1e2c67f 100644 (file)
  *
  * Return value: A pointer to the newly allocated memory, or %NULL in
  * case of malloc() failure or size is 0.
- */
+ **/
 
 #define _cairo_malloc(size) \
    ((size) ? malloc((unsigned) (size)) : NULL)
 
 /**
  * _cairo_malloc_ab:
- * @n: number of elements to allocate
+ * @a: number of elements to allocate
  * @size: size of each element
  *
- * Allocates @n*@size memory using _cairo_malloc(), taking care to not
+ * Allocates @a*@size memory using _cairo_malloc(), taking care to not
  * overflow when doing the multiplication.  Behaves much like
  * calloc(), except that the returned memory is not set to zero.
  * The memory should be freed using free().
@@ -77,7 +77,7 @@
  *
  * Return value: A pointer to the newly allocated memory, or %NULL in
  * case of malloc() failure or overflow.
- */
+ **/
 
 #define _cairo_malloc_ab(a, size) \
   ((size) && (unsigned) (a) >= INT32_MAX / (unsigned) (size) ? NULL : \
 /**
  * _cairo_realloc_ab:
  * @ptr: original pointer to block of memory to be resized
- * @n: number of elements to allocate
+ * @a: number of elements to allocate
  * @size: size of each element
  *
- * Reallocates @ptr a block of @n*@size memory using realloc(), taking
+ * Reallocates @ptr a block of @a*@size memory using realloc(), taking
  * care to not overflow when doing the multiplication.  The memory
  * should be freed using free().
  *
@@ -99,7 +99,7 @@
  * Return value: A pointer to the newly allocated memory, or %NULL in
  * case of realloc() failure or overflow (whereupon the original block
  * of memory * is left untouched).
- */
+ **/
 
 #define _cairo_realloc_ab(ptr, a, size) \
   ((size) && (unsigned) (a) >= INT32_MAX / (unsigned) (size) ? NULL : \
 
 /**
  * _cairo_malloc_abc:
- * @n: first factor of number of elements to allocate
+ * @a: first factor of number of elements to allocate
  * @b: second factor of number of elements to allocate
  * @size: size of each element
  *
- * Allocates @n*@b*@size memory using _cairo_malloc(), taking care to not
+ * Allocates @a*@b*@size memory using _cairo_malloc(), taking care to not
  * overflow when doing the multiplication.  Behaves like
  * _cairo_malloc_ab().  The memory should be freed using free().
  *
  *
  * Return value: A pointer to the newly allocated memory, or %NULL in
  * case of malloc() failure or overflow.
- */
+ **/
 
 #define _cairo_malloc_abc(a, b, size) \
   ((b) && (unsigned) (a) >= INT32_MAX / (unsigned) (b) ? NULL : \
 
 /**
  * _cairo_malloc_ab_plus_c:
- * @n: number of elements to allocate
+ * @a: number of elements to allocate
  * @size: size of each element
- * @k: additional size to allocate
+ * @c: additional size to allocate
  *
- * Allocates @n*@ksize+@k memory using _cairo_malloc(), taking care to not
- * overflow when doing the arithmetic.  Behaves like
+ * Allocates @a*@size+@c memory using _cairo_malloc(), taking care to not
+ * overflow when doing the arithmetic.  Behaves similar to
  * _cairo_malloc_ab().  The memory should be freed using free().
  *
  * Return value: A pointer to the newly allocated memory, or %NULL in
  * case of malloc() failure or overflow.
- */
+ **/
 
-#define _cairo_malloc_ab_plus_c(n, size, k) \
-  ((size) && (unsigned) (n) >= INT32_MAX / (unsigned) (size) ? NULL : \
-   (unsigned) (k) >= INT32_MAX - (unsigned) (n) * (unsigned) (size) ? NULL : \
-   _cairo_malloc((unsigned) (n) * (unsigned) (size) + (unsigned) (k)))
+#define _cairo_malloc_ab_plus_c(a, size, c) \
+  ((size) && (unsigned) (a) >= INT32_MAX / (unsigned) (size) ? NULL : \
+   (unsigned) (c) >= INT32_MAX - (unsigned) (a) * (unsigned) (size) ? NULL : \
+   _cairo_malloc((unsigned) (a) * (unsigned) (size) + (unsigned) (c)))
 
 #endif /* CAIRO_MALLOC_PRIVATE_H */
index b34ffa2..7976a79 100644 (file)
 
 #include "cairoint.h"
 
+#include "cairo-clip-inline.h"
 #include "cairo-compositor-private.h"
 #include "cairo-image-surface-private.h"
-#include "cairo-pattern-private.h"
+#include "cairo-pattern-inline.h"
 #include "cairo-region-private.h"
 #include "cairo-surface-observer-private.h"
 #include "cairo-surface-offset-private.h"
@@ -162,21 +163,39 @@ create_composite_mask (const cairo_mask_compositor_t *compositor,
     struct blt_in info;
     int i;
 
-    surface = _cairo_surface_create_similar_solid (dst,
-                                                  CAIRO_CONTENT_ALPHA,
-                                                  extents->bounded.width,
-                                                  extents->bounded.height,
-                                                  CAIRO_COLOR_TRANSPARENT);
+    surface = _cairo_surface_create_similar_scratch (dst, CAIRO_CONTENT_ALPHA,
+                                                    extents->bounded.width,
+                                                    extents->bounded.height);
     if (unlikely (surface->status))
        return surface;
 
+    status = compositor->acquire (surface);
+    if (unlikely (status)) {
+       cairo_surface_destroy (surface);
+       return _cairo_surface_create_in_error (status);
+    }
+
+    if (!surface->is_clear) {
+       cairo_rectangle_int_t rect;
+
+       rect.x = rect.y = 0;
+       rect.width = extents->bounded.width;
+       rect.height = extents->bounded.height;
+
+       status = compositor->fill_rectangles (surface, CAIRO_OPERATOR_CLEAR,
+                                             CAIRO_COLOR_TRANSPARENT,
+                                             &rect, 1);
+       if (unlikely (status))
+           goto error;
+    }
+
     if (mask_func) {
        status = mask_func (compositor, surface, draw_closure,
                            CAIRO_OPERATOR_SOURCE, NULL, NULL,
                            extents->bounded.x, extents->bounded.y,
                            &extents->bounded, extents->clip);
        if (likely (status != CAIRO_INT_STATUS_UNSUPPORTED))
-           return surface;
+           goto out;
     }
 
     /* Is it worth setting the clip region here? */
@@ -184,10 +203,8 @@ create_composite_mask (const cairo_mask_compositor_t *compositor,
                        CAIRO_OPERATOR_ADD, NULL, NULL,
                        extents->bounded.x, extents->bounded.y,
                        &extents->bounded, NULL);
-    if (unlikely (status)) {
-       cairo_surface_destroy (surface);
-       return _cairo_surface_create_in_error (status);
-    }
+    if (unlikely (status))
+       goto error;
 
     info.compositor = compositor;
     info.dst = surface;
@@ -209,12 +226,21 @@ create_composite_mask (const cairo_mask_compositor_t *compositor,
        status = _cairo_clip_combine_with_surface (extents->clip, surface,
                                                   extents->bounded.x,
                                                   extents->bounded.y);
-       if (unlikely (status)) {
-           cairo_surface_destroy (surface);
-           return _cairo_surface_create_in_error (status);
-       }
+       if (unlikely (status))
+           goto error;
     }
 
+out:
+    compositor->release (surface);
+    surface->is_clear = FALSE;
+    return surface;
+
+error:
+    compositor->release (surface);
+    if (status != CAIRO_INT_STATUS_NOTHING_TO_DO) {
+       cairo_surface_destroy (surface);
+       surface = _cairo_surface_create_in_error (status);
+    }
     return surface;
 }
 
@@ -778,39 +804,30 @@ upload_boxes (const cairo_mask_compositor_t *compositor,
 {
     cairo_surface_t *dst = extents->surface;
     const cairo_pattern_t *source = &extents->source_pattern.base;
-    const cairo_surface_pattern_t *pattern;
     cairo_surface_t *src;
     cairo_rectangle_int_t limit;
     cairo_int_status_t status;
     int tx, ty;
 
-    pattern = (const cairo_surface_pattern_t *) source;
-    src = pattern->surface;
+    src = _cairo_pattern_get_source ((cairo_surface_pattern_t *)source, &limit);
     if (!(src->type == CAIRO_SURFACE_TYPE_IMAGE || src->type == dst->type))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
     if (! _cairo_matrix_is_integer_translation (&source->matrix, &tx, &ty))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    if (_cairo_surface_is_snapshot (src))
-       src = _cairo_surface_snapshot_get_target (src);
-    if (_cairo_surface_is_observer (src))
-       src = _cairo_surface_observer_get_target (src);
-    if (_cairo_surface_is_subsurface (src)) {
-       _cairo_surface_subsurface_offset (src, &tx, &ty);
-       src = _cairo_surface_subsurface_get_target (src);
-    }
-
     /* Check that the data is entirely within the image */
-    if (extents->bounded.x + tx < 0 || extents->bounded.y + ty < 0)
+    if (extents->bounded.x + tx < limit.x || extents->bounded.y + ty < limit.y)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    _cairo_surface_get_extents (pattern->surface, &limit);
-    if (extents->bounded.x + extents->bounded.width  + tx > limit.width ||
-       extents->bounded.y + extents->bounded.height + ty > limit.height)
+    if (extents->bounded.x + extents->bounded.width  + tx > limit.x + limit.width ||
+       extents->bounded.y + extents->bounded.height + ty > limit.y + limit.height)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    if (pattern->surface->type == CAIRO_SURFACE_TYPE_IMAGE)
+    tx += limit.x;
+    ty += limit.y;
+
+    if (src->type == CAIRO_SURFACE_TYPE_IMAGE)
        status = compositor->draw_image_boxes (dst,
                                               (cairo_image_surface_t *)src,
                                               boxes, tx, ty);
index 2521135..ba975be 100644 (file)
@@ -67,7 +67,7 @@
  * #cairo_matrix_t, defines the transformation from user-space
  * coordinates to device-space coordinates. See cairo_get_matrix() and
  * cairo_set_matrix().
- */
+ **/
 
 static void
 _cairo_matrix_scalar_multiply (cairo_matrix_t *matrix, double scalar);
@@ -80,6 +80,8 @@ _cairo_matrix_compute_adjoint (cairo_matrix_t *matrix);
  * @matrix: a #cairo_matrix_t
  *
  * Modifies @matrix to be an identity transformation.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_init_identity (cairo_matrix_t *matrix)
@@ -108,6 +110,8 @@ slim_hidden_def(cairo_matrix_init_identity);
  *  x_new = xx * x + xy * y + x0;
  *  y_new = yx * x + yy * y + y0;
  * </programlisting>
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_init (cairo_matrix_t *matrix,
@@ -168,6 +172,8 @@ _cairo_matrix_get_affine (const cairo_matrix_t *matrix,
  *
  * Initializes @matrix to a transformation that translates by @tx and
  * @ty in the X and Y dimensions, respectively.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_init_translate (cairo_matrix_t *matrix,
@@ -190,6 +196,8 @@ slim_hidden_def(cairo_matrix_init_translate);
  * @matrix. The effect of the new transformation is to first translate
  * the coordinates by @tx and @ty, then apply the original transformation
  * to the coordinates.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_translate (cairo_matrix_t *matrix, double tx, double ty)
@@ -210,6 +218,8 @@ slim_hidden_def (cairo_matrix_translate);
  *
  * Initializes @matrix to a transformation that scales by @sx and @sy
  * in the X and Y dimensions, respectively.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_init_scale (cairo_matrix_t *matrix,
@@ -231,6 +241,8 @@ slim_hidden_def(cairo_matrix_init_scale);
  * Applies scaling by @sx, @sy to the transformation in @matrix. The
  * effect of the new transformation is to first scale the coordinates
  * by @sx and @sy, then apply the original transformation to the coordinates.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_scale (cairo_matrix_t *matrix, double sx, double sy)
@@ -253,6 +265,8 @@ slim_hidden_def(cairo_matrix_scale);
  * direction.
  *
  * Initialized @matrix to a transformation that rotates by @radians.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_init_rotate (cairo_matrix_t *matrix,
@@ -284,6 +298,8 @@ slim_hidden_def(cairo_matrix_init_rotate);
  * @matrix. The effect of the new transformation is to first rotate the
  * coordinates by @radians, then apply the original transformation
  * to the coordinates.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_rotate (cairo_matrix_t *matrix, double radians)
@@ -308,6 +324,8 @@ cairo_matrix_rotate (cairo_matrix_t *matrix, double radians)
  * coordinates.
  *
  * It is allowable for @result to be identical to either @a or @b.
+ *
+ * Since: 1.0
  **/
 /*
  * XXX: The ordering of the arguments to this function corresponds
@@ -333,6 +351,21 @@ cairo_matrix_multiply (cairo_matrix_t *result, const cairo_matrix_t *a, const ca
 }
 slim_hidden_def(cairo_matrix_multiply);
 
+void
+_cairo_matrix_multiply (cairo_matrix_t *r,
+                       const cairo_matrix_t *a,
+                       const cairo_matrix_t *b)
+{
+    r->xx = a->xx * b->xx + a->yx * b->xy;
+    r->yx = a->xx * b->yx + a->yx * b->yy;
+
+    r->xy = a->xy * b->xx + a->yy * b->xy;
+    r->yy = a->xy * b->yx + a->yy * b->yy;
+
+    r->x0 = a->x0 * b->xx + a->y0 * b->xy + b->x0;
+    r->y0 = a->x0 * b->yx + a->y0 * b->yy + b->y0;
+}
+
 /**
  * cairo_matrix_transform_distance:
  * @matrix: a #cairo_matrix_t
@@ -353,6 +386,8 @@ slim_hidden_def(cairo_matrix_multiply);
  * always transforms to the same vector. If (@x1,@y1) transforms
  * to (@x2,@y2) then (@x1+@dx1,@y1+@dy1) will transform to
  * (@x1+@dx2,@y1+@dy2) for all values of @x1 and @x2.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_transform_distance (const cairo_matrix_t *matrix, double *dx, double *dy)
@@ -374,6 +409,8 @@ slim_hidden_def(cairo_matrix_transform_distance);
  * @y: Y position. An in/out parameter
  *
  * Transforms the point (@x, @y) by @matrix.
+ *
+ * Since: 1.0
  **/
 void
 cairo_matrix_transform_point (const cairo_matrix_t *matrix, double *x, double *y)
@@ -548,6 +585,8 @@ _cairo_matrix_compute_adjoint (cairo_matrix_t *matrix)
  * Returns: If @matrix has an inverse, modifies @matrix to
  *  be the inverse matrix and returns %CAIRO_STATUS_SUCCESS. Otherwise,
  *  returns %CAIRO_STATUS_INVALID_MATRIX.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_matrix_invert (cairo_matrix_t *matrix)
@@ -686,21 +725,6 @@ _cairo_matrix_compute_basis_scale_factors (const cairo_matrix_t *matrix,
 }
 
 cairo_bool_t
-_cairo_matrix_is_identity (const cairo_matrix_t *matrix)
-{
-    return (matrix->xx == 1.0 && matrix->yx == 0.0 &&
-           matrix->xy == 0.0 && matrix->yy == 1.0 &&
-           matrix->x0 == 0.0 && matrix->y0 == 0.0);
-}
-
-cairo_bool_t
-_cairo_matrix_is_translation (const cairo_matrix_t *matrix)
-{
-    return (matrix->xx == 1.0 && matrix->yx == 0.0 &&
-           matrix->xy == 0.0 && matrix->yy == 1.0);
-}
-
-cairo_bool_t
 _cairo_matrix_is_integer_translation (const cairo_matrix_t *matrix,
                                      int *itx, int *ity)
 {
index 82b16e7..6f0dd66 100644 (file)
@@ -333,7 +333,7 @@ fd_fixed_fwd (int32_t f[4])
  *
  *  max(|B'(t)|) <= 3 max (|p1-p0|, |p2-p0|/2, |p3-p1|/2, |p3-p2|)
  *
- * So, to guarantee a maximum step lenght of 1/sqrt(2) we must do:
+ * So, to guarantee a maximum step length of 1/sqrt(2) we must do:
  *
  *   3 max (|p1-p0|, |p2-p0|/2, |p3-p1|/2, |p3-p2|) sqrt(2) steps
  */
index 27c264b..bb37e1a 100644 (file)
@@ -62,7 +62,7 @@ COMPILE_TIME_ASSERT (CAIRO_INT_STATUS_LAST_STATUS <= 127);
  * the mean time, it is safe to call all cairo functions normally even if the
  * underlying object is in an error status.  This means that no error handling
  * code is required before or after each individual cairo function call.
- */
+ **/
 
 /* Public stuff */
 
@@ -73,7 +73,9 @@ COMPILE_TIME_ASSERT (CAIRO_INT_STATUS_LAST_STATUS <= 127);
  * Provides a human-readable description of a #cairo_status_t.
  *
  * Returns: a string representation of the status
- */
+ *
+ * Since: 1.0
+ **/
 const char *
 cairo_status_to_string (cairo_status_t status)
 {
@@ -180,7 +182,7 @@ cairo_status_to_string (cairo_status_t status)
  *          freed using cairo_glyph_free()
  *
  * Since: 1.8
- */
+ **/
 cairo_glyph_t *
 cairo_glyph_allocate (int num_glyphs)
 {
@@ -203,7 +205,7 @@ slim_hidden_def (cairo_glyph_allocate);
  * for glyphs.
  *
  * Since: 1.8
- */
+ **/
 void
 cairo_glyph_free (cairo_glyph_t *glyphs)
 {
@@ -230,7 +232,7 @@ slim_hidden_def (cairo_glyph_free);
  *          freed using cairo_text_cluster_free()
  *
  * Since: 1.8
- */
+ **/
 cairo_text_cluster_t *
 cairo_text_cluster_allocate (int num_clusters)
 {
@@ -253,7 +255,7 @@ slim_hidden_def (cairo_text_cluster_allocate);
  * for text clusters.
  *
  * Since: 1.8
- */
+ **/
 void
 cairo_text_cluster_free (cairo_text_cluster_t *clusters)
 {
@@ -281,7 +283,7 @@ slim_hidden_def (cairo_text_cluster_free);
  *               %CAIRO_STATUS_INVALID_CLUSTERS on error.
  *               The error is either invalid UTF-8 input,
  *               or bad cluster mapping.
- */
+ **/
 cairo_status_t
 _cairo_validate_text_clusters (const char                 *utf8,
                               int                          utf8_len,
index a617f48..2a9546c 100644 (file)
@@ -200,8 +200,8 @@ polygon_add_edge (struct polygon *polygon,
        e->x = floored_muldivrem (ytop * CAIRO_FIXED_ONE + CAIRO_FIXED_FRAC_MASK/2 - edge->line.p1.y,
                                  dx, dy);
        e->x.quo += edge->line.p1.x;
-       e->x.rem -= dy;
     }
+    e->x.rem -= dy;
 
     _polygon_insert_edge_into_its_y_bucket (polygon, e, ytop);
 }
@@ -337,11 +337,13 @@ row (struct mono_scan_converter *c, unsigned int mask)
        int xend = I(edge->x.quo);
 
        if (--edge->height_left) {
-           edge->x.quo += edge->dxdy.quo;
-           edge->x.rem += edge->dxdy.rem;
-           if (edge->x.rem >= 0) {
-               ++edge->x.quo;
-               edge->x.rem -= edge->dy;
+           if (!edge->vertical) {
+               edge->x.quo += edge->dxdy.quo;
+               edge->x.rem += edge->dxdy.rem;
+               if (edge->x.rem >= 0) {
+                   ++edge->x.quo;
+                   edge->x.rem -= edge->dy;
+               }
            }
 
            if (edge->x.quo < prev_x) {
@@ -390,13 +392,15 @@ _mono_scan_converter_init(struct mono_scan_converter *c,
                          int xmax, int ymax)
 {
     cairo_status_t status;
+    int max_num_spans;
 
     status = polygon_init (c->polygon, ymin, ymax);
     if  (unlikely (status))
        return status;
 
-    if (xmax - xmin > ARRAY_LENGTH(c->spans_embedded)) {
-       c->spans = _cairo_malloc_ab (xmax - xmin,
+    max_num_spans = xmax - xmin + 1;
+    if (max_num_spans > ARRAY_LENGTH(c->spans_embedded)) {
+       c->spans = _cairo_malloc_ab (max_num_spans,
                                     sizeof (cairo_half_open_span_t));
        if (unlikely (c->spans == NULL)) {
            polygon_fini (c->polygon);
index 7c7b69c..36d6b93 100644 (file)
@@ -36,6 +36,8 @@
 
 #include "cairoint.h"
 
+#include "cairo-list-inline.h"
+
 void
 _cairo_observers_notify (cairo_list_t *observers, void *arg)
 {
index 51171fa..19646fb 100644 (file)
@@ -786,7 +786,7 @@ cairo_os2_surface_create (HPS hps_client_window,
 
  error_exit:
 
-    /* This point will only be reached if an error occured */
+    /* This point will only be reached if an error occurred */
 
     if (local_os2_surface) {
         if (local_os2_surface->pixels)
@@ -1394,6 +1394,7 @@ static const cairo_surface_backend_t cairo_os2_surface_backend = {
     _cairo_os2_surface_map_to_image,
     _cairo_os2_surface_unmap_image,
 
+    _cairo_surface_default_source,
     _cairo_os2_surface_acquire_source_image,
     _cairo_os2_surface_release_source_image,
     NULL, /* snapshot */
index 0418e67..fe9ccee 100644 (file)
@@ -50,7 +50,7 @@
 #include "cairo-analysis-surface-private.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
-#include "cairo-surface-subsurface-private.h"
+#include "cairo-surface-subsurface-inline.h"
 
 static const cairo_surface_backend_t cairo_paginated_surface_backend;
 
@@ -242,6 +242,14 @@ _cairo_paginated_surface_create_image_surface (void               *abstract_surface,
     return image;
 }
 
+static cairo_surface_t *
+_cairo_paginated_surface_source (void         *abstract_surface,
+                                cairo_rectangle_int_t *extents)
+{
+    cairo_paginated_surface_t *surface = abstract_surface;
+    return _cairo_surface_get_source (surface->target, extents);
+}
+
 static cairo_status_t
 _cairo_paginated_surface_acquire_source_image (void           *abstract_surface,
                                               cairo_image_surface_t **image_out,
@@ -640,6 +648,17 @@ _cairo_paginated_surface_show_text_glyphs (void                          *abstract_surface,
                                            clip);
 }
 
+static const char **
+_cairo_paginated_surface_get_supported_mime_types (void *abstract_surface)
+{
+    cairo_paginated_surface_t *surface = abstract_surface;
+
+    if (surface->target->backend->get_supported_mime_types)
+       return surface->target->backend->get_supported_mime_types (surface->target);
+
+    return NULL;
+}
+
 static cairo_surface_t *
 _cairo_paginated_surface_snapshot (void *abstract_other)
 {
@@ -671,6 +690,7 @@ static const cairo_surface_backend_t cairo_paginated_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_paginated_surface_source,
     _cairo_paginated_surface_acquire_source_image,
     _cairo_paginated_surface_release_source_image,
     _cairo_paginated_surface_snapshot,
@@ -691,5 +711,6 @@ static const cairo_surface_backend_t cairo_paginated_surface_backend = {
     NULL, /* fill_stroke */
     NULL, /* show_glyphs */
     _cairo_paginated_surface_has_show_text_glyphs,
-    _cairo_paginated_surface_show_text_glyphs
+    _cairo_paginated_surface_show_text_glyphs,
+    _cairo_paginated_surface_get_supported_mime_types,
 };
index 087a7d0..9c72224 100644 (file)
@@ -36,7 +36,7 @@
  */
 
 #include "cairoint.h"
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-error-private.h"
 #include "cairo-path-fixed-private.h"
 
index 4000c9c..7719383 100644 (file)
@@ -339,3 +339,63 @@ _cairo_path_fixed_fill_rectilinear_to_boxes (const cairo_path_fixed_t *path,
                                                                   antialias,
                                                                   boxes);
 }
+
+cairo_status_t
+_cairo_path_fixed_fill_rectilinear_to_traps (const cairo_path_fixed_t *path,
+                                            cairo_fill_rule_t        fill_rule,
+                                            cairo_antialias_t        antialias,
+                                            cairo_traps_t            *traps)
+{
+    cairo_box_t box;
+    cairo_status_t status;
+
+    traps->is_rectilinear = TRUE;
+    traps->is_rectangular = TRUE;
+
+    if (_cairo_path_fixed_is_box (path, &box)) {
+       if (antialias == CAIRO_ANTIALIAS_NONE) {
+           box.p1.x = _cairo_fixed_round_down (box.p1.x);
+           box.p1.y = _cairo_fixed_round_down (box.p1.y);
+           box.p2.x = _cairo_fixed_round_down (box.p2.x);
+           box.p2.y = _cairo_fixed_round_down (box.p2.y);
+       }
+       return _cairo_traps_tessellate_rectangle (traps, &box.p1, &box.p2);
+    } else {
+       cairo_path_fixed_iter_t iter;
+
+       _cairo_path_fixed_iter_init (&iter, path);
+       while (_cairo_path_fixed_iter_is_fill_box (&iter, &box)) {
+           if (box.p1.y > box.p2.y) {
+               cairo_fixed_t t;
+
+               t = box.p1.y;
+               box.p1.y = box.p2.y;
+               box.p2.y = t;
+
+               t = box.p1.x;
+               box.p1.x = box.p2.x;
+               box.p2.x = t;
+           }
+
+           if (antialias == CAIRO_ANTIALIAS_NONE) {
+               box.p1.x = _cairo_fixed_round_down (box.p1.x);
+               box.p1.y = _cairo_fixed_round_down (box.p1.y);
+               box.p2.x = _cairo_fixed_round_down (box.p2.x);
+               box.p2.y = _cairo_fixed_round_down (box.p2.y);
+           }
+
+           status = _cairo_traps_tessellate_rectangle (traps,
+                                                       &box.p1, &box.p2);
+           if (unlikely (status)) {
+               _cairo_traps_clear (traps);
+               return status;
+           }
+       }
+
+       if (_cairo_path_fixed_iter_at_end (&iter))
+           return _cairo_bentley_ottmann_tessellate_rectangular_traps (traps, fill_rule);
+
+       _cairo_traps_clear (traps);
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+}
index 1e9a759..459c680 100644 (file)
@@ -38,8 +38,9 @@
 
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-error-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-path-fixed-private.h"
 #include "cairo-slope-private.h"
 
@@ -369,7 +370,7 @@ _cairo_path_fixed_destroy (cairo_path_fixed_t *path)
     free (path);
 }
 
-static inline cairo_path_op_t
+static cairo_path_op_t
 _cairo_path_fixed_last_op (cairo_path_fixed_t *path)
 {
     cairo_path_buf_t *buf;
index c840e92..50c53f3 100644 (file)
@@ -39,7 +39,7 @@
 #define _BSD_SOURCE /* for hypot() */
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-boxes-private.h"
 #include "cairo-error-private.h"
 #include "cairo-path-fixed-private.h"
 
 typedef struct _segment_t {
     cairo_point_t p1, p2;
-    cairo_bool_t is_horizontal;
-    cairo_bool_t has_join;
+    unsigned flags;
+#define HORIZONTAL 0x1
+#define FORWARDS 0x2
+#define JOIN 0x4
 } segment_t;
 
 typedef struct _cairo_rectilinear_stroker {
@@ -57,7 +59,7 @@ typedef struct _cairo_rectilinear_stroker {
     const cairo_matrix_t *ctm;
     cairo_antialias_t antialias;
 
-    cairo_fixed_t half_line_width;
+    cairo_fixed_t half_line_x, half_line_y;
     cairo_boxes_t *boxes;
     cairo_point_t current_point;
     cairo_point_t first_point;
@@ -82,11 +84,11 @@ _cairo_rectilinear_stroker_limit (cairo_rectilinear_stroker_t *stroker,
     stroker->has_bounds = TRUE;
     _cairo_boxes_get_extents (boxes, num_boxes, &stroker->bounds);
 
-    stroker->bounds.p1.x -= stroker->half_line_width;
-    stroker->bounds.p2.x += stroker->half_line_width;
+    stroker->bounds.p1.x -= stroker->half_line_x;
+    stroker->bounds.p2.x += stroker->half_line_x;
 
-    stroker->bounds.p1.y -= stroker->half_line_width;
-    stroker->bounds.p2.y += stroker->half_line_width;
+    stroker->bounds.p1.y -= stroker->half_line_y;
+    stroker->bounds.p2.y += stroker->half_line_y;
 }
 
 static cairo_bool_t
@@ -122,15 +124,17 @@ _cairo_rectilinear_stroker_init (cairo_rectilinear_stroker_t      *stroker,
        return FALSE;
     }
 
-    if (! _cairo_matrix_has_unity_scale (ctm))
+    if (! _cairo_matrix_is_scale (ctm))
        return FALSE;
 
     stroker->stroke_style = stroke_style;
     stroker->ctm = ctm;
     stroker->antialias = antialias;
 
-    stroker->half_line_width =
-       _cairo_fixed_from_double (stroke_style->line_width / 2.0);
+    stroker->half_line_x =
+       _cairo_fixed_from_double (fabs(ctm->xx) * stroke_style->line_width / 2.0);
+    stroker->half_line_y =
+       _cairo_fixed_from_double (fabs(ctm->yy) * stroke_style->line_width / 2.0);
 
     stroker->open_sub_path = FALSE;
     stroker->segments = stroker->segments_embedded;
@@ -157,8 +161,7 @@ static cairo_status_t
 _cairo_rectilinear_stroker_add_segment (cairo_rectilinear_stroker_t *stroker,
                                        const cairo_point_t     *p1,
                                        const cairo_point_t     *p2,
-                                       cairo_bool_t             is_horizontal,
-                                       cairo_bool_t             has_join)
+                                       unsigned                 flags)
 {
     if (CAIRO_INJECT_FAULT ())
        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
@@ -187,8 +190,7 @@ _cairo_rectilinear_stroker_add_segment (cairo_rectilinear_stroker_t *stroker,
 
     stroker->segments[stroker->num_segments].p1 = *p1;
     stroker->segments[stroker->num_segments].p2 = *p2;
-    stroker->segments[stroker->num_segments].has_join = has_join;
-    stroker->segments[stroker->num_segments].is_horizontal = is_horizontal;
+    stroker->segments[stroker->num_segments].flags = flags;
     stroker->num_segments++;
 
     return CAIRO_STATUS_SUCCESS;
@@ -198,7 +200,8 @@ static cairo_status_t
 _cairo_rectilinear_stroker_emit_segments (cairo_rectilinear_stroker_t *stroker)
 {
     cairo_line_cap_t line_cap = stroker->stroke_style->line_cap;
-    cairo_fixed_t half_line_width = stroker->half_line_width;
+    cairo_fixed_t half_line_x = stroker->half_line_x;
+    cairo_fixed_t half_line_y = stroker->half_line_y;
     cairo_status_t status;
     int i;
 
@@ -239,26 +242,26 @@ _cairo_rectilinear_stroker_emit_segments (cairo_rectilinear_stroker_t *stroker)
            if (a->y == b->y) {
                if (a->x < b->x) {
                    if (lengthen_initial)
-                       a->x -= half_line_width;
+                       a->x -= half_line_x;
                    if (lengthen_final)
-                       b->x += half_line_width;
+                       b->x += half_line_x;
                } else {
                    if (lengthen_initial)
-                       a->x += half_line_width;
+                       a->x += half_line_x;
                    if (lengthen_final)
-                       b->x -= half_line_width;
+                       b->x -= half_line_x;
                }
            } else {
                if (a->y < b->y) {
                    if (lengthen_initial)
-                       a->y -= half_line_width;
+                       a->y -= half_line_y;
                    if (lengthen_final)
-                       b->y += half_line_width;
+                       b->y += half_line_y;
                } else {
                    if (lengthen_initial)
-                       a->y += half_line_width;
+                       a->y += half_line_y;
                    if (lengthen_final)
-                       b->y -= half_line_width;
+                       b->y -= half_line_y;
                }
            }
        }
@@ -266,11 +269,11 @@ _cairo_rectilinear_stroker_emit_segments (cairo_rectilinear_stroker_t *stroker)
        /* Form the rectangle by expanding by half the line width in
         * either perpendicular direction. */
        if (a->y == b->y) {
-           a->y -= half_line_width;
-           b->y += half_line_width;
+           a->y -= half_line_y;
+           b->y += half_line_y;
        } else {
-           a->x -= half_line_width;
-           b->x += half_line_width;
+           a->x -= half_line_x;
+           b->x += half_line_x;
        }
 
        if (a->x < b->x) {
@@ -302,7 +305,8 @@ _cairo_rectilinear_stroker_emit_segments_dashed (cairo_rectilinear_stroker_t *st
 {
     cairo_status_t status;
     cairo_line_cap_t line_cap = stroker->stroke_style->line_cap;
-    cairo_fixed_t half_line_width = stroker->half_line_width;
+    cairo_fixed_t half_line_x = stroker->half_line_x;
+    cairo_fixed_t half_line_y = stroker->half_line_y;
     int i;
 
     for (i = 0; i < stroker->num_segments; i++) {
@@ -313,45 +317,43 @@ _cairo_rectilinear_stroker_emit_segments_dashed (cairo_rectilinear_stroker_t *st
        a = &stroker->segments[i].p1;
        b = &stroker->segments[i].p2;
 
-       is_horizontal = stroker->segments[i].is_horizontal;
+       is_horizontal = stroker->segments[i].flags & HORIZONTAL;
 
        /* Handle the joins for a potentially degenerate segment. */
        if (line_cap == CAIRO_LINE_CAP_BUTT &&
-           stroker->segments[i].has_join &&
+           stroker->segments[i].flags & JOIN &&
            (i != stroker->num_segments - 1 ||
             (! stroker->open_sub_path && stroker->dash.dash_starts_on)))
        {
            cairo_slope_t out_slope;
            int j = (i + 1) % stroker->num_segments;
+           cairo_bool_t forwards = !!(stroker->segments[i].flags & FORWARDS);
 
-           box.p1 = stroker->segments[i].p1;
-           box.p2 = stroker->segments[i].p2;
            _cairo_slope_init (&out_slope,
                               &stroker->segments[j].p1,
                               &stroker->segments[j].p2);
+           box.p2 = box.p1 = stroker->segments[i].p2;
 
            if (is_horizontal) {
-               if (box.p1.x <= box.p2.x) {
-                   box.p1.x = box.p2.x;
-                   box.p2.x += half_line_width;
-               } else {
-                   box.p1.x = box.p2.x - half_line_width;
-               }
-               if (out_slope.dy >= 0)
-                   box.p1.y -= half_line_width;
-               if (out_slope.dy <= 0)
-                   box.p2.y += half_line_width;
+               if (forwards)
+                   box.p2.x += half_line_x;
+               else
+                   box.p1.x -= half_line_x;
+
+               if (out_slope.dy > 0)
+                   box.p1.y -= half_line_y;
+               else
+                   box.p2.y += half_line_y;
            } else {
-               if (box.p1.y <= box.p2.y) {
-                   box.p1.y = box.p2.y;
-                   box.p2.y += half_line_width;
-               } else {
-                   box.p1.y = box.p2.y - half_line_width;
-               }
-               if (out_slope.dx >= 0)
-                   box.p1.x -= half_line_width;
-               if (out_slope.dx <= 0)
-                   box.p2.x += half_line_width;
+               if (forwards)
+                   box.p2.y += half_line_y;
+               else
+                   box.p1.y -= half_line_y;
+
+               if (out_slope.dx > 0)
+                   box.p1.x -= half_line_x;
+               else
+                   box.p2.x += half_line_x;
            }
 
            status = _cairo_boxes_add (stroker->boxes, stroker->antialias, &box);
@@ -363,29 +365,29 @@ _cairo_rectilinear_stroker_emit_segments_dashed (cairo_rectilinear_stroker_t *st
        if (is_horizontal) {
            if (line_cap == CAIRO_LINE_CAP_SQUARE) {
                if (a->x <= b->x) {
-                   a->x -= half_line_width;
-                   b->x += half_line_width;
+                   a->x -= half_line_x;
+                   b->x += half_line_x;
                } else {
-                   a->x += half_line_width;
-                   b->x -= half_line_width;
+                   a->x += half_line_x;
+                   b->x -= half_line_x;
                }
            }
 
-           a->y += half_line_width;
-           b->y -= half_line_width;
+           a->y += half_line_y;
+           b->y -= half_line_y;
        } else {
            if (line_cap == CAIRO_LINE_CAP_SQUARE) {
                if (a->y <= b->y) {
-                   a->y -= half_line_width;
-                   b->y += half_line_width;
+                   a->y -= half_line_y;
+                   b->y += half_line_y;
                } else {
-                   a->y += half_line_width;
-                   b->y -= half_line_width;
+                   a->y += half_line_y;
+                   b->y -= half_line_y;
                }
            }
 
-           a->x += half_line_width;
-           b->x -= half_line_width;
+           a->x += half_line_x;
+           b->x -= half_line_x;
        }
 
        if (a->x == b->x && a->y == b->y)
@@ -455,8 +457,7 @@ _cairo_rectilinear_stroker_line_to (void            *closure,
        return CAIRO_STATUS_SUCCESS;
 
     status = _cairo_rectilinear_stroker_add_segment (stroker, a, b,
-                                                    a->y == b->y,
-                                                    TRUE);
+                                                    (a->y == b->y) | JOIN);
 
     stroker->current_point = *b;
     stroker->open_sub_path = TRUE;
@@ -472,12 +473,12 @@ _cairo_rectilinear_stroker_line_to_dashed (void           *closure,
     const cairo_point_t *a = &stroker->current_point;
     const cairo_point_t *b = point;
     cairo_bool_t fully_in_bounds;
-    double sign, remain;
+    double sf, sign, remain;
     cairo_fixed_t mag;
     cairo_status_t status;
     cairo_line_t segment;
     cairo_bool_t dash_on = FALSE;
-    cairo_bool_t is_horizontal;
+    unsigned is_horizontal;
 
     /* We don't draw anything for degenerate paths. */
     if (a->x == b->x && a->y == b->y)
@@ -495,15 +496,19 @@ _cairo_rectilinear_stroker_line_to_dashed (void           *closure,
     }
 
     is_horizontal = a->y == b->y;
-    if (is_horizontal)
+    if (is_horizontal) {
        mag = b->x - a->x;
-    else
+       sf = fabs (stroker->ctm->xx);
+    } else {
        mag = b->y - a->y;
+       sf = fabs (stroker->ctm->yy);
+    }
     if (mag < 0) {
        remain = _cairo_fixed_to_double (-mag);
        sign = 1.;
     } else {
        remain = _cairo_fixed_to_double (mag);
+       is_horizontal |= FORWARDS;
        sign = -1.;
     }
 
@@ -511,11 +516,11 @@ _cairo_rectilinear_stroker_line_to_dashed (void           *closure,
     while (remain > 0.) {
        double step_length;
 
-       step_length = MIN (stroker->dash.dash_remain, remain);
+       step_length = MIN (sf * stroker->dash.dash_remain, remain);
        remain -= step_length;
 
        mag = _cairo_fixed_from_double (sign*remain);
-       if (is_horizontal)
+       if (is_horizontal & 0x1)
            segment.p2.x = b->x + mag;
        else
            segment.p2.y = b->y + mag;
@@ -527,8 +532,7 @@ _cairo_rectilinear_stroker_line_to_dashed (void             *closure,
            status = _cairo_rectilinear_stroker_add_segment (stroker,
                                                             &segment.p1,
                                                             &segment.p2,
-                                                            is_horizontal,
-                                                            remain <= 0.);
+                                                            is_horizontal | (remain <= 0.) << 2);
            if (unlikely (status))
                return status;
 
@@ -539,7 +543,7 @@ _cairo_rectilinear_stroker_line_to_dashed (void             *closure,
            dash_on = FALSE;
        }
 
-       _cairo_stroker_dash_step (&stroker->dash, step_length);
+       _cairo_stroker_dash_step (&stroker->dash, step_length / sf);
        segment.p1 = segment.p2;
     }
 
@@ -555,8 +559,7 @@ _cairo_rectilinear_stroker_line_to_dashed (void             *closure,
        status = _cairo_rectilinear_stroker_add_segment (stroker,
                                                         &segment.p1,
                                                         &segment.p1,
-                                                        is_horizontal,
-                                                        TRUE);
+                                                        is_horizontal | JOIN);
        if (unlikely (status))
            return status;
     }
@@ -622,40 +625,40 @@ _cairo_path_fixed_stroke_rectilinear_to_boxes (const cairo_path_fixed_t   *path,
     if (! rectilinear_stroker.dash.dashed &&
        _cairo_path_fixed_is_stroke_box (path, &box) &&
        /* if the segments overlap we need to feed them into the tessellator */
-       box.p2.x - box.p1.x > 2* rectilinear_stroker.half_line_width &&
-       box.p2.y - box.p1.y > 2* rectilinear_stroker.half_line_width)
+       box.p2.x - box.p1.x > 2* rectilinear_stroker.half_line_x &&
+       box.p2.y - box.p1.y > 2* rectilinear_stroker.half_line_y)
     {
        cairo_box_t b;
 
        /* top */
-       b.p1.x = box.p1.x - rectilinear_stroker.half_line_width;
-       b.p2.x = box.p2.x + rectilinear_stroker.half_line_width;
-       b.p1.y = box.p1.y - rectilinear_stroker.half_line_width;
-       b.p2.y = box.p1.y + rectilinear_stroker.half_line_width;
+       b.p1.x = box.p1.x - rectilinear_stroker.half_line_x;
+       b.p2.x = box.p2.x + rectilinear_stroker.half_line_x;
+       b.p1.y = box.p1.y - rectilinear_stroker.half_line_y;
+       b.p2.y = box.p1.y + rectilinear_stroker.half_line_y;
        status = _cairo_boxes_add (boxes, antialias, &b);
        assert (status == CAIRO_INT_STATUS_SUCCESS);
 
        /* left  (excluding top/bottom) */
-       b.p1.x = box.p1.x - rectilinear_stroker.half_line_width;
-       b.p2.x = box.p1.x + rectilinear_stroker.half_line_width;
-       b.p1.y = box.p1.y + rectilinear_stroker.half_line_width;
-       b.p2.y = box.p2.y - rectilinear_stroker.half_line_width;
+       b.p1.x = box.p1.x - rectilinear_stroker.half_line_x;
+       b.p2.x = box.p1.x + rectilinear_stroker.half_line_x;
+       b.p1.y = box.p1.y + rectilinear_stroker.half_line_y;
+       b.p2.y = box.p2.y - rectilinear_stroker.half_line_y;
        status = _cairo_boxes_add (boxes, antialias, &b);
        assert (status == CAIRO_INT_STATUS_SUCCESS);
 
        /* right  (excluding top/bottom) */
-       b.p1.x = box.p2.x - rectilinear_stroker.half_line_width;
-       b.p2.x = box.p2.x + rectilinear_stroker.half_line_width;
-       b.p1.y = box.p1.y + rectilinear_stroker.half_line_width;
-       b.p2.y = box.p2.y - rectilinear_stroker.half_line_width;
+       b.p1.x = box.p2.x - rectilinear_stroker.half_line_x;
+       b.p2.x = box.p2.x + rectilinear_stroker.half_line_x;
+       b.p1.y = box.p1.y + rectilinear_stroker.half_line_y;
+       b.p2.y = box.p2.y - rectilinear_stroker.half_line_y;
        status = _cairo_boxes_add (boxes, antialias, &b);
        assert (status == CAIRO_INT_STATUS_SUCCESS);
 
        /* bottom */
-       b.p1.x = box.p1.x - rectilinear_stroker.half_line_width;
-       b.p2.x = box.p2.x + rectilinear_stroker.half_line_width;
-       b.p1.y = box.p2.y - rectilinear_stroker.half_line_width;
-       b.p2.y = box.p2.y + rectilinear_stroker.half_line_width;
+       b.p1.x = box.p1.x - rectilinear_stroker.half_line_x;
+       b.p2.x = box.p2.x + rectilinear_stroker.half_line_x;
+       b.p1.y = box.p2.y - rectilinear_stroker.half_line_y;
+       b.p2.y = box.p2.y + rectilinear_stroker.half_line_y;
        status = _cairo_boxes_add (boxes, antialias, &b);
        assert (status == CAIRO_INT_STATUS_SUCCESS);
 
index 9128a00..88527f5 100644 (file)
@@ -40,8 +40,9 @@
 #define _BSD_SOURCE /* for hypot() */
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-boxes-private.h"
+#include "cairo-contour-inline.h"
 #include "cairo-contour-private.h"
 #include "cairo-error-private.h"
 #include "cairo-path-fixed-private.h"
@@ -163,6 +164,8 @@ add_fan (struct stroker *stroker,
 {
     int start, stop, step, i, npoints;
 
+    assert (stroker->pen.num_vertices);
+
     if (clockwise) {
        step  = 1;
 
@@ -229,50 +232,6 @@ join_is_clockwise (const cairo_stroke_face_t *in,
     return _cairo_slope_compare (&in->dev_vector, &out->dev_vector) < 0;
 }
 
-static cairo_int64_t
-distance_from_face (const cairo_stroke_face_t *face,
-                   const cairo_point_t *p,
-                   cairo_bool_t negate)
-{
-    int32_t dx = (p->x - face->point.x);
-    int32_t dy = (p->y - face->point.y);
-    cairo_int64_t d;
-
-    d = _cairo_int64_sub (_cairo_int32x32_64_mul (dx, face->dev_vector.dy),
-                         _cairo_int32x32_64_mul (dy, face->dev_vector.dx));
-    if (negate)
-       d = _cairo_int64_negate (d);
-    return d;
-}
-
-static cairo_int64_t
-distance_along_face (const cairo_stroke_face_t *face,
-                   const cairo_point_t *p)
-{
-    int32_t dx = (p->x - face->point.x);
-    int32_t dy = (p->y - face->point.y);
-    return _cairo_int64_add (_cairo_int32x32_64_mul (dx, face->dev_vector.dx),
-                            _cairo_int32x32_64_mul (dy, face->dev_vector.dy));
-}
-
-static void
-compute_inner_joint (cairo_point_t *p1, cairo_int64_t d_p1,
-                    const cairo_point_t *p2, cairo_int64_t d_p2,
-                    cairo_int64_t half_line_width)
-{
-    int32_t dx = p2->x - p1->x;
-    int32_t dy = p2->y - p1->y;
-
-    half_line_width = _cairo_int64_sub (half_line_width, d_p1);
-    d_p2 = _cairo_int64_sub (d_p2, d_p1);
-
-    p1->x += _cairo_int_96by64_32x64_divrem (_cairo_int64x32_128_mul (half_line_width, dx),
-                                             d_p2).quo;
-
-    p1->y += _cairo_int_96by64_32x64_divrem (_cairo_int64x32_128_mul (half_line_width, dy),
-                                             d_p2).quo;
-}
-
 static void
 inner_join (struct stroker *stroker,
            const cairo_stroke_face_t *in,
@@ -440,7 +399,7 @@ outer_close (struct stroker *stroker,
     int        clockwise;
 
     if (in->cw.x == out->cw.x && in->cw.y == out->cw.y &&
-       in->ccw.x == out->ccw.x && out->ccw.y == out->ccw.y)
+       in->ccw.x == out->ccw.x && in->ccw.y == out->ccw.y)
     {
        return;
     }
@@ -635,7 +594,7 @@ outer_join (struct stroker *stroker,
     struct stroke_contour *outer;
 
     if (in->cw.x == out->cw.x && in->cw.y == out->cw.y &&
-       in->ccw.x == out->ccw.x && out->ccw.y == out->ccw.y)
+       in->ccw.x == out->ccw.x && in->ccw.y == out->ccw.y)
     {
        return;
     }
@@ -1093,7 +1052,6 @@ line_to (void *closure,
     cairo_stroke_face_t start;
     cairo_point_t *p1 = &stroker->current_face.point;
     cairo_slope_t dev_slope;
-    int move_last = 0;
 
     stroker->has_initial_sub_path = TRUE;
 
@@ -1110,9 +1068,7 @@ line_to (void *closure,
     if (stroker->has_current_face) {
        int clockwise = _cairo_slope_compare (&stroker->current_face.dev_vector,
                                              &start.dev_vector);
-       if (clockwise == 0) {
-           move_last = 1;
-       } else {
+       if (clockwise) {
            clockwise = clockwise < 0;
            /* Join with final face from previous segment */
            if (! within_tolerance (&stroker->current_face.ccw, &start.ccw,
@@ -1143,13 +1099,8 @@ line_to (void *closure,
     stroker->current_face.cw.x += dev_slope.dx;
     stroker->current_face.cw.y += dev_slope.dy;
 
-    if (move_last) {
-       *_cairo_contour_last_point (&stroker->cw.contour) = stroker->current_face.cw;
-       *_cairo_contour_last_point (&stroker->ccw.contour) = stroker->current_face.ccw;
-    } else {
-       contour_add_point (stroker, &stroker->cw, &stroker->current_face.cw);
-       contour_add_point (stroker, &stroker->ccw, &stroker->current_face.ccw);
-    }
+    contour_add_point (stroker, &stroker->cw, &stroker->current_face.cw);
+    contour_add_point (stroker, &stroker->ccw, &stroker->current_face.ccw);
 
     return CAIRO_STATUS_SUCCESS;
 }
@@ -1357,16 +1308,21 @@ _cairo_path_fixed_stroke_to_polygon (const cairo_path_fixed_t   *path,
     stroker.ctm_det_positive =
        _cairo_matrix_compute_determinant (ctm) >= 0.0;
 
-    status = _cairo_pen_init (&stroker.pen,
-                             style->line_width / 2.0,
-                             tolerance, ctm);
-    if (unlikely (status))
-       return status;
-
-    /* If the line width is so small that the pen is reduced to a
-       single point, then we have nothing to do. */
-    if (stroker.pen.num_vertices <= 1)
-       return CAIRO_STATUS_SUCCESS;
+    stroker.pen.num_vertices = 0;
+    if (path->has_curve_to ||
+       style->line_join == CAIRO_LINE_JOIN_ROUND ||
+       style->line_cap == CAIRO_LINE_CAP_ROUND) {
+       status = _cairo_pen_init (&stroker.pen,
+                                 style->line_width / 2.0,
+                                 tolerance, ctm);
+       if (unlikely (status))
+           return status;
+
+       /* If the line width is so small that the pen is reduced to a
+          single point, then we have nothing to do. */
+       if (stroker.pen.num_vertices <= 1)
+           return CAIRO_STATUS_SUCCESS;
+    }
 
     stroker.has_current_face = FALSE;
     stroker.has_first_face = FALSE;
@@ -1396,7 +1352,8 @@ _cairo_path_fixed_stroke_to_polygon (const cairo_path_fixed_t     *path,
 
     _cairo_contour_fini (&stroker.cw.contour);
     _cairo_contour_fini (&stroker.ccw.contour);
-    _cairo_pen_fini (&stroker.pen);
+    if (stroker.pen.num_vertices)
+       _cairo_pen_fini (&stroker.pen);
 
 #if DEBUG
     {
index 337d814..6ce4131 100644 (file)
@@ -40,7 +40,7 @@
 #define _BSD_SOURCE /* for hypot() */
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-boxes-private.h"
 #include "cairo-error-private.h"
 #include "cairo-path-fixed-private.h"
@@ -236,7 +236,7 @@ outer_close (struct stroker *stroker,
     int        clockwise;
 
     if (in->cw.x == out->cw.x && in->cw.y == out->cw.y &&
-       in->ccw.x == out->ccw.x && out->ccw.y == out->ccw.y)
+       in->ccw.x == out->ccw.x && in->ccw.y == out->ccw.y)
     {
        return;
     }
@@ -422,7 +422,7 @@ outer_join (struct stroker *stroker,
     const cairo_point_t        *inpt, *outpt;
 
     if (in->cw.x == out->cw.x && in->cw.y == out->cw.y &&
-       in->ccw.x == out->ccw.x && out->ccw.y == out->ccw.y)
+       in->ccw.x == out->ccw.x && in->ccw.y == out->ccw.y)
     {
        return;
     }
index f25cfe4..bae66dc 100644 (file)
@@ -39,7 +39,7 @@
 #define _BSD_SOURCE /* for hypot() */
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-boxes-private.h"
 #include "cairo-error-private.h"
 #include "cairo-path-fixed-private.h"
@@ -180,11 +180,11 @@ _cairo_stroker_join_is_clockwise (const cairo_stroke_face_t *in,
 }
 
 /**
- * _cairo_slope_compare_sgn
+ * _cairo_slope_compare_sgn:
  *
  * Return -1, 0 or 1 depending on the relative slopes of
  * two lines.
- */
+ **/
 static int
 _cairo_slope_compare_sgn (double dx1, double dy1, double dx2, double dy2)
 {
index d3d9131..5c48373 100644 (file)
@@ -48,7 +48,7 @@
  *
  * Paths are the most basic drawing tools and are primarily used to implicitly
  * generate simple masks.
- */
+ **/
 
 static const cairo_path_t _cairo_path_nil = { CAIRO_STATUS_NO_MEMORY, NULL, 0 };
 
@@ -358,6 +358,8 @@ _cairo_path_create_internal (cairo_path_fixed_t *path_fixed,
  * pointer to a #cairo_path_t returned by a cairo function. Any path
  * that is created manually (ie. outside of cairo) should be destroyed
  * manually as well.
+ *
+ * Since: 1.0
  **/
 void
 cairo_path_destroy (cairo_path_t *path)
diff --git a/src/cairo-pattern-inline.h b/src/cairo-pattern-inline.h
new file mode 100644 (file)
index 0000000..97e8ea0
--- /dev/null
@@ -0,0 +1,65 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Carl D. Worth <cworth@redhat.com>
+ */
+
+#ifndef CAIRO_PATTERN_INLINE_H
+#define CAIRO_PATTERN_INLINE_H
+
+#include "cairo-pattern-private.h"
+
+#include "cairo-list-inline.h"
+
+CAIRO_BEGIN_DECLS
+
+static inline void
+_cairo_pattern_add_observer (cairo_pattern_t *pattern,
+                            cairo_pattern_observer_t *observer,
+                            void (*func) (cairo_pattern_observer_t *,
+                                          cairo_pattern_t *,
+                                          unsigned int))
+{
+    observer->notify = func;
+    cairo_list_add (&observer->link, &pattern->observers);
+}
+
+static inline cairo_surface_t *
+_cairo_pattern_get_source (const cairo_surface_pattern_t *pattern,
+                          cairo_rectangle_int_t *extents)
+{
+    return _cairo_surface_get_source (pattern->surface, extents);
+}
+
+CAIRO_END_DECLS
+
+#endif /* CAIRO_PATTERN_INLINE_H */
index 8be319e..ddbb2c8 100644 (file)
@@ -39,6 +39,7 @@
 #include "cairo-error-private.h"
 #include "cairo-types-private.h"
 #include "cairo-list-private.h"
+#include "cairo-surface-private.h"
 
 #include <stdio.h> /* FILE* */
 
@@ -167,6 +168,22 @@ typedef struct _cairo_mesh_pattern {
     cairo_bool_t has_color[4];
 } cairo_mesh_pattern_t;
 
+typedef struct _cairo_raster_source_pattern {
+    cairo_pattern_t base;
+
+    cairo_content_t content;
+    cairo_rectangle_int_t extents;
+
+    cairo_raster_source_acquire_func_t acquire;
+    cairo_raster_source_release_func_t release;
+    cairo_raster_source_snapshot_func_t snapshot;
+    cairo_raster_source_copy_func_t copy;
+    cairo_raster_source_finish_func_t finish;
+
+    /* an explicit pre-allocated member in preference to the general user-data */
+    void *user_data;
+} cairo_raster_source_pattern_t;
+
 typedef union {
     cairo_pattern_t                base;
 
@@ -174,9 +191,9 @@ typedef union {
     cairo_surface_pattern_t        surface;
     cairo_gradient_pattern_union_t  gradient;
     cairo_mesh_pattern_t           mesh;
+    cairo_raster_source_pattern_t   raster_source;
 } cairo_pattern_union_t;
 
-
 /* cairo-pattern.c */
 
 cairo_private cairo_pattern_t *
@@ -186,6 +203,10 @@ cairo_private cairo_status_t
 _cairo_pattern_create_copy (cairo_pattern_t      **pattern,
                            const cairo_pattern_t  *other);
 
+cairo_private void
+_cairo_pattern_init (cairo_pattern_t *pattern,
+                    cairo_pattern_type_t type);
+
 cairo_private cairo_status_t
 _cairo_pattern_init_copy (cairo_pattern_t      *pattern,
                          const cairo_pattern_t *other);
@@ -306,17 +327,6 @@ cairo_private cairo_bool_t
 _cairo_pattern_equal (const cairo_pattern_t *a,
                      const cairo_pattern_t *b);
 
-static inline void
-_cairo_pattern_add_observer (cairo_pattern_t *pattern,
-                            cairo_pattern_observer_t *observer,
-                            void (*func) (cairo_pattern_observer_t *,
-                                          cairo_pattern_t *,
-                                          unsigned int))
-{
-    observer->notify = func;
-    cairo_list_add (&observer->link, &pattern->observers);
-}
-
 /* cairo-mesh-pattern-rasterizer.c */
 
 cairo_private void
@@ -328,11 +338,28 @@ _cairo_mesh_pattern_rasterize (const cairo_mesh_pattern_t *mesh,
                               double                      x_offset,
                               double                      y_offset);
 
+cairo_private cairo_surface_t *
+_cairo_raster_source_pattern_acquire (const cairo_pattern_t *abstract_pattern,
+                                     cairo_surface_t *target,
+                                     const cairo_rectangle_int_t *extents);
+
+cairo_private void
+_cairo_raster_source_pattern_release (const cairo_pattern_t *abstract_pattern,
+                                     cairo_surface_t *surface);
+
+cairo_private cairo_status_t
+_cairo_raster_source_pattern_snapshot (cairo_pattern_t *abstract_pattern);
+
+cairo_private cairo_status_t
+_cairo_raster_source_pattern_init_copy (cairo_pattern_t *pattern,
+                                       const cairo_pattern_t *other);
+
+cairo_private void
+_cairo_raster_source_pattern_finish (cairo_pattern_t *abstract_pattern);
+
 cairo_private void
 _cairo_debug_print_pattern (FILE *file, const cairo_pattern_t *pattern);
 
 CAIRO_END_DECLS
 
 #endif /* CAIRO_PATTERN_PRIVATE */
-
-
index f91de26..940227d 100644 (file)
 #include "cairo-error-private.h"
 #include "cairo-freed-pool-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-path-private.h"
 #include "cairo-pattern-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
+#include "cairo-surface-snapshot-inline.h"
 
 #include <float.h>
 
@@ -59,7 +61,7 @@
  * or implicitly through
  * <function>cairo_set_source_<emphasis>type</emphasis>()</function>
  * functions.
- */
+ **/
 
 static freed_pool_t freed_pattern_pool[5];
 
@@ -187,7 +189,7 @@ _cairo_pattern_set_error (cairo_pattern_t *pattern,
     return _cairo_error (status);
 }
 
-static void
+void
 _cairo_pattern_init (cairo_pattern_t *pattern, cairo_pattern_type_t type)
 {
 #if HAVE_VALGRIND
@@ -207,6 +209,8 @@ _cairo_pattern_init (cairo_pattern_t *pattern, cairo_pattern_type_t type)
     case CAIRO_PATTERN_TYPE_MESH:
        VALGRIND_MAKE_MEM_UNDEFINED (pattern, sizeof (cairo_mesh_pattern_t));
        break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       break;
     }
 #endif
 
@@ -219,7 +223,8 @@ _cairo_pattern_init (cairo_pattern_t *pattern, cairo_pattern_type_t type)
 
     _cairo_user_data_array_init (&pattern->user_data);
 
-    if (type == CAIRO_PATTERN_TYPE_SURFACE)
+    if (type == CAIRO_PATTERN_TYPE_SURFACE ||
+       type == CAIRO_PATTERN_TYPE_RASTER_SOURCE)
        pattern->extend = CAIRO_EXTEND_SURFACE_DEFAULT;
     else
        pattern->extend = CAIRO_EXTEND_GRADIENT_DEFAULT;
@@ -291,6 +296,8 @@ cairo_status_t
 _cairo_pattern_init_copy (cairo_pattern_t      *pattern,
                          const cairo_pattern_t *other)
 {
+    cairo_status_t status;
+
     if (other->status)
        return _cairo_pattern_set_error (pattern, other->status);
 
@@ -316,7 +323,6 @@ _cairo_pattern_init_copy (cairo_pattern_t   *pattern,
     case CAIRO_PATTERN_TYPE_RADIAL: {
        cairo_gradient_pattern_t *dst = (cairo_gradient_pattern_t *) pattern;
        cairo_gradient_pattern_t *src = (cairo_gradient_pattern_t *) other;
-       cairo_status_t status;
 
        if (other->type == CAIRO_PATTERN_TYPE_LINEAR) {
            VG (VALGRIND_MAKE_MEM_UNDEFINED (pattern, sizeof (cairo_linear_pattern_t)));
@@ -332,7 +338,6 @@ _cairo_pattern_init_copy (cairo_pattern_t   *pattern,
     case CAIRO_PATTERN_TYPE_MESH: {
        cairo_mesh_pattern_t *dst = (cairo_mesh_pattern_t *) pattern;
        cairo_mesh_pattern_t *src = (cairo_mesh_pattern_t *) other;
-       cairo_status_t status;
 
        VG (VALGRIND_MAKE_MEM_UNDEFINED (pattern, sizeof (cairo_mesh_pattern_t)));
 
@@ -341,6 +346,12 @@ _cairo_pattern_init_copy (cairo_pattern_t  *pattern,
            return status;
 
     } break;
+
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE: {
+       status = _cairo_raster_source_pattern_init_copy (pattern, other);
+       if (unlikely (status))
+           return status;
+    } break;
     }
 
     /* The reference count and user_data array are unique to the copy. */
@@ -376,6 +387,9 @@ _cairo_pattern_init_static_copy (cairo_pattern_t    *pattern,
     case CAIRO_PATTERN_TYPE_MESH:
        size = sizeof (cairo_mesh_pattern_t);
        break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       size = sizeof (cairo_raster_source_pattern_t);
+       break;
     }
 
     memcpy (pattern, other, size);
@@ -407,11 +421,11 @@ _cairo_pattern_init_snapshot (cairo_pattern_t       *pattern,
 
        cairo_surface_destroy (surface);
 
-       if (surface_pattern->surface->status)
-           return surface_pattern->surface->status;
-    }
+       status = surface_pattern->surface->status;
+    } else if (pattern->type == CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       status = _cairo_raster_source_pattern_snapshot (pattern);
 
-    return CAIRO_STATUS_SUCCESS;
+    return status;
 }
 
 void
@@ -442,6 +456,9 @@ _cairo_pattern_fini (cairo_pattern_t *pattern)
 
        _cairo_array_fini (&mesh->patches);
     } break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       _cairo_raster_source_pattern_finish (pattern);
+       break;
     }
 
 #if HAVE_VALGRIND
@@ -461,6 +478,8 @@ _cairo_pattern_fini (cairo_pattern_t *pattern)
     case CAIRO_PATTERN_TYPE_MESH:
        VALGRIND_MAKE_MEM_NOACCESS (pattern, sizeof (cairo_mesh_pattern_t));
        break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       break;
     }
 #endif
 }
@@ -491,6 +510,9 @@ _cairo_pattern_create_copy (cairo_pattern_t   **pattern_out,
     case CAIRO_PATTERN_TYPE_MESH:
        pattern = malloc (sizeof (cairo_mesh_pattern_t));
        break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       pattern = malloc (sizeof (cairo_raster_source_pattern_t));
+       break;
     default:
        ASSERT_NOT_REACHED;
        return _cairo_error (CAIRO_STATUS_PATTERN_TYPE_MISMATCH);
@@ -629,6 +651,8 @@ _cairo_pattern_create_in_error (cairo_status_t status)
  * This function will always return a valid pointer, but if an error
  * occurred the pattern status will be set to an error.  To inspect
  * the status of a pattern use cairo_pattern_status().
+ *
+ * Since: 1.0
  **/
 cairo_pattern_t *
 cairo_pattern_create_rgb (double red, double green, double blue)
@@ -657,6 +681,8 @@ slim_hidden_def (cairo_pattern_create_rgb);
  * This function will always return a valid pointer, but if an error
  * occurred the pattern status will be set to an error.  To inspect
  * the status of a pattern use cairo_pattern_status().
+ *
+ * Since: 1.0
  **/
 cairo_pattern_t *
 cairo_pattern_create_rgba (double red, double green, double blue,
@@ -691,6 +717,8 @@ slim_hidden_def (cairo_pattern_create_rgba);
  * This function will always return a valid pointer, but if an error
  * occurred the pattern status will be set to an error.  To inspect
  * the status of a pattern use cairo_pattern_status().
+ *
+ * Since: 1.0
  **/
 cairo_pattern_t *
 cairo_pattern_create_for_surface (cairo_surface_t *surface)
@@ -749,6 +777,8 @@ slim_hidden_def (cairo_pattern_create_for_surface);
  * This function will always return a valid pointer, but if an error
  * occurred the pattern status will be set to an error.  To inspect
  * the status of a pattern use cairo_pattern_status().
+ *
+ * Since: 1.0
  **/
 cairo_pattern_t *
 cairo_pattern_create_linear (double x0, double y0, double x1, double y1)
@@ -800,6 +830,8 @@ cairo_pattern_create_linear (double x0, double y0, double x1, double y1)
  * This function will always return a valid pointer, but if an error
  * occurred the pattern status will be set to an error.  To inspect
  * the status of a pattern use cairo_pattern_status().
+ *
+ * Since: 1.0
  **/
 cairo_pattern_t *
 cairo_pattern_create_radial (double cx0, double cy0, double radius0,
@@ -858,7 +890,7 @@ static const int mesh_control_point_j[4] = { 1, 2, 2, 1 };
  * Degenerate sides are permitted so straight lines may be used. A
  * zero length line on one side may be used to create 3 sided patches.
  *
- * <informalexample><programlisting>
+ * <informalexample><screen>
  *       C1     Side 1       C2
  *        +---------------+
  *        |               |
@@ -871,7 +903,7 @@ static const int mesh_control_point_j[4] = { 1, 2, 2, 1 };
  *        |               |
  *        +---------------+
  *      C0     Side 3        C3
- * </programlisting></informalexample>
+ * </screen></informalexample>
  *
  * Each patch is constructed by first calling
  * cairo_mesh_pattern_begin_patch(), then cairo_mesh_pattern_move_to()
@@ -919,10 +951,10 @@ static const int mesh_control_point_j[4] = { 1, 2, 2, 1 };
  * cairo_mesh_pattern_begin_patch()/cairo_mesh_pattern_end_patch().
  *
  * <informalexample><programlisting>
- * cairo_pattern_t *mesh = cairo_mesh_pattern_create_mesh ();
+ * cairo_pattern_t *pattern = cairo_pattern_create_mesh ();
  *
  * /&ast; Add a Coons patch &ast;/
- * cairo_mesh_pattern_begin_patch (mesh);
+ * cairo_mesh_pattern_begin_patch (pattern);
  * cairo_mesh_pattern_move_to (pattern, 0, 0);
  * cairo_mesh_pattern_curve_to (pattern, 30, -30,  60,  30, 100, 0);
  * cairo_mesh_pattern_curve_to (pattern, 60,  30, 130,  60, 100, 100);
@@ -932,17 +964,17 @@ static const int mesh_control_point_j[4] = { 1, 2, 2, 1 };
  * cairo_mesh_pattern_set_corner_color_rgb (pattern, 1, 0, 1, 0);
  * cairo_mesh_pattern_set_corner_color_rgb (pattern, 2, 0, 0, 1);
  * cairo_mesh_pattern_set_corner_color_rgb (pattern, 3, 1, 1, 0);
- * cairo_mesh_pattern_end_patch (mesh);
+ * cairo_mesh_pattern_end_patch (pattern);
  *
  * /&ast; Add a Gouraud-shaded triangle &ast;/
- * cairo_mesh_pattern_begin_patch (mesh)
+ * cairo_mesh_pattern_begin_patch (pattern)
  * cairo_mesh_pattern_move_to (pattern, 100, 100);
  * cairo_mesh_pattern_line_to (pattern, 130, 130);
  * cairo_mesh_pattern_line_to (pattern, 130,  70);
  * cairo_mesh_pattern_set_corner_color_rgb (pattern, 0, 1, 0, 0);
  * cairo_mesh_pattern_set_corner_color_rgb (pattern, 1, 0, 1, 0);
  * cairo_mesh_pattern_set_corner_color_rgb (pattern, 2, 0, 0, 1);
- * cairo_mesh_pattern_end_patch (mesh)
+ * cairo_mesh_pattern_end_patch (pattern)
  * </programlisting></informalexample>
  *
  * When two patches overlap, the last one that has been added is drawn
@@ -1017,6 +1049,8 @@ cairo_pattern_create_mesh (void)
  * cairo_pattern_get_reference_count().
  *
  * Return value: the referenced #cairo_pattern_t.
+ *
+ * Since: 1.0
  **/
 cairo_pattern_t *
 cairo_pattern_reference (cairo_pattern_t *pattern)
@@ -1060,6 +1094,8 @@ cairo_pattern_get_type (cairo_pattern_t *pattern)
  * Return value: %CAIRO_STATUS_SUCCESS, %CAIRO_STATUS_NO_MEMORY,
  * %CAIRO_STATUS_INVALID_MATRIX, %CAIRO_STATUS_PATTERN_TYPE_MISMATCH,
  * or %CAIRO_STATUS_INVALID_MESH_CONSTRUCTION.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_pattern_status (cairo_pattern_t *pattern)
@@ -1074,6 +1110,8 @@ cairo_pattern_status (cairo_pattern_t *pattern)
  * Decreases the reference count on @pattern by one. If the result is
  * zero, then @pattern and all associated resources are freed.  See
  * cairo_pattern_reference().
+ *
+ * Since: 1.0
  **/
 void
 cairo_pattern_destroy (cairo_pattern_t *pattern)
@@ -1093,7 +1131,10 @@ cairo_pattern_destroy (cairo_pattern_t *pattern)
     _cairo_pattern_fini (pattern);
 
     /* maintain a small cache of freed patterns */
-    _freed_pool_put (&freed_pattern_pool[type], pattern);
+    if (type < ARRAY_LENGTH (freed_pattern_pool))
+       _freed_pool_put (&freed_pattern_pool[type], pattern);
+    else
+       free (pattern);
 }
 slim_hidden_def (cairo_pattern_destroy);
 
@@ -1521,7 +1562,7 @@ slim_hidden_def (cairo_mesh_pattern_line_to);
  * Note: If @pattern is not a mesh pattern then @pattern will be put
  * into an error status with a status of
  * %CAIRO_STATUS_PATTERN_TYPE_MISMATCH. If @pattern has no current
- * patch or the current patch already has at leas one side, @pattern
+ * patch or the current patch already has at least one side, @pattern
  * will be put into an error status with a status of
  * %CAIRO_STATUS_INVALID_MESH_CONSTRUCTION.
  *
@@ -1850,6 +1891,8 @@ _cairo_pattern_add_color_stop (cairo_gradient_pattern_t   *pattern,
  * Note: If the pattern is not a gradient pattern, (eg. a linear or
  * radial pattern), then the pattern will be put into an error status
  * with a status of %CAIRO_STATUS_PATTERN_TYPE_MISMATCH.
+ *
+ * Since: 1.0
  **/
 void
 cairo_pattern_add_color_stop_rgb (cairo_pattern_t *pattern,
@@ -1887,7 +1930,9 @@ cairo_pattern_add_color_stop_rgb (cairo_pattern_t *pattern,
  * Note: If the pattern is not a gradient pattern, (eg. a linear or
  * radial pattern), then the pattern will be put into an error status
  * with a status of %CAIRO_STATUS_PATTERN_TYPE_MISMATCH.
- */
+ *
+ * Since: 1.0
+ **/
 void
 cairo_pattern_add_color_stop_rgba (cairo_pattern_t *pattern,
                                   double          offset,
@@ -1948,6 +1993,8 @@ slim_hidden_def (cairo_pattern_add_color_stop_rgba);
  *
  * Also, please note the discussion of the user-space locking
  * semantics of cairo_set_source().
+ *
+ * Since: 1.0
  **/
 void
 cairo_pattern_set_matrix (cairo_pattern_t      *pattern,
@@ -1978,6 +2025,8 @@ slim_hidden_def (cairo_pattern_set_matrix);
  * @matrix: return value for the matrix
  *
  * Stores the pattern's transformation matrix into @matrix.
+ *
+ * Since: 1.0
  **/
 void
 cairo_pattern_get_matrix (cairo_pattern_t *pattern, cairo_matrix_t *matrix)
@@ -2004,6 +2053,8 @@ cairo_pattern_get_matrix (cairo_pattern_t *pattern, cairo_matrix_t *matrix)
  * cairo_set_source_surface (cr, image, x, y);
  * cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
  * </programlisting></informalexample>
+ *
+ * Since: 1.0
  **/
 void
 cairo_pattern_set_filter (cairo_pattern_t *pattern, cairo_filter_t filter)
@@ -2023,6 +2074,8 @@ cairo_pattern_set_filter (cairo_pattern_t *pattern, cairo_filter_t filter)
  * for details on each filter.
  *
  * Return value: the current filter used for resizing the pattern.
+ *
+ * Since: 1.0
  **/
 cairo_filter_t
 cairo_pattern_get_filter (cairo_pattern_t *pattern)
@@ -2042,6 +2095,8 @@ cairo_pattern_get_filter (cairo_pattern_t *pattern)
  *
  * The default extend mode is %CAIRO_EXTEND_NONE for surface patterns
  * and %CAIRO_EXTEND_PAD for gradient patterns.
+ *
+ * Since: 1.0
  **/
 void
 cairo_pattern_set_extend (cairo_pattern_t *pattern, cairo_extend_t extend)
@@ -2062,6 +2117,8 @@ cairo_pattern_set_extend (cairo_pattern_t *pattern, cairo_extend_t extend)
  *
  * Return value: the current extend strategy used for drawing the
  * pattern.
+ *
+ * Since: 1.0
  **/
 cairo_extend_t
 cairo_pattern_get_extend (cairo_pattern_t *pattern)
@@ -2183,8 +2240,8 @@ _extend_range (double range[2], double value, cairo_bool_t valid)
     return TRUE;
 }
 
-/**
- * _cairo_radial_pattern_focus_is_inside
+/*
+ * _cairo_radial_pattern_focus_is_inside:
  *
  * Returns %TRUE if and only if the focus point exists and is
  * contained in one of the two extreme circles. This condition is
@@ -2196,7 +2253,7 @@ _extend_range (double range[2], double value, cairo_bool_t valid)
  * considered as contained in the circle, hence this function returns
  * %FALSE.
  *
- **/
+ */
 cairo_bool_t
 _cairo_radial_pattern_focus_is_inside (const cairo_radial_pattern_t *radial)
 {
@@ -2559,7 +2616,7 @@ _cairo_radial_pattern_box_to_parameter (const cairo_radial_pattern_t *radial,
 }
 
 /**
- * _cairo_gradient_pattern_box_to_parameter
+ * _cairo_gradient_pattern_box_to_parameter:
  *
  * Compute a interpolation range sufficient to draw (within the given
  * tolerance) the gradient in the given box getting the same result as
@@ -2591,7 +2648,7 @@ _cairo_gradient_pattern_box_to_parameter (const cairo_gradient_pattern_t *gradie
 }
 
 /**
- * _cairo_gradient_pattern_interpolate
+ * _cairo_gradient_pattern_interpolate:
  *
  * Interpolate between the start and end objects of linear or radial
  * gradients.  The interpolated object is stored in out_circle, with
@@ -2624,7 +2681,7 @@ _cairo_gradient_pattern_interpolate (const cairo_gradient_pattern_t *gradient,
 
 
 /**
- * _cairo_gradient_pattern_fit_to_range
+ * _cairo_gradient_pattern_fit_to_range:
  *
  * Scale the extremes of a gradient to guarantee that the coordinates
  * and their deltas are within the range (-max_value, max_value). The
@@ -2863,7 +2920,7 @@ _gradient_color_average (const cairo_gradient_pattern_t *gradient,
 }
 
 /**
- * _cairo_pattern_alpha_range
+ * _cairo_pattern_alpha_range:
  *
  * Convenience function to determine the minimum and maximum alpha in
  * the drawn part of a pattern (i.e. ignoring clear parts caused by
@@ -2929,6 +2986,7 @@ _cairo_pattern_alpha_range (const cairo_pattern_t *pattern,
        /* fall through */
 
     case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        alpha_min = 0;
        alpha_max = 1;
        break;
@@ -2941,7 +2999,7 @@ _cairo_pattern_alpha_range (const cairo_pattern_t *pattern,
 }
 
 /**
- * _cairo_mesh_pattern_coord_box
+ * _cairo_mesh_pattern_coord_box:
  *
  * Convenience function to determine the range of the coordinates of
  * the points used to define the patches of the mesh.
@@ -2998,7 +3056,7 @@ _cairo_mesh_pattern_coord_box (const cairo_mesh_pattern_t *mesh,
 }
 
 /**
- * _cairo_gradient_pattern_is_solid
+ * _cairo_gradient_pattern_is_solid:
  *
  * Convenience function to determine whether a gradient pattern is
  * a solid color within the given extents. In this case the color
@@ -3081,7 +3139,7 @@ _mesh_is_clear (const cairo_mesh_pattern_t *mesh)
 }
 
 /**
- * _cairo_pattern_is_opaque_solid
+ * _cairo_pattern_is_opaque_solid:
  *
  * Convenience function to determine whether a pattern is an opaque
  * (alpha==1.0) solid color pattern. This is done by testing whether
@@ -3108,28 +3166,37 @@ static cairo_bool_t
 _surface_is_opaque (const cairo_surface_pattern_t *pattern,
                    const cairo_rectangle_int_t *sample)
 {
+    cairo_rectangle_int_t extents;
+
     if (pattern->surface->content & CAIRO_CONTENT_ALPHA)
        return FALSE;
 
     if (pattern->base.extend != CAIRO_EXTEND_NONE)
        return TRUE;
 
-    if (sample != NULL) {
-       cairo_rectangle_int_t extents;
+    if (! _cairo_surface_get_extents (pattern->surface, &extents))
+       return TRUE;
 
-       if (! _cairo_surface_get_extents (pattern->surface, &extents))
-           return TRUE;
+    if (sample == NULL)
+       return FALSE;
 
-       if (sample->x >= extents.x &&
-           sample->y >= extents.y &&
-           sample->x + sample->width  <= extents.x + extents.width &&
-           sample->y + sample->height <= extents.y + extents.height)
-       {
-           return TRUE;
-       }
-    }
+    return _cairo_rectangle_contains_rectangle (&extents, sample);
+}
 
-    return FALSE;
+static cairo_bool_t
+_raster_source_is_opaque (const cairo_raster_source_pattern_t *pattern,
+                         const cairo_rectangle_int_t *sample)
+{
+    if (pattern->content & CAIRO_CONTENT_ALPHA)
+       return FALSE;
+
+    if (pattern->base.extend != CAIRO_EXTEND_NONE)
+       return TRUE;
+
+    if (sample == NULL)
+       return FALSE;
+
+    return _cairo_rectangle_contains_rectangle (&pattern->extents, sample);
 }
 
 static cairo_bool_t
@@ -3146,6 +3213,12 @@ _surface_is_clear (const cairo_surface_pattern_t *pattern)
 }
 
 static cairo_bool_t
+_raster_source_is_clear (const cairo_raster_source_pattern_t *pattern)
+{
+    return pattern->extents.width == 0 || pattern->extents.height == 0;
+}
+
+static cairo_bool_t
 _gradient_is_opaque (const cairo_gradient_pattern_t *gradient,
                     const cairo_rectangle_int_t *sample)
 {
@@ -3192,7 +3265,7 @@ _gradient_is_opaque (const cairo_gradient_pattern_t *gradient,
 }
 
 /**
- * _cairo_pattern_is_opaque
+ * _cairo_pattern_is_opaque:
  *
  * Convenience function to determine whether a pattern is an opaque
  * pattern (of any type). The same caveats that apply to
@@ -3215,6 +3288,8 @@ _cairo_pattern_is_opaque (const cairo_pattern_t *abstract_pattern,
        return _cairo_pattern_is_opaque_solid (abstract_pattern);
     case CAIRO_PATTERN_TYPE_SURFACE:
        return _surface_is_opaque (&pattern->surface, sample);
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return _raster_source_is_opaque (&pattern->raster_source, sample);
     case CAIRO_PATTERN_TYPE_LINEAR:
     case CAIRO_PATTERN_TYPE_RADIAL:
        return _gradient_is_opaque (&pattern->gradient.base, sample);
@@ -3240,6 +3315,8 @@ _cairo_pattern_is_clear (const cairo_pattern_t *abstract_pattern)
        return CAIRO_COLOR_IS_CLEAR (&pattern->solid.color);
     case CAIRO_PATTERN_TYPE_SURFACE:
        return _surface_is_clear (&pattern->surface);
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return _raster_source_is_clear (&pattern->raster_source);
     case CAIRO_PATTERN_TYPE_LINEAR:
     case CAIRO_PATTERN_TYPE_RADIAL:
        return _gradient_is_clear (&pattern->gradient.base, NULL);
@@ -3264,7 +3341,7 @@ _cairo_pattern_is_clear (const cairo_pattern_t *abstract_pattern)
  * XXX: We don't actually have any way of querying the backend for
  *      the filter radius, so we just guess base on what we know that
  *      backends do currently (see bug #10508)
- */
+ **/
 cairo_filter_t
 _cairo_pattern_analyze_filter (const cairo_pattern_t   *pattern,
                               double                   *pad_out)
@@ -3409,6 +3486,29 @@ _cairo_pattern_get_extents (const cairo_pattern_t         *pattern,
        }
        break;
 
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       {
+           const cairo_raster_source_pattern_t *raster =
+               (const cairo_raster_source_pattern_t *) pattern;
+           double pad;
+
+           if (raster->extents.width == 0 || raster->extents.height == 0)
+               goto EMPTY;
+
+           if (pattern->extend != CAIRO_EXTEND_NONE)
+               goto UNBOUNDED;
+
+           /* The filter can effectively enlarge the extents of the
+            * pattern, so extend as necessary.
+            */
+           _cairo_pattern_analyze_filter (pattern, &pad);
+           x1 = raster->extents.x - pad;
+           y1 = raster->extents.y - pad;
+           x2 = raster->extents.x + (int) raster->extents.width  + pad;
+           y2 = raster->extents.y + (int) raster->extents.height + pad;
+       }
+       break;
+
     case CAIRO_PATTERN_TYPE_RADIAL:
        {
            const cairo_radial_pattern_t *radial =
@@ -3568,6 +3668,7 @@ _cairo_pattern_get_ink_extents (const cairo_pattern_t         *pattern,
            (const cairo_surface_pattern_t *) pattern;
        cairo_surface_t *surface = surface_pattern->surface;
 
+       surface = _cairo_surface_get_source (surface, NULL);
        if (_cairo_surface_is_recording (surface)) {
            cairo_matrix_t imatrix;
            cairo_box_t box;
@@ -3666,6 +3767,15 @@ _cairo_surface_pattern_hash (unsigned long hash,
     return hash;
 }
 
+static unsigned long
+_cairo_raster_source_pattern_hash (unsigned long hash,
+                                  const cairo_raster_source_pattern_t *raster)
+{
+    hash ^= (uintptr_t)raster->user_data;
+
+    return hash;
+}
+
 unsigned long
 _cairo_pattern_hash (const cairo_pattern_t *pattern)
 {
@@ -3698,6 +3808,8 @@ _cairo_pattern_hash (const cairo_pattern_t *pattern)
        return _cairo_mesh_pattern_hash (hash, (cairo_mesh_pattern_t *) pattern);
     case CAIRO_PATTERN_TYPE_SURFACE:
        return _cairo_surface_pattern_hash (hash, (cairo_surface_pattern_t *) pattern);
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return _cairo_raster_source_pattern_hash (hash, (cairo_raster_source_pattern_t *) pattern);
     default:
        ASSERT_NOT_REACHED;
        return FALSE;
@@ -3804,6 +3916,13 @@ _cairo_surface_pattern_equal (const cairo_surface_pattern_t *a,
     return a->surface->unique_id == b->surface->unique_id;
 }
 
+static cairo_bool_t
+_cairo_raster_source_pattern_equal (const cairo_raster_source_pattern_t *a,
+                                   const cairo_raster_source_pattern_t *b)
+{
+    return a->user_data == b->user_data;
+}
+
 cairo_bool_t
 _cairo_pattern_equal (const cairo_pattern_t *a, const cairo_pattern_t *b)
 {
@@ -3846,6 +3965,9 @@ _cairo_pattern_equal (const cairo_pattern_t *a, const cairo_pattern_t *b)
     case CAIRO_PATTERN_TYPE_SURFACE:
        return _cairo_surface_pattern_equal ((cairo_surface_pattern_t *) a,
                                             (cairo_surface_pattern_t *) b);
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return _cairo_raster_source_pattern_equal ((cairo_raster_source_pattern_t *) a,
+                                                  (cairo_raster_source_pattern_t *) b);
     default:
        ASSERT_NOT_REACHED;
        return FALSE;
@@ -3853,7 +3975,7 @@ _cairo_pattern_equal (const cairo_pattern_t *a, const cairo_pattern_t *b)
 }
 
 /**
- * cairo_pattern_get_rgba
+ * cairo_pattern_get_rgba:
  * @pattern: a #cairo_pattern_t
  * @red: return value for red component of color, or %NULL
  * @green: return value for green component of color, or %NULL
@@ -3897,7 +4019,7 @@ cairo_pattern_get_rgba (cairo_pattern_t *pattern,
 }
 
 /**
- * cairo_pattern_get_surface
+ * cairo_pattern_get_surface:
  * @pattern: a #cairo_pattern_t
  * @surface: return value for surface of pattern, or %NULL
  * 
@@ -3930,7 +4052,7 @@ cairo_pattern_get_surface (cairo_pattern_t *pattern,
 }
 
 /**
- * cairo_pattern_get_color_stop_rgba
+ * cairo_pattern_get_color_stop_rgba:
  * @pattern: a #cairo_pattern_t
  * @index: index of the stop to return data for
  * @offset: return value for the offset of the stop, or %NULL
@@ -3983,7 +4105,7 @@ cairo_pattern_get_color_stop_rgba (cairo_pattern_t *pattern,
 }
 
 /**
- * cairo_pattern_get_color_stop_count
+ * cairo_pattern_get_color_stop_count:
  * @pattern: a #cairo_pattern_t
  * @count: return value for the number of color stops, or %NULL
  *
@@ -3995,7 +4117,7 @@ cairo_pattern_get_color_stop_rgba (cairo_pattern_t *pattern,
  * pattern.
  *
  * Since: 1.4
- */
+ **/
 cairo_status_t
 cairo_pattern_get_color_stop_count (cairo_pattern_t *pattern,
                                    int *count)
@@ -4016,7 +4138,7 @@ cairo_pattern_get_color_stop_count (cairo_pattern_t *pattern,
 }
 
 /**
- * cairo_pattern_get_linear_points
+ * cairo_pattern_get_linear_points:
  * @pattern: a #cairo_pattern_t
  * @x0: return value for the x coordinate of the first point, or %NULL
  * @y0: return value for the y coordinate of the first point, or %NULL
@@ -4057,7 +4179,7 @@ cairo_pattern_get_linear_points (cairo_pattern_t *pattern,
 }
 
 /**
- * cairo_pattern_get_radial_circles
+ * cairo_pattern_get_radial_circles:
  * @pattern: a #cairo_pattern_t
  * @x0: return value for the x coordinate of the center of the first circle, or %NULL
  * @y0: return value for the y coordinate of the center of the first circle, or %NULL
@@ -4105,7 +4227,7 @@ cairo_pattern_get_radial_circles (cairo_pattern_t *pattern,
 }
 
 /**
- * cairo_mesh_pattern_get_patch_count
+ * cairo_mesh_pattern_get_patch_count:
  * @pattern: a #cairo_pattern_t
  * @count: return value for the number patches, or %NULL
  *
@@ -4120,7 +4242,7 @@ cairo_pattern_get_radial_circles (cairo_pattern_t *pattern,
  * pattern.
  *
  * Since: 1.12
- */
+ **/
 cairo_status_t
 cairo_mesh_pattern_get_patch_count (cairo_pattern_t *pattern,
                                    unsigned int *count)
@@ -4144,7 +4266,7 @@ cairo_mesh_pattern_get_patch_count (cairo_pattern_t *pattern,
 slim_hidden_def (cairo_mesh_pattern_get_patch_count);
 
 /**
- * cairo_mesh_pattern_get_path
+ * cairo_mesh_pattern_get_path:
  * @pattern: a #cairo_pattern_t
  * @patch_num: the patch number to return data for
  *
@@ -4160,7 +4282,7 @@ slim_hidden_def (cairo_mesh_pattern_get_patch_count);
  * status %CAIRO_STATUS_PATTERN_TYPE_MISMATCH is returned.
  *
  * Since: 1.12
- */
+ **/
 cairo_path_t *
 cairo_mesh_pattern_get_path (cairo_pattern_t *pattern,
                             unsigned int patch_num)
@@ -4232,7 +4354,7 @@ cairo_mesh_pattern_get_path (cairo_pattern_t *pattern,
 slim_hidden_def (cairo_mesh_pattern_get_path);
 
 /**
- * cairo_mesh_pattern_get_corner_color_rgba
+ * cairo_mesh_pattern_get_corner_color_rgba:
  * @pattern: a #cairo_pattern_t
  * @patch_num: the patch number to return data for
  * @corner_num: the corner number to return data for
@@ -4300,7 +4422,7 @@ cairo_mesh_pattern_get_corner_color_rgba (cairo_pattern_t *pattern,
 slim_hidden_def (cairo_mesh_pattern_get_corner_color_rgba);
 
 /**
- * cairo_mesh_pattern_get_control_point
+ * cairo_mesh_pattern_get_control_point:
  * @pattern: a #cairo_pattern_t
  * @patch_num: the patch number to return data for
  * @point_num: the control point number to return data for
@@ -4381,6 +4503,13 @@ _cairo_debug_print_surface_pattern (FILE *file,
 }
 
 static void
+_cairo_debug_print_raster_source_pattern (FILE *file,
+                                         const cairo_raster_source_pattern_t *raster)
+{
+    printf ("  content: %x, size %dx%d\n", raster->content, raster->extents.width, raster->extents.height);
+}
+
+static void
 _cairo_debug_print_linear_pattern (FILE *file,
                                    const cairo_linear_pattern_t *pattern)
 {
@@ -4408,6 +4537,7 @@ _cairo_debug_print_pattern (FILE *file, const cairo_pattern_t *pattern)
     case CAIRO_PATTERN_TYPE_LINEAR: s = "linear"; break;
     case CAIRO_PATTERN_TYPE_RADIAL: s = "radial"; break;
     case CAIRO_PATTERN_TYPE_MESH: s = "mesh"; break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE: s = "raster"; break;
     default: s = "invalid"; ASSERT_NOT_REACHED; break;
     }
 
@@ -4442,6 +4572,9 @@ _cairo_debug_print_pattern (FILE *file, const cairo_pattern_t *pattern)
     default:
     case CAIRO_PATTERN_TYPE_SOLID:
        break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       _cairo_debug_print_raster_source_pattern (file, (cairo_raster_source_pattern_t *)pattern);
+       break;
     case CAIRO_PATTERN_TYPE_SURFACE:
        _cairo_debug_print_surface_pattern (file, (cairo_surface_pattern_t *)pattern);
        break;
index 08620e6..a58fbbf 100644 (file)
@@ -60,6 +60,7 @@ typedef struct _cairo_pdf_group_resources {
     cairo_array_t alphas;
     cairo_array_t smasks;
     cairo_array_t patterns;
+    cairo_array_t shadings;
     cairo_array_t xobjects;
     cairo_array_t fonts;
 } cairo_pdf_group_resources_t;
@@ -74,11 +75,15 @@ typedef struct _cairo_pdf_source_surface_entry {
     cairo_pdf_resource_t surface_res;
     int width;
     int height;
+    double x_offset;
+    double y_offset;
     cairo_rectangle_int_t extents;
 } cairo_pdf_source_surface_entry_t;
 
 typedef struct _cairo_pdf_source_surface {
+    cairo_pattern_type_t type;
     cairo_surface_t *surface;
+    cairo_pattern_t *raster_pattern;
     cairo_pdf_source_surface_entry_t *hash_entry;
 } cairo_pdf_source_surface_t;
 
@@ -89,6 +94,7 @@ typedef struct _cairo_pdf_pattern {
     cairo_pattern_t *pattern;
     cairo_pdf_resource_t pattern_res;
     cairo_pdf_resource_t gstate_res;
+    cairo_bool_t is_shading;
 } cairo_pdf_pattern_t;
 
 typedef enum _cairo_pdf_operation {
index 988a215..a017601 100644 (file)
@@ -59,7 +59,7 @@
 #include "cairo-paginated-private.h"
 #include "cairo-scaled-font-subsets-private.h"
 #include "cairo-surface-clipper-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
 #include "cairo-surface-subsurface-private.h"
 #include "cairo-type3-glyph-surface-private.h"
 
  *
  * The PDF surface is used to render cairo graphics to Adobe
  * PDF files and is a multi-page vector surface backend.
- */
+ **/
 
 static cairo_bool_t
 _cairo_pdf_surface_get_extents (void                   *abstract_surface,
@@ -141,7 +141,9 @@ _cairo_pdf_surface_get_extents (void                        *abstract_surface,
  *
  * Defined if the PDF surface backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.2
+ **/
 
 static const cairo_pdf_version_t _cairo_pdf_versions[] =
 {
@@ -157,6 +159,14 @@ static const char * _cairo_pdf_version_strings[CAIRO_PDF_VERSION_LAST] =
     "PDF 1.5"
 };
 
+static const char *_cairo_pdf_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    CAIRO_MIME_TYPE_JP2,
+    CAIRO_MIME_TYPE_UNIQUE_ID,
+    NULL
+};
+
 typedef struct _cairo_pdf_object {
     long offset;
 } cairo_pdf_object_t;
@@ -453,7 +463,7 @@ BAIL0:
  * occurs. You can use cairo_surface_status() to check for this.
  *
  * Since: 1.2
- */
+ **/
 cairo_surface_t *
 cairo_pdf_surface_create_for_stream (cairo_write_func_t                 write_func,
                                     void                       *closure,
@@ -715,6 +725,7 @@ _cairo_pdf_group_resources_init (cairo_pdf_group_resources_t *res)
     _cairo_array_init (&res->alphas, sizeof (double));
     _cairo_array_init (&res->smasks, sizeof (cairo_pdf_resource_t));
     _cairo_array_init (&res->patterns, sizeof (cairo_pdf_resource_t));
+    _cairo_array_init (&res->shadings, sizeof (cairo_pdf_resource_t));
     _cairo_array_init (&res->xobjects, sizeof (cairo_pdf_resource_t));
     _cairo_array_init (&res->fonts, sizeof (cairo_pdf_font_t));
 }
@@ -725,6 +736,7 @@ _cairo_pdf_group_resources_fini (cairo_pdf_group_resources_t *res)
     _cairo_array_fini (&res->alphas);
     _cairo_array_fini (&res->smasks);
     _cairo_array_fini (&res->patterns);
+    _cairo_array_fini (&res->shadings);
     _cairo_array_fini (&res->xobjects);
     _cairo_array_fini (&res->fonts);
 }
@@ -740,6 +752,7 @@ _cairo_pdf_group_resources_clear (cairo_pdf_group_resources_t *res)
     _cairo_array_truncate (&res->alphas, 0);
     _cairo_array_truncate (&res->smasks, 0);
     _cairo_array_truncate (&res->patterns, 0);
+    _cairo_array_truncate (&res->shadings, 0);
     _cairo_array_truncate (&res->xobjects, 0);
     _cairo_array_truncate (&res->fonts, 0);
 }
@@ -796,6 +809,14 @@ _cairo_pdf_surface_add_pattern (cairo_pdf_surface_t  *surface,
 }
 
 static cairo_status_t
+_cairo_pdf_surface_add_shading (cairo_pdf_surface_t  *surface,
+                               cairo_pdf_resource_t  shading)
+{
+    return _cairo_array_append (&(surface->resources.shadings), &shading);
+}
+
+
+static cairo_status_t
 _cairo_pdf_surface_add_xobject (cairo_pdf_surface_t  *surface,
                                cairo_pdf_resource_t  xobject)
 {
@@ -908,7 +929,7 @@ _cairo_pdf_surface_emit_group_resources (cairo_pdf_surface_t         *surface,
 {
     int num_alphas, num_smasks, num_resources, i;
     double alpha;
-    cairo_pdf_resource_t *smask, *pattern, *xobject;
+    cairo_pdf_resource_t *smask, *pattern, *shading, *xobject;
     cairo_pdf_font_t *font;
 
     _cairo_output_stream_printf (surface->output, "<<\n");
@@ -960,6 +981,21 @@ _cairo_pdf_surface_emit_group_resources (cairo_pdf_surface_t         *surface,
                                     " >>\n");
     }
 
+    num_resources = _cairo_array_num_elements (&res->shadings);
+    if (num_resources > 0) {
+       _cairo_output_stream_printf (surface->output,
+                                    "   /Shading <<");
+       for (i = 0; i < num_resources; i++) {
+           shading = _cairo_array_index (&res->shadings, i);
+           _cairo_output_stream_printf (surface->output,
+                                        " /sh%d %d 0 R",
+                                        shading->id, shading->id);
+       }
+
+       _cairo_output_stream_printf (surface->output,
+                                    " >>\n");
+    }
+
     num_resources = _cairo_array_num_elements (&res->xobjects);
     if (num_resources > 0) {
        _cairo_output_stream_printf (surface->output,
@@ -1078,6 +1114,67 @@ _cairo_pdf_source_surface_init_key (cairo_pdf_source_surface_entry_t *key)
 }
 
 static cairo_int_status_t
+_cairo_pdf_surface_acquire_source_image_from_pattern (cairo_pdf_surface_t          *surface,
+                                                     const cairo_pattern_t        *pattern,
+                                                     const cairo_rectangle_int_t  *extents,
+                                                     cairo_image_surface_t       **image,
+                                                     void                        **image_extra)
+{
+    switch (pattern->type) {
+    case CAIRO_PATTERN_TYPE_SURFACE: {
+       cairo_surface_pattern_t *surf_pat = (cairo_surface_pattern_t *) pattern;
+       return _cairo_surface_acquire_source_image (surf_pat->surface, image, image_extra);
+    } break;
+
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE: {
+       cairo_surface_t *surf;
+       surf = _cairo_raster_source_pattern_acquire (pattern, &surface->base, extents);
+       if (!surf)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+       assert (cairo_surface_get_type (surf) == CAIRO_SURFACE_TYPE_IMAGE);
+       *image = (cairo_image_surface_t *) surf;
+    } break;
+
+    case CAIRO_PATTERN_TYPE_SOLID:
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+    default:
+       ASSERT_NOT_REACHED;
+       break;
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_pdf_surface_release_source_image_from_pattern (cairo_pdf_surface_t          *surface,
+                                                     const cairo_pattern_t        *pattern,
+                                                     cairo_image_surface_t        *image,
+                                                     void                         *image_extra)
+{
+    switch (pattern->type) {
+    case CAIRO_PATTERN_TYPE_SURFACE: {
+       cairo_surface_pattern_t *surf_pat = (cairo_surface_pattern_t *) pattern;
+       _cairo_surface_release_source_image (surf_pat->surface, image, image_extra);
+    } break;
+
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       _cairo_raster_source_pattern_release (pattern, &image->base);
+       break;
+
+    case CAIRO_PATTERN_TYPE_SOLID:
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+    default:
+
+       ASSERT_NOT_REACHED;
+       break;
+    }
+}
+
+static cairo_int_status_t
 _get_jpx_image_info (cairo_surface_t            *source,
                     cairo_image_info_t         *info,
                     const unsigned char        **mime_data,
@@ -1124,23 +1221,28 @@ _get_source_surface_size (cairo_surface_t         *source,
             *width  = extents->width;
             *height = extents->height;
        } else {
+           cairo_surface_t *free_me = NULL;
            cairo_rectangle_int_t surf_extents;
            cairo_box_t box;
            cairo_bool_t bounded;
 
            if (_cairo_surface_is_snapshot (source))
-               source = _cairo_surface_snapshot_get_target (source);
+               free_me = source = _cairo_surface_snapshot_get_target (source);
 
            status = _cairo_recording_surface_get_ink_bbox ((cairo_recording_surface_t *)source,
                                                            &box, NULL);
-           if (unlikely (status))
+           if (unlikely (status)) {
+               cairo_surface_destroy (free_me);
                return status;
-
-           _cairo_box_round_to_rectangle (&box, extents);
+           }
 
            bounded = _cairo_surface_get_extents (source, &surf_extents);
+           cairo_surface_destroy (free_me);
+
            *width = surf_extents.width;
            *height = surf_extents.height;
+
+           _cairo_box_round_to_rectangle (&box, extents);
        }
 
        return CAIRO_STATUS_SUCCESS;
@@ -1176,23 +1278,56 @@ _get_source_surface_size (cairo_surface_t         *source,
     return CAIRO_STATUS_SUCCESS;
 }
 
+/**
+ * _cairo_pdf_surface_add_source_surface:
+ * @surface: the pdf surface
+ * @source_surface: A #cairo_surface_t to use as the source surface
+ * @source_pattern: A #cairo_pattern_t of type SURFACE or RASTER_SOURCE to use as the source
+ * @filter: filter type of the source pattern
+ * @stencil_mask: if true, the surface will be written to the PDF as an /ImageMask
+ * @extents: extents of the operation that is using this source
+ * @surface_res: return PDF resource number of the surface
+ * @width: returns width of surface
+ * @height: returns height of surface
+ * @x_offset: x offset of surface
+ * @t_offset: y offset of surface
+ * @source_extents: returns extents of source (either ink extents or extents needed to cover @extents)
+ *
+ * Add surface or raster_source pattern to list of surfaces to be
+ * written to the PDF file when the current page is finished. Returns
+ * a PDF resource to reference the image. A hash table of all images
+ * in the PDF files (keyed by CAIRO_MIME_TYPE_UNIQUE_ID or surface
+ * unique_id) to ensure surfaces with the same id are only written
+ * once to the PDF file.
+ *
+ * Only one of @source_pattern or @source_surface is to be
+ * specified. Set the other to NULL.
+ **/
 static cairo_status_t
-_cairo_pdf_surface_add_source_surface (cairo_pdf_surface_t     *surface,
-                                      cairo_surface_t          *source,
-                                      cairo_filter_t            filter,
-                                      cairo_bool_t              stencil_mask,
-                                      cairo_pdf_resource_t     *surface_res,
-                                      int                      *width,
-                                      int                      *height,
-                                      cairo_rectangle_int_t    *extents)
+_cairo_pdf_surface_add_source_surface (cairo_pdf_surface_t         *surface,
+                                      cairo_surface_t              *source_surface,
+                                      const cairo_pattern_t        *source_pattern,
+                                      cairo_filter_t                filter,
+                                      cairo_bool_t                  stencil_mask,
+                                      const cairo_rectangle_int_t  *extents,
+                                      cairo_pdf_resource_t         *surface_res,
+                                      int                          *width,
+                                      int                          *height,
+                                      double                       *x_offset,
+                                      double                       *y_offset,
+                                      cairo_rectangle_int_t        *source_extents)
 {
     cairo_pdf_source_surface_t src_surface;
     cairo_pdf_source_surface_entry_t surface_key;
     cairo_pdf_source_surface_entry_t *surface_entry;
     cairo_status_t status;
     cairo_bool_t interpolate;
-    const unsigned char *unique_id;
-    unsigned long unique_id_length;
+    unsigned char *unique_id;
+    unsigned long unique_id_length = 0;
+    cairo_box_t box;
+    cairo_rectangle_int_t rect;
+    cairo_image_surface_t *image;
+    void *image_extra;
 
     switch (filter) {
     default:
@@ -1208,9 +1343,30 @@ _cairo_pdf_surface_add_source_surface (cairo_pdf_surface_t       *surface,
        break;
     }
 
-    surface_key.id  = source->unique_id;
+    *x_offset = 0;
+    *y_offset = 0;
+    if (source_pattern) {
+       if (source_pattern->type == CAIRO_PATTERN_TYPE_RASTER_SOURCE) {
+           /* get the operation extents in pattern space */
+           _cairo_box_from_rectangle (&box, extents);
+           _cairo_matrix_transform_bounding_box_fixed (&source_pattern->matrix, &box, NULL);
+           _cairo_box_round_to_rectangle (&box, &rect);
+           status = _cairo_pdf_surface_acquire_source_image_from_pattern (surface, source_pattern,
+                                                                          &rect, &image,
+                                                                          &image_extra);
+           if (unlikely (status))
+               return status;
+           source_surface = &image->base;
+           cairo_surface_get_device_offset (source_surface, x_offset, y_offset);
+       } else {
+           cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) source_pattern;
+           source_surface = surface_pattern->surface;
+       }
+    }
+
+    surface_key.id  = source_surface->unique_id;
     surface_key.interpolate = interpolate;
-    cairo_surface_get_mime_data (source, CAIRO_MIME_TYPE_UNIQUE_ID,
+    cairo_surface_get_mime_data (source_surface, CAIRO_MIME_TYPE_UNIQUE_ID,
                                 (const unsigned char **) &surface_key.unique_id,
                                 &surface_key.unique_id_length);
     _cairo_pdf_source_surface_init_key (&surface_key);
@@ -1219,78 +1375,117 @@ _cairo_pdf_surface_add_source_surface (cairo_pdf_surface_t     *surface,
        *surface_res = surface_entry->surface_res;
        *width = surface_entry->width;
        *height = surface_entry->height;
-       *extents = surface_entry->extents;
+       *source_extents = surface_entry->extents;
+       status = CAIRO_STATUS_SUCCESS;
+    } else {
+       status = _get_source_surface_size (source_surface,
+                                          width,
+                                          height,
+                                          source_extents);
+       if (unlikely(status))
+           goto release_source;
+
+       if (surface_key.unique_id && surface_key.unique_id_length > 0) {
+           unique_id = _cairo_malloc (surface_key.unique_id_length);
+           if (unique_id == NULL) {
+               status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+               goto release_source;
+           }
 
-       return CAIRO_STATUS_SUCCESS;
+           unique_id_length = surface_key.unique_id_length;
+           memcpy (unique_id, surface_key.unique_id, unique_id_length);
+       } else {
+           unique_id = NULL;
+           unique_id_length = 0;
+       }
     }
 
+release_source:
+    if (source_pattern && source_pattern->type == CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       _cairo_pdf_surface_release_source_image_from_pattern (surface, source_pattern, image, image_extra);
+
+    if (status || surface_entry)
+       return status;
+
     surface_entry = malloc (sizeof (cairo_pdf_source_surface_entry_t));
-    if (surface_entry == NULL)
-       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+    if (surface_entry == NULL) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto fail1;
+    }
 
     surface_entry->id = surface_key.id;
     surface_entry->interpolate = interpolate;
     surface_entry->stencil_mask = stencil_mask;
-    cairo_surface_get_mime_data (source, CAIRO_MIME_TYPE_UNIQUE_ID,
-                                &unique_id, &unique_id_length);
-    if (unique_id && unique_id_length > 0) {
-       surface_entry->unique_id = malloc (unique_id_length);
-       if (surface_entry->unique_id == NULL) {
-           cairo_surface_destroy (source);
-           free (surface_entry);
-           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-       }
+    surface_entry->unique_id_length = unique_id_length;
+    surface_entry->unique_id = unique_id;
+    surface_entry->width = *width;
+    surface_entry->height = *height;
+    surface_entry->x_offset = *x_offset;
+    surface_entry->y_offset = *y_offset;
+    surface_entry->extents = *source_extents;
+    _cairo_pdf_source_surface_init_key (surface_entry);
+
+    src_surface.hash_entry = surface_entry;
+    if (source_pattern && source_pattern->type == CAIRO_PATTERN_TYPE_RASTER_SOURCE) {
+       src_surface.type = CAIRO_PATTERN_TYPE_RASTER_SOURCE;
+       src_surface.surface = NULL;
+       status = _cairo_pattern_create_copy (&src_surface.raster_pattern, source_pattern);
+       if (unlikely (status))
+           goto fail2;
 
-       surface_entry->unique_id_length = unique_id_length;
-       memcpy (surface_entry->unique_id, unique_id, unique_id_length);
     } else {
-       surface_entry->unique_id = NULL;
-       surface_entry->unique_id_length = 0;
+       src_surface.type = CAIRO_PATTERN_TYPE_SURFACE;
+       src_surface.surface = cairo_surface_reference (source_surface);
+       src_surface.raster_pattern = NULL;
     }
-    _cairo_pdf_source_surface_init_key (surface_entry);
 
-    src_surface.hash_entry = surface_entry;
-    src_surface.surface = cairo_surface_reference (source);
     surface_entry->surface_res = _cairo_pdf_surface_new_object (surface);
     if (surface_entry->surface_res.id == 0) {
-       cairo_surface_destroy (source);
-       free (surface_entry);
-       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto fail3;
     }
 
-    status = _get_source_surface_size (source,
-                                      &surface_entry->width,
-                                      &surface_entry->height,
-                                      &surface_entry->extents);
-
     status = _cairo_array_append (&surface->page_surfaces, &src_surface);
-    if (unlikely (status)) {
-       cairo_surface_destroy (source);
-       free (surface_entry);
-       return status;
-    }
+    if (unlikely (status))
+       goto fail3;
 
     status = _cairo_hash_table_insert (surface->all_surfaces,
                                       &surface_entry->base);
+    if (unlikely(status))
+       goto fail3;
 
     *surface_res = surface_entry->surface_res;
-    *width = surface_entry->width;
-    *height = surface_entry->height;
-    *extents = surface_entry->extents;
+
+    return status;
+
+fail3:
+    if (source_pattern && source_pattern->type == CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       cairo_pattern_destroy (src_surface.raster_pattern);
+    else
+       cairo_surface_destroy (src_surface.surface);
+
+fail2:
+    free (surface_entry);
+
+fail1:
+    free (unique_id);
 
     return status;
 }
 
 static cairo_status_t
-_cairo_pdf_surface_add_pdf_pattern (cairo_pdf_surface_t                *surface,
-                                   const cairo_pattern_t       *pattern,
-                                   const cairo_rectangle_int_t *extents,
-                                   cairo_pdf_resource_t        *pattern_res,
-                                   cairo_pdf_resource_t        *gstate_res)
+_cairo_pdf_surface_add_pdf_pattern_or_shading (cairo_pdf_surface_t        *surface,
+                                              const cairo_pattern_t       *pattern,
+                                              const cairo_rectangle_int_t *extents,
+                                              cairo_bool_t                 is_shading,
+                                              cairo_pdf_resource_t        *pattern_res,
+                                              cairo_pdf_resource_t        *gstate_res)
 {
     cairo_pdf_pattern_t pdf_pattern;
     cairo_status_t status;
 
+    pdf_pattern.is_shading = is_shading;
+
     /* Solid colors are emitted into the content stream */
     if (pattern->type == CAIRO_PATTERN_TYPE_SOLID) {
        pattern_res->id = 0;
@@ -1363,6 +1558,36 @@ _get_bbox_from_extents (double                       surface_height,
 }
 
 static cairo_status_t
+_cairo_pdf_surface_add_pdf_shading (cairo_pdf_surface_t                *surface,
+                                   const cairo_pattern_t       *pattern,
+                                   const cairo_rectangle_int_t *extents,
+                                   cairo_pdf_resource_t        *shading_res,
+                                   cairo_pdf_resource_t        *gstate_res)
+{
+    return _cairo_pdf_surface_add_pdf_pattern_or_shading (surface,
+                                                         pattern,
+                                                         extents,
+                                                         TRUE,
+                                                         shading_res,
+                                                         gstate_res);
+}
+
+static cairo_status_t
+_cairo_pdf_surface_add_pdf_pattern (cairo_pdf_surface_t                *surface,
+                                   const cairo_pattern_t       *pattern,
+                                   const cairo_rectangle_int_t *extents,
+                                   cairo_pdf_resource_t        *pattern_res,
+                                   cairo_pdf_resource_t        *gstate_res)
+{
+    return _cairo_pdf_surface_add_pdf_pattern_or_shading (surface,
+                                                         pattern,
+                                                         extents,
+                                                         FALSE,
+                                                         pattern_res,
+                                                         gstate_res);
+}
+
+static cairo_status_t
 _cairo_pdf_surface_open_stream (cairo_pdf_surface_t    *surface,
                                cairo_pdf_resource_t    *resource,
                                cairo_bool_t             compressed,
@@ -1506,6 +1731,7 @@ _cairo_pdf_surface_write_memory_stream (cairo_pdf_surface_t         *surface,
                                 "   /Group <<\n"
                                 "      /Type /Group\n"
                                 "      /S /Transparency\n"
+                                "      /I true\n"
                                 "      /CS /DeviceRGB\n",
                                 bbox->p1.x, bbox->p1.y, bbox->p2.x, bbox->p2.y);
 
@@ -1654,6 +1880,7 @@ _cairo_pdf_surface_open_content_stream (cairo_pdf_surface_t       *surface,
                                            "   /Group <<\n"
                                            "      /Type /Group\n"
                                            "      /S /Transparency\n"
+                                           "      /I true\n"
                                            "      /CS /DeviceRGB\n"
                                            "   >>\n"
                                            "   /Resources %d 0 R\n",
@@ -1875,6 +2102,91 @@ _cairo_pdf_surface_supports_fine_grained_fallbacks (void *abstract_surface)
     return TRUE;
 }
 
+static cairo_status_t
+_cairo_pdf_surface_add_padded_image_surface (cairo_pdf_surface_t          *surface,
+                                            const cairo_pattern_t        *source,
+                                            const cairo_rectangle_int_t  *extents,
+                                            cairo_pdf_resource_t         *surface_res,
+                                            int                          *width,
+                                            int                          *height,
+                                            double                       *x_offset,
+                                            double                       *y_offset)
+{
+    cairo_image_surface_t *image;
+    cairo_surface_t *pad_image;
+    void *image_extra;
+    cairo_int_status_t status;
+    int w, h;
+    cairo_rectangle_int_t extents2;
+    cairo_box_t box;
+    cairo_rectangle_int_t rect;
+    cairo_surface_pattern_t pad_pattern;
+
+    status = _cairo_pdf_surface_acquire_source_image_from_pattern (surface, source, extents,
+                                                                  &image, &image_extra);
+    if (unlikely (status))
+        return status;
+
+    pad_image = &image->base;
+
+    /* get the operation extents in pattern space */
+    _cairo_box_from_rectangle (&box, extents);
+    _cairo_matrix_transform_bounding_box_fixed (&source->matrix, &box, NULL);
+    _cairo_box_round_to_rectangle (&box, &rect);
+
+    /* Check if image needs padding to fill extents */
+    w = image->width;
+    h = image->height;
+    if (_cairo_fixed_integer_ceil(box.p1.x) < 0 ||
+       _cairo_fixed_integer_ceil(box.p1.y) < 0 ||
+       _cairo_fixed_integer_floor(box.p2.y) > w ||
+       _cairo_fixed_integer_floor(box.p2.y) > h)
+    {
+       pad_image = _cairo_image_surface_create_with_content (cairo_surface_get_content (&image->base),
+                                                             rect.width,
+                                                             rect.height);
+       if (pad_image->status) {
+           status = pad_image->status;
+           goto BAIL;
+       }
+
+       _cairo_pattern_init_for_surface (&pad_pattern, &image->base);
+       cairo_matrix_init_translate (&pad_pattern.base.matrix, rect.x, rect.y);
+       pad_pattern.base.extend = CAIRO_EXTEND_PAD;
+       status = _cairo_surface_paint (pad_image,
+                                      CAIRO_OPERATOR_SOURCE, &pad_pattern.base,
+                                      NULL);
+        _cairo_pattern_fini (&pad_pattern.base);
+        if (unlikely (status))
+            goto BAIL;
+
+       cairo_surface_set_device_offset (pad_image, rect.x, rect.y);
+    }
+
+    status = _cairo_pdf_surface_add_source_surface (surface,
+                                                   pad_image,
+                                                   NULL,
+                                                   source->filter,
+                                                   FALSE,
+                                                   extents,
+                                                   surface_res,
+                                                   width,
+                                                   height,
+                                                   x_offset,
+                                                   y_offset,
+                                                   &extents2);
+    if (unlikely (status))
+        goto BAIL;
+
+BAIL:
+    if (pad_image != &image->base)
+        cairo_surface_destroy (pad_image);
+
+    _cairo_pdf_surface_release_source_image_from_pattern (surface, source, image, image_extra);
+
+    return status;
+}
+
 /* Emit alpha channel from the image into the given data, providing
  * an id that can be used to reference the resulting SMask object.
  *
@@ -2016,7 +2328,7 @@ _cairo_pdf_surface_emit_smask (cairo_pdf_surface_t        *surface,
  * can be used to reference the data in image_ret. */
 static cairo_status_t
 _cairo_pdf_surface_emit_image (cairo_pdf_surface_t     *surface,
-                               cairo_image_surface_t   *image,
+                               cairo_image_surface_t   *image_surf,
                                cairo_pdf_resource_t    *image_res,
                               cairo_filter_t           filter,
                               cairo_bool_t             stencil_mask)
@@ -2030,16 +2342,34 @@ _cairo_pdf_surface_emit_image (cairo_pdf_surface_t     *surface,
     cairo_bool_t need_smask;
     const char *interpolate = "true";
     cairo_image_color_t color;
+    cairo_image_surface_t *image;
 
-    /* These are the only image formats we currently support, (which
-     * makes things a lot simpler here). This is enforced through
-     * _cairo_pdf_surface_analyze_operation which only accept source surfaces of
-     * CONTENT_COLOR or CONTENT_COLOR_ALPHA.
-     */
-    assert (image->format == CAIRO_FORMAT_RGB24 ||
-           image->format == CAIRO_FORMAT_ARGB32 ||
-           image->format == CAIRO_FORMAT_A8 ||
-           image->format == CAIRO_FORMAT_A1);
+    image  = image_surf;
+    if (image->format != CAIRO_FORMAT_RGB24 &&
+       image->format != CAIRO_FORMAT_ARGB32 &&
+       image->format != CAIRO_FORMAT_A8 &&
+       image->format != CAIRO_FORMAT_A1)
+    {
+       cairo_surface_t *surf;
+       cairo_surface_pattern_t pattern;
+
+       surf = _cairo_image_surface_create_with_content (cairo_surface_get_content (&image_surf->base),
+                                                        image_surf->width,
+                                                        image_surf->height);
+       image = (cairo_image_surface_t *) surf;
+       if (surf->status) {
+           status = surf->status;
+           goto CLEANUP;
+       }
+
+       _cairo_pattern_init_for_surface (&pattern, &image_surf->base);
+       status = _cairo_surface_paint (surf,
+                                      CAIRO_OPERATOR_SOURCE, &pattern.base,
+                                      NULL);
+        _cairo_pattern_fini (&pattern.base);
+        if (unlikely (status))
+            goto CLEANUP;
+    }
 
     switch (filter) {
     case CAIRO_FILTER_GOOD:
@@ -2190,6 +2520,9 @@ _cairo_pdf_surface_emit_image (cairo_pdf_surface_t     *surface,
 CLEANUP_RGB:
     free (data);
 CLEANUP:
+    if (image != image_surf)
+       cairo_surface_destroy (&image->base);
+
     return status;
 }
 
@@ -2243,6 +2576,7 @@ _cairo_pdf_surface_emit_jpeg_image (cairo_pdf_surface_t   *surface,
     const unsigned char *mime_data;
     unsigned long mime_data_length;
     cairo_image_info_t info;
+    const char *colorspace;
 
     cairo_surface_get_mime_data (source, CAIRO_MIME_TYPE_JPEG,
                                 &mime_data, &mime_data_length);
@@ -2255,8 +2589,19 @@ _cairo_pdf_surface_emit_jpeg_image (cairo_pdf_surface_t   *surface,
     if (unlikely (status))
        return status;
 
-    if (info.num_components != 1 && info.num_components != 3)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
+    switch (info.num_components) {
+       case 1:
+           colorspace = "/DeviceGray";
+           break;
+       case 3:
+           colorspace = "/DeviceRGB";
+           break;
+       case 4:
+           colorspace = "/DeviceCMYK";
+           break;
+       default:
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
 
     status = _cairo_pdf_surface_open_stream (surface,
                                             &res,
@@ -2270,7 +2615,7 @@ _cairo_pdf_surface_emit_jpeg_image (cairo_pdf_surface_t   *surface,
                                             "   /Filter /DCTDecode\n",
                                             info.width,
                                             info.height,
-                                            info.num_components == 1 ? "/DeviceGray" : "/DeviceRGB",
+                                            colorspace,
                                             info.bits_per_component);
     if (unlikely (status))
        return status;
@@ -2282,135 +2627,48 @@ _cairo_pdf_surface_emit_jpeg_image (cairo_pdf_surface_t   *surface,
 }
 
 static cairo_status_t
-_cairo_pdf_surface_emit_image_surface (cairo_pdf_surface_t     *surface,
-                                      cairo_surface_t         *source,
-                                      cairo_pdf_resource_t     resource,
-                                      cairo_bool_t             interpolate,
-                                      cairo_bool_t             stencil_mask)
+_cairo_pdf_surface_emit_image_surface (cairo_pdf_surface_t        *surface,
+                                      cairo_pdf_source_surface_t *source)
 {
     cairo_image_surface_t *image;
     void *image_extra;
     cairo_int_status_t status;
 
-    if (!stencil_mask) {
-       status = _cairo_pdf_surface_emit_jpx_image (surface, source, resource);
-       if (status != CAIRO_INT_STATUS_UNSUPPORTED)
-           return status;
-
-       status = _cairo_pdf_surface_emit_jpeg_image (surface, source, resource);
-       if (status != CAIRO_INT_STATUS_UNSUPPORTED)
-           return status;
+    if (source->type == CAIRO_PATTERN_TYPE_SURFACE) {
+       status = _cairo_surface_acquire_source_image (source->surface, &image, &image_extra);
+    } else {
+       status = _cairo_pdf_surface_acquire_source_image_from_pattern (surface, source->raster_pattern,
+                                                                      &source->hash_entry->extents,
+                                                                      &image, &image_extra);
     }
-
-    status = _cairo_surface_acquire_source_image (source, &image, &image_extra);
     if (unlikely (status))
        return status;
 
-    status = _cairo_pdf_surface_emit_image (surface, image,
-                                           &resource, interpolate, stencil_mask);
-    if (unlikely (status))
-       goto BAIL;
-
-BAIL:
-    _cairo_surface_release_source_image (source, image, image_extra);
-
-    return status;
-}
-
-static cairo_status_t
-_cairo_pdf_surface_emit_padded_image_surface (cairo_pdf_surface_t     *surface,
-                                             cairo_pdf_pattern_t     *pdf_pattern,
-                                             cairo_pdf_resource_t    *resource,
-                                             int                     *width,
-                                             int                     *height,
-                                             int                     *origin_x,
-                                             int                     *origin_y)
-{
-    cairo_image_surface_t *image;
-    cairo_surface_t *pad_image;
-    void *image_extra;
-    cairo_int_status_t status;
-    cairo_surface_pattern_t *pattern = (cairo_surface_pattern_t *) pdf_pattern->pattern;
-    int x = 0;
-    int y = 0;
-    cairo_bool_t interpolate;
-
-    status = _cairo_surface_acquire_source_image (pattern->surface, &image, &image_extra);
-    if (unlikely (status))
-        return status;
-
-    pad_image = &image->base;
-    if (pattern->base.extend == CAIRO_EXTEND_PAD) {
-        cairo_box_t box;
-        cairo_rectangle_int_t rect;
-        cairo_surface_pattern_t pad_pattern;
-
-        /* get the operation extents in pattern space */
-        _cairo_box_from_rectangle (&box, &pdf_pattern->extents);
-        _cairo_matrix_transform_bounding_box_fixed (&pattern->base.matrix, &box, NULL);
-        _cairo_box_round_to_rectangle (&box, &rect);
-        x = -rect.x;
-        y = -rect.y;
-
-        pad_image = _cairo_image_surface_create_with_content (pattern->surface->content,
-                                                              rect.width,
-                                                              rect.height);
-        if (pad_image->status) {
-            status = pad_image->status;
-            goto BAIL;
-        }
-
-        _cairo_pattern_init_for_surface (&pad_pattern, &image->base);
-        cairo_matrix_init_translate (&pad_pattern.base.matrix, -x, -y);
-        pad_pattern.base.extend = CAIRO_EXTEND_PAD;
-        status = _cairo_surface_paint (pad_image,
-                                      CAIRO_OPERATOR_SOURCE, &pad_pattern.base,
-                                      NULL);
-        _cairo_pattern_fini (&pad_pattern.base);
-        if (unlikely (status))
-            goto BAIL;
-    }
-
-    switch (pdf_pattern->pattern->filter) {
-    default:
-    case CAIRO_FILTER_GOOD:
-    case CAIRO_FILTER_BEST:
-    case CAIRO_FILTER_BILINEAR:
-       interpolate = TRUE;
-       break;
-    case CAIRO_FILTER_FAST:
-    case CAIRO_FILTER_NEAREST:
-    case CAIRO_FILTER_GAUSSIAN:
-       interpolate = FALSE;
-       break;
-    }
+    if (!source->hash_entry->stencil_mask) {
+       status = _cairo_pdf_surface_emit_jpx_image (surface, &image->base, source->hash_entry->surface_res);
+       if (status != CAIRO_INT_STATUS_UNSUPPORTED)
+           goto release_source;
 
-    *resource = _cairo_pdf_surface_new_object (surface);
-    if (resource->id == 0) {
-       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
-       goto BAIL;
+       status = _cairo_pdf_surface_emit_jpeg_image (surface, &image->base, source->hash_entry->surface_res);
+       if (status != CAIRO_INT_STATUS_UNSUPPORTED)
+           goto release_source;
     }
 
-    status = _cairo_pdf_surface_emit_image (surface, (cairo_image_surface_t *)pad_image,
-                                            resource, interpolate, FALSE);
-    if (unlikely (status))
-        goto BAIL;
-
-    *width = ((cairo_image_surface_t *)pad_image)->width;
-    *height = ((cairo_image_surface_t *)pad_image)->height;
-    *origin_x = x;
-    *origin_y = y;
-
-BAIL:
-    if (pad_image != &image->base)
-        cairo_surface_destroy (pad_image);
+    status = _cairo_pdf_surface_emit_image (surface, image,
+                                           &source->hash_entry->surface_res,
+                                           source->hash_entry->interpolate,
+                                           source->hash_entry->stencil_mask);
 
-    _cairo_surface_release_source_image (pattern->surface, image, image_extra);
+release_source:
+    if (source->type == CAIRO_PATTERN_TYPE_SURFACE)
+       _cairo_surface_release_source_image (source->surface, image, image_extra);
+    else
+       _cairo_pdf_surface_release_source_image_from_pattern (surface, source->raster_pattern,
+                                                             image, image_extra);
 
     return status;
 }
 
-
 static cairo_status_t
 _cairo_pdf_surface_emit_recording_surface (cairo_pdf_surface_t        *surface,
                                           cairo_pdf_source_surface_t *pdf_source)
@@ -2421,10 +2679,13 @@ _cairo_pdf_surface_emit_recording_surface (cairo_pdf_surface_t        *surface,
     cairo_box_double_t bbox;
     cairo_int_status_t status;
     int alpha = 0;
-    cairo_surface_t *source = pdf_source->surface;
+    cairo_surface_t *free_me = NULL;
+    cairo_surface_t *source;
 
+    assert (pdf_source->type == CAIRO_PATTERN_TYPE_SURFACE);
+    source = pdf_source->surface;
     if (_cairo_surface_is_snapshot (source))
-       source = _cairo_surface_snapshot_get_target (source);
+       free_me = source = _cairo_surface_snapshot_get_target (source);
 
     old_width = surface->width;
     old_height = surface->height;
@@ -2445,12 +2706,12 @@ _cairo_pdf_surface_emit_recording_surface (cairo_pdf_surface_t        *surface,
     _get_bbox_from_extents (pdf_source->hash_entry->height, &pdf_source->hash_entry->extents, &bbox);
     status = _cairo_pdf_surface_open_content_stream (surface, &bbox, &pdf_source->hash_entry->surface_res, TRUE);
     if (unlikely (status))
-       return status;
+       goto err;
 
     if (cairo_surface_get_content (source) == CAIRO_CONTENT_COLOR) {
        status = _cairo_pdf_surface_add_alpha (surface, 1.0, &alpha);
        if (unlikely (status))
-           return status;
+           goto err;
 
        _cairo_output_stream_printf (surface->output,
                                     "q /a%d gs 0 0 0 rg 0 0 %f %f re f Q\n",
@@ -2465,7 +2726,7 @@ _cairo_pdf_surface_emit_recording_surface (cairo_pdf_surface_t        *surface,
                                                     CAIRO_RECORDING_REGION_NATIVE);
     assert (status != CAIRO_INT_STATUS_UNSUPPORTED);
     if (unlikely (status))
-       return status;
+       goto err;
 
     status = _cairo_pdf_surface_close_content_stream (surface);
 
@@ -2476,6 +2737,8 @@ _cairo_pdf_surface_emit_recording_surface (cairo_pdf_surface_t        *surface,
                                          old_height);
     surface->paginated_mode = old_paginated_mode;
 
+err:
+    cairo_surface_destroy (free_me);
     return status;
 }
 
@@ -2549,68 +2812,66 @@ static cairo_status_t
 _cairo_pdf_surface_emit_surface (cairo_pdf_surface_t        *surface,
                                 cairo_pdf_source_surface_t *src_surface)
 {
-    if (src_surface->surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
-       if (src_surface->surface->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
-           cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) src_surface->surface;
-           return _cairo_pdf_surface_emit_recording_subsurface (surface,
-                                                                sub->target,
-                                                                &sub->extents,
-                                                                src_surface->hash_entry->surface_res);
-       } else {
-           return _cairo_pdf_surface_emit_recording_surface (surface,
-                                                             src_surface);
+    if (src_surface->type == CAIRO_PATTERN_TYPE_SURFACE) {
+       if (src_surface->surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
+           if (src_surface->surface->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
+               cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) src_surface->surface;
+               return _cairo_pdf_surface_emit_recording_subsurface (surface,
+                                                                    sub->target,
+                                                                    &sub->extents,
+                                                                    src_surface->hash_entry->surface_res);
+           } else {
+               return _cairo_pdf_surface_emit_recording_surface (surface,
+                                                                 src_surface);
+           }
        }
-    } else {
-       return _cairo_pdf_surface_emit_image_surface (surface,
-                                                     src_surface->surface,
-                                                     src_surface->hash_entry->surface_res,
-                                                     src_surface->hash_entry->interpolate,
-                                                     src_surface->hash_entry->stencil_mask);
     }
+    return _cairo_pdf_surface_emit_image_surface (surface, src_surface);
 }
 
 static cairo_status_t
 _cairo_pdf_surface_emit_surface_pattern (cairo_pdf_surface_t   *surface,
                                         cairo_pdf_pattern_t    *pdf_pattern)
 {
-    cairo_surface_pattern_t *pattern = (cairo_surface_pattern_t *) pdf_pattern->pattern;
+    cairo_pattern_t *pattern = pdf_pattern->pattern;
     cairo_status_t status;
     cairo_pdf_resource_t pattern_resource = {0};
     cairo_matrix_t cairo_p2d, pdf_p2d;
-    cairo_extend_t extend = cairo_pattern_get_extend (&pattern->base);
+    cairo_extend_t extend = cairo_pattern_get_extend (pattern);
     double xstep, ystep;
     cairo_rectangle_int_t pattern_extents;
     int pattern_width = 0; /* squelch bogus compiler warning */
     int pattern_height = 0; /* squelch bogus compiler warning */
-    int origin_x = 0; /* squelch bogus compiler warning */
-    int origin_y = 0; /* squelch bogus compiler warning */
+    double x_offset;
+    double y_offset;
     char draw_surface[200];
     cairo_box_double_t     bbox;
 
-    if (pattern->base.extend == CAIRO_EXTEND_PAD &&
-       pattern->surface->type != CAIRO_SURFACE_TYPE_RECORDING)
-    {
-       status = _cairo_pdf_surface_emit_padded_image_surface (surface,
-                                                              pdf_pattern,
-                                                              &pattern_resource,
-                                                              &pattern_width,
-                                                              &pattern_height,
-                                                              &origin_x,
-                                                              &origin_y);
+    if (pattern->extend == CAIRO_EXTEND_PAD) {
+       status = _cairo_pdf_surface_add_padded_image_surface (surface,
+                                                             pattern,
+                                                             &pdf_pattern->extents,
+                                                             &pattern_resource,
+                                                             &pattern_width,
+                                                             &pattern_height,
+                                                             &x_offset,
+                                                             &y_offset);
        pattern_extents.x = 0;
        pattern_extents.y = 0;
        pattern_extents.width = pattern_width;
        pattern_extents.height = pattern_height;
-    }
-    else
-    {
+    } else {
        status = _cairo_pdf_surface_add_source_surface (surface,
-                                                       pattern->surface,
-                                                       pdf_pattern->pattern->filter,
+                                                       NULL,
+                                                       pattern,
+                                                       pattern->filter,
                                                        FALSE,
+                                                       &pdf_pattern->extents,
                                                        &pattern_resource,
                                                        &pattern_width,
                                                        &pattern_height,
+                                                       &x_offset,
+                                                       &y_offset,
                                                        &pattern_extents);
     }
     if (unlikely (status))
@@ -2634,7 +2895,7 @@ _cairo_pdf_surface_emit_surface_pattern (cairo_pdf_surface_t      *surface,
         */
        double x1 = 0.0, y1 = 0.0;
        double x2 = surface->width, y2 = surface->height;
-       _cairo_matrix_transform_bounding_box (&pattern->base.matrix,
+       _cairo_matrix_transform_bounding_box (&pattern->matrix,
                                              &x1, &y1, &x2, &y2,
                                              NULL);
 
@@ -2693,13 +2954,13 @@ _cairo_pdf_surface_emit_surface_pattern (cairo_pdf_surface_t    *surface,
      * have to scale it up by the image width and height to fill our
      * pattern cell.
      */
-    cairo_p2d = pattern->base.matrix;
+    cairo_p2d = pattern->matrix;
     status = cairo_matrix_invert (&cairo_p2d);
     /* cairo_pattern_set_matrix ensures the matrix is invertible */
     assert (status == CAIRO_STATUS_SUCCESS);
 
     cairo_matrix_multiply (&pdf_p2d, &cairo_p2d, &surface->cairo_to_pdf);
-    cairo_matrix_translate (&pdf_p2d, -origin_x, -origin_y);
+    cairo_matrix_translate (&pdf_p2d, -x_offset, -y_offset);
     cairo_matrix_translate (&pdf_p2d, 0.0, pattern_height);
     cairo_matrix_scale (&pdf_p2d, 1.0, -1.0);
 
@@ -2726,7 +2987,8 @@ _cairo_pdf_surface_emit_surface_pattern (cairo_pdf_surface_t      *surface,
     if (unlikely (status))
        return status;
 
-    if (pattern->surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
+    if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE &&
+       ((cairo_surface_pattern_t *) pattern)->surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
        snprintf(draw_surface,
                 sizeof (draw_surface),
                 "/x%d Do\n",
@@ -3173,11 +3435,27 @@ _cairo_pdf_surface_emit_repeating_function (cairo_pdf_surface_t      *surface,
 
 static cairo_status_t
 cairo_pdf_surface_emit_transparency_group (cairo_pdf_surface_t  *surface,
+                                          cairo_pdf_pattern_t  *pdf_pattern,
                                           cairo_pdf_resource_t  gstate_resource,
                                           cairo_pdf_resource_t  gradient_mask)
 {
     cairo_pdf_resource_t smask_resource;
     cairo_status_t status;
+    char buf[100];
+
+    if (pdf_pattern->is_shading) {
+       snprintf(buf, sizeof(buf),
+                "         /Shading\n"
+                "            << /sh%d %d 0 R >>\n",
+                gradient_mask.id,
+                gradient_mask.id);
+    } else {
+       snprintf(buf, sizeof(buf),
+                "         /Pattern\n"
+                "            << /p%d %d 0 R >>\n",
+                gradient_mask.id,
+                gradient_mask.id);
+    }
 
     status = _cairo_pdf_surface_open_stream (surface,
                                             NULL,
@@ -3190,34 +3468,39 @@ cairo_pdf_surface_emit_transparency_group (cairo_pdf_surface_t  *surface,
                                             "      << /ExtGState\n"
                                             "            << /a0 << /ca 1 /CA 1 >>"
                                             "      >>\n"
-                                            "         /Pattern\n"
-                                            "            << /p%d %d 0 R >>\n"
+                                            "%s"
                                             "      >>\n"
                                             "   /Group\n"
                                             "      << /Type /Group\n"
                                             "         /S /Transparency\n"
+                                            "         /I true\n"
                                             "         /CS /DeviceGray\n"
                                             "      >>\n",
                                             surface->width,
                                             surface->height,
-                                            gradient_mask.id,
-                                            gradient_mask.id);
+                                            buf);
     if (unlikely (status))
        return status;
 
-    _cairo_output_stream_printf (surface->output,
-                                 "q\n"
-                                 "/a0 gs\n"
-                                 "/Pattern cs /p%d scn\n"
-                                 "0 0 %f %f re\n"
-                                 "f\n"
-                                 "Q\n",
-                                 gradient_mask.id,
-                                 surface->width,
-                                 surface->height);
-
-     status = _cairo_pdf_surface_close_stream (surface);
-     if (unlikely (status))
+    if (pdf_pattern->is_shading) {
+       _cairo_output_stream_printf (surface->output,
+                                    "/a0 gs /sh%d sh\n",
+                                    gradient_mask.id);
+    } else {
+       _cairo_output_stream_printf (surface->output,
+                                    "q\n"
+                                    "/a0 gs\n"
+                                    "/Pattern cs /p%d scn\n"
+                                    "0 0 %f %f re\n"
+                                    "f\n"
+                                    "Q\n",
+                                    gradient_mask.id,
+                                    surface->width,
+                                    surface->height);
+    }
+
+    status = _cairo_pdf_surface_close_stream (surface);
+    if (unlikely (status))
        return status;
 
     smask_resource = _cairo_pdf_surface_new_object (surface);
@@ -3264,15 +3547,19 @@ _cairo_pdf_surface_output_gradient (cairo_pdf_surface_t        *surface,
                                    cairo_pdf_resource_t        color_function)
 {
     _cairo_output_stream_printf (surface->output,
-                                 "%d 0 obj\n"
-                                 "<< /Type /Pattern\n"
-                                 "   /PatternType 2\n"
-                                 "   /Matrix [ %f %f %f %f %f %f ]\n"
-                                 "   /Shading\n",
-                                pattern_resource.id,
-                                 pat_to_pdf->xx, pat_to_pdf->yx,
-                                 pat_to_pdf->xy, pat_to_pdf->yy,
-                                 pat_to_pdf->x0, pat_to_pdf->y0);
+                                 "%d 0 obj\n",
+                                pattern_resource.id);
+
+    if (!pdf_pattern->is_shading) {
+       _cairo_output_stream_printf (surface->output,
+                                    "<< /Type /Pattern\n"
+                                    "   /PatternType 2\n"
+                                    "   /Matrix [ %f %f %f %f %f %f ]\n"
+                                    "   /Shading\n",
+                                    pat_to_pdf->xx, pat_to_pdf->yx,
+                                    pat_to_pdf->xy, pat_to_pdf->yy,
+                                    pat_to_pdf->x0, pat_to_pdf->y0);
+    }
 
     if (pdf_pattern->pattern->type == CAIRO_PATTERN_TYPE_LINEAR) {
        _cairo_output_stream_printf (surface->output,
@@ -3308,10 +3595,14 @@ _cairo_pdf_surface_output_gradient (cairo_pdf_surface_t        *surface,
 
     _cairo_output_stream_printf (surface->output,
                                 "         /Function %d 0 R\n"
-                                 "      >>\n"
-                                 ">>\n"
-                                 "endobj\n",
+                                 "      >>\n",
                                 color_function.id);
+
+    if (!pdf_pattern->is_shading) {
+       _cairo_output_stream_printf (surface->output,
+                                    ">>\n"
+                                    "endobj\n");
+    }
 }
 
 static cairo_status_t
@@ -3449,11 +3740,8 @@ _cairo_pdf_surface_emit_gradient (cairo_pdf_surface_t    *surface,
                                            &pat_to_pdf, &start, &end, domain,
                                            "/DeviceGray", alpha_function);
 
-        status = _cairo_pdf_surface_add_pattern (surface, mask_resource);
-        if (unlikely (status))
-            return status;
-
        status = cairo_pdf_surface_emit_transparency_group (surface,
+                                                           pdf_pattern,
                                                            pdf_pattern->gstate_res,
                                                            mask_resource);
        if (unlikely (status))
@@ -3598,6 +3886,7 @@ _cairo_pdf_surface_emit_mesh_pattern (cairo_pdf_surface_t    *surface,
                                     res.id);
 
        status = cairo_pdf_surface_emit_transparency_group (surface,
+                                                           pdf_pattern,
                                                            pdf_pattern->gstate_res,
                                                            mask_resource);
        if (unlikely (status))
@@ -3626,6 +3915,7 @@ _cairo_pdf_surface_emit_pattern (cairo_pdf_surface_t *surface, cairo_pdf_pattern
        break;
 
     case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        status = _cairo_pdf_surface_emit_surface_pattern (surface, pdf_pattern);
        break;
 
@@ -3652,39 +3942,64 @@ _cairo_pdf_surface_emit_pattern (cairo_pdf_surface_t *surface, cairo_pdf_pattern
 }
 
 static cairo_status_t
-_cairo_pdf_surface_paint_surface_pattern (cairo_pdf_surface_t     *surface,
-                                         cairo_surface_pattern_t *source,
-                                         cairo_bool_t             stencil_mask)
+_cairo_pdf_surface_paint_surface_pattern (cairo_pdf_surface_t          *surface,
+                                         const cairo_pattern_t        *source,
+                                         const cairo_rectangle_int_t  *extents,
+                                         cairo_bool_t                  stencil_mask)
 {
     cairo_pdf_resource_t surface_res;
     int width, height;
     cairo_matrix_t cairo_p2d, pdf_p2d;
     cairo_status_t status;
     int alpha;
-    cairo_rectangle_int_t extents;
+    cairo_rectangle_int_t extents2;
+    double x_offset;
+    double y_offset;
 
-    status = _cairo_pdf_surface_add_source_surface (surface,
-                                                   source->surface,
-                                                   source->base.filter,
-                                                   stencil_mask,
-                                                   &surface_res,
-                                                   &width,
-                                                   &height,
-                                                   &extents);
+    if (source->extend == CAIRO_EXTEND_PAD &&
+       !(source->type == CAIRO_PATTERN_TYPE_SURFACE &&
+         ((cairo_surface_pattern_t *)source)->surface->type == CAIRO_SURFACE_TYPE_RECORDING))
+    {
+       status = _cairo_pdf_surface_add_padded_image_surface (surface,
+                                                             source,
+                                                             extents,
+                                                             &surface_res,
+                                                             &width,
+                                                             &height,
+                                                             &x_offset,
+                                                             &y_offset);
+    } else {
+       status = _cairo_pdf_surface_add_source_surface (surface,
+                                                       NULL,
+                                                       source,
+                                                       source->filter,
+                                                       stencil_mask,
+                                                       extents,
+                                                       &surface_res,
+                                                       &width,
+                                                       &height,
+                                                       &x_offset,
+                                                       &y_offset,
+                                                       &extents2);
+    }
     if (unlikely (status))
        return status;
 
-    cairo_p2d = source->base.matrix;
+    cairo_p2d = source->matrix;
     status = cairo_matrix_invert (&cairo_p2d);
     /* cairo_pattern_set_matrix ensures the matrix is invertible */
     assert (status == CAIRO_STATUS_SUCCESS);
 
     pdf_p2d = surface->cairo_to_pdf;
     cairo_matrix_multiply (&pdf_p2d, &cairo_p2d, &pdf_p2d);
+    cairo_matrix_translate (&pdf_p2d, x_offset, y_offset);
     cairo_matrix_translate (&pdf_p2d, 0.0, height);
     cairo_matrix_scale (&pdf_p2d, 1.0, -1.0);
-    if (source->surface->type != CAIRO_SURFACE_TYPE_RECORDING)
+    if (!(source->type == CAIRO_PATTERN_TYPE_SURFACE &&
+         ((cairo_surface_pattern_t *)source)->surface->type == CAIRO_SURFACE_TYPE_RECORDING))
+    {
        cairo_matrix_scale (&pdf_p2d, width, height);
+    }
 
     status = _cairo_pdf_operators_flush (&surface->pdf_operators);
     if (unlikely (status))
@@ -3717,6 +4032,121 @@ _cairo_pdf_surface_paint_surface_pattern (cairo_pdf_surface_t     *surface,
 }
 
 static cairo_status_t
+_cairo_pdf_surface_paint_gradient (cairo_pdf_surface_t         *surface,
+                                  const cairo_pattern_t       *source,
+                                  const cairo_rectangle_int_t *extents)
+{
+    cairo_pdf_resource_t shading_res, gstate_res;
+    cairo_matrix_t pat_to_pdf;
+    cairo_status_t status;
+    int alpha;
+
+    status = _cairo_pdf_surface_add_pdf_shading (surface, source,
+                                                extents,
+                                                &shading_res, &gstate_res);
+    if (unlikely (status == CAIRO_INT_STATUS_NOTHING_TO_DO))
+       return CAIRO_STATUS_SUCCESS;
+    if (unlikely (status))
+       return status;
+
+    pat_to_pdf = source->matrix;
+    status = cairo_matrix_invert (&pat_to_pdf);
+    /* cairo_pattern_set_matrix ensures the matrix is invertible */
+    assert (status == CAIRO_STATUS_SUCCESS);
+    cairo_matrix_multiply (&pat_to_pdf, &pat_to_pdf, &surface->cairo_to_pdf);
+
+    status = _cairo_pdf_operators_flush (&surface->pdf_operators);
+    if (unlikely (status))
+       return status;
+
+    if (! _cairo_matrix_is_identity (&pat_to_pdf)) {
+       _cairo_output_stream_printf (surface->output,
+                                    "%f %f %f %f %f %f cm\n",
+                                    pat_to_pdf.xx, pat_to_pdf.yx,
+                                    pat_to_pdf.xy, pat_to_pdf.yy,
+                                    pat_to_pdf.x0, pat_to_pdf.y0);
+    }
+
+    status = _cairo_pdf_surface_add_shading (surface, shading_res);
+    if (unlikely (status))
+       return status;
+
+    if (gstate_res.id != 0) {
+       status = _cairo_pdf_surface_add_smask (surface, gstate_res);
+       if (unlikely (status))
+           return status;
+
+       _cairo_output_stream_printf (surface->output,
+                                    "/s%d gs /sh%d sh\n",
+                                    gstate_res.id,
+                                    shading_res.id);
+    } else {
+       status = _cairo_pdf_surface_add_alpha (surface, 1.0, &alpha);
+       if (unlikely (status))
+           return status;
+
+       _cairo_output_stream_printf (surface->output,
+                                    "/a%d gs /sh%d sh\n",
+                                    alpha,
+                                    shading_res.id);
+    }
+
+    return status;
+}
+
+static cairo_status_t
+_cairo_pdf_surface_paint_pattern (cairo_pdf_surface_t          *surface,
+                                 const cairo_pattern_t        *source,
+                                 const cairo_rectangle_int_t  *extents,
+                                 cairo_bool_t                  mask)
+{
+    switch (source->type) {
+    case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return _cairo_pdf_surface_paint_surface_pattern (surface,
+                                                        source,
+                                                        extents,
+                                                        mask);
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+       return _cairo_pdf_surface_paint_gradient (surface,
+                                                 source,
+                                                 extents);
+
+    case CAIRO_PATTERN_TYPE_SOLID:
+    default:
+       ASSERT_NOT_REACHED;
+       return CAIRO_STATUS_SUCCESS;
+    }
+}
+
+static cairo_bool_t
+_can_paint_pattern (const cairo_pattern_t *pattern)
+{
+    switch (pattern->type) {
+    case CAIRO_PATTERN_TYPE_SOLID:
+       return FALSE;
+
+    case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return (pattern->extend == CAIRO_EXTEND_NONE ||
+               pattern->extend == CAIRO_EXTEND_PAD);
+
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+       return TRUE;
+
+    case CAIRO_PATTERN_TYPE_MESH:
+       return FALSE;
+
+    default:
+       ASSERT_NOT_REACHED;
+       return FALSE;
+    }
+}
+
+static cairo_status_t
 _cairo_pdf_surface_select_operator (cairo_pdf_surface_t *surface,
                                    cairo_operator_t     op)
 {
@@ -5302,56 +5732,68 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t        *surface,
     if (unlikely (status))
        return status;
 
-    pattern_res.id = 0;
-    gstate_res.id = 0;
-    status = _cairo_pdf_surface_add_pdf_pattern (surface, group->mask, NULL,
-                                                &pattern_res, &gstate_res);
-    if (unlikely (status))
-       return status;
-
-    if (gstate_res.id != 0) {
-       smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents);
-       if (unlikely (smask_group == NULL))
-           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-
-       smask_group->width = group->width;
-       smask_group->height = group->height;
-       smask_group->operation = PDF_PAINT;
-       smask_group->source = cairo_pattern_reference (group->mask);
-       smask_group->source_res = pattern_res;
-       status = _cairo_pdf_surface_add_smask_group (surface, smask_group);
-       if (unlikely (status)) {
-           _cairo_pdf_smask_group_destroy (smask_group);
-           return status;
-       }
-
-       status = _cairo_pdf_surface_add_smask (surface, gstate_res);
-       if (unlikely (status))
-           return status;
-
-       status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res);
+    if (_can_paint_pattern (group->mask)) {
+       _cairo_output_stream_printf (surface->output, "q\n");
+       status = _cairo_pdf_surface_paint_pattern (surface,
+                                                  group->mask,
+                                                  &group->extents,
+                                                  FALSE);
        if (unlikely (status))
            return status;
 
-       _cairo_output_stream_printf (surface->output,
-                                    "q /s%d gs /x%d Do Q\n",
-                                    gstate_res.id,
-                                    smask_group->group_res.id);
+       _cairo_output_stream_printf (surface->output, "Q\n");
     } else {
-       status = _cairo_pdf_surface_select_pattern (surface, group->mask, pattern_res, FALSE);
+       pattern_res.id = 0;
+       gstate_res.id = 0;
+       status = _cairo_pdf_surface_add_pdf_pattern (surface, group->mask, NULL,
+                                                    &pattern_res, &gstate_res);
        if (unlikely (status))
            return status;
 
-       _cairo_output_stream_printf (surface->output,
-                                    "%f %f %f %f re f\n",
-                                    bbox.p1.x,
-                                    bbox.p1.y,
-                                    bbox.p2.x - bbox.p1.x,
-                                    bbox.p2.y - bbox.p1.y);
+       if (gstate_res.id != 0) {
+           smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents);
+           if (unlikely (smask_group == NULL))
+               return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
-       status = _cairo_pdf_surface_unselect_pattern (surface);
-       if (unlikely (status))
-           return status;
+           smask_group->width = group->width;
+           smask_group->height = group->height;
+           smask_group->operation = PDF_PAINT;
+           smask_group->source = cairo_pattern_reference (group->mask);
+           smask_group->source_res = pattern_res;
+           status = _cairo_pdf_surface_add_smask_group (surface, smask_group);
+           if (unlikely (status)) {
+               _cairo_pdf_smask_group_destroy (smask_group);
+               return status;
+           }
+
+           status = _cairo_pdf_surface_add_smask (surface, gstate_res);
+           if (unlikely (status))
+               return status;
+
+           status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res);
+           if (unlikely (status))
+               return status;
+
+           _cairo_output_stream_printf (surface->output,
+                                        "q /s%d gs /x%d Do Q\n",
+                                        gstate_res.id,
+                                        smask_group->group_res.id);
+       } else {
+           status = _cairo_pdf_surface_select_pattern (surface, group->mask, pattern_res, FALSE);
+           if (unlikely (status))
+               return status;
+
+           _cairo_output_stream_printf (surface->output,
+                                        "%f %f %f %f re f\n",
+                                        bbox.p1.x,
+                                        bbox.p1.y,
+                                        bbox.p2.x - bbox.p1.x,
+                                        bbox.p2.y - bbox.p1.y);
+
+           status = _cairo_pdf_surface_unselect_pattern (surface);
+           if (unlikely (status))
+               return status;
+       }
     }
 
     status = _cairo_pdf_surface_close_group (surface, &mask_group);
@@ -5363,54 +5805,66 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t        *surface,
     if (unlikely (status))
        return status;
 
-    pattern_res.id = 0;
-    gstate_res.id = 0;
-    status = _cairo_pdf_surface_add_pdf_pattern (surface, group->source, NULL,
-                                                &pattern_res, &gstate_res);
-    if (unlikely (status))
-       return status;
-
-    if (gstate_res.id != 0) {
-       smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents);
-       if (unlikely (smask_group == NULL))
-           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-
-       smask_group->operation = PDF_PAINT;
-       smask_group->source = cairo_pattern_reference (group->source);
-       smask_group->source_res = pattern_res;
-       status = _cairo_pdf_surface_add_smask_group (surface, smask_group);
-       if (unlikely (status)) {
-           _cairo_pdf_smask_group_destroy (smask_group);
-           return status;
-       }
-
-       status = _cairo_pdf_surface_add_smask (surface, gstate_res);
-       if (unlikely (status))
-           return status;
-
-       status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res);
+    if (_can_paint_pattern (group->source)) {
+       _cairo_output_stream_printf (surface->output, "q\n");
+       status = _cairo_pdf_surface_paint_pattern (surface,
+                                                  group->source,
+                                                  &group->extents,
+                                                  FALSE);
        if (unlikely (status))
            return status;
 
-       _cairo_output_stream_printf (surface->output,
-                                    "q /s%d gs /x%d Do Q\n",
-                                    gstate_res.id,
-                                    smask_group->group_res.id);
+       _cairo_output_stream_printf (surface->output, "Q\n");
     } else {
-       status = _cairo_pdf_surface_select_pattern (surface, group->source, pattern_res, FALSE);
+       pattern_res.id = 0;
+       gstate_res.id = 0;
+       status = _cairo_pdf_surface_add_pdf_pattern (surface, group->source, NULL,
+                                                    &pattern_res, &gstate_res);
        if (unlikely (status))
            return status;
 
-       _cairo_output_stream_printf (surface->output,
-                                    "%f %f %f %f re f\n",
-                                    bbox.p1.x,
-                                    bbox.p1.y,
-                                    bbox.p2.x - bbox.p1.x,
-                                    bbox.p2.y - bbox.p1.y);
+       if (gstate_res.id != 0) {
+           smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents);
+           if (unlikely (smask_group == NULL))
+               return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
-       status = _cairo_pdf_surface_unselect_pattern (surface);
-       if (unlikely (status))
-           return status;
+           smask_group->operation = PDF_PAINT;
+           smask_group->source = cairo_pattern_reference (group->source);
+           smask_group->source_res = pattern_res;
+           status = _cairo_pdf_surface_add_smask_group (surface, smask_group);
+           if (unlikely (status)) {
+               _cairo_pdf_smask_group_destroy (smask_group);
+               return status;
+           }
+
+           status = _cairo_pdf_surface_add_smask (surface, gstate_res);
+           if (unlikely (status))
+               return status;
+
+           status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res);
+           if (unlikely (status))
+               return status;
+
+           _cairo_output_stream_printf (surface->output,
+                                        "q /s%d gs /x%d Do Q\n",
+                                        gstate_res.id,
+                                        smask_group->group_res.id);
+       } else {
+           status = _cairo_pdf_surface_select_pattern (surface, group->source, pattern_res, FALSE);
+           if (unlikely (status))
+               return status;
+
+           _cairo_output_stream_printf (surface->output,
+                                        "%f %f %f %f re f\n",
+                                        bbox.p1.x,
+                                        bbox.p1.y,
+                                        bbox.p2.x - bbox.p1.x,
+                                        bbox.p2.y - bbox.p1.y);
+
+           status = _cairo_pdf_surface_unselect_pattern (surface);
+           if (unlikely (status))
+               return status;
+       }
     }
 
     status = _cairo_pdf_surface_close_group (surface, NULL);
@@ -5648,6 +6102,7 @@ _cairo_pdf_surface_write_page (cairo_pdf_surface_t *surface)
                                 "   /Group <<\n"
                                 "      /Type /Group\n"
                                 "      /S /Transparency\n"
+                                "      /I true\n"
                                 "      /CS /DeviceRGB\n"
                                 "   >>\n"
                                 "   /Resources %d 0 R\n"
@@ -5742,7 +6197,8 @@ _pattern_supported (const cairo_pattern_t *pattern)
     case CAIRO_PATTERN_TYPE_SOLID:
     case CAIRO_PATTERN_TYPE_LINEAR:
     case CAIRO_PATTERN_TYPE_RADIAL:
-    case CAIRO_PATTERN_TYPE_MESH:      
+    case CAIRO_PATTERN_TYPE_MESH:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        return TRUE;
 
     case CAIRO_PATTERN_TYPE_SURFACE:
@@ -5893,28 +6349,29 @@ _cairo_pdf_surface_start_fallback (cairo_pdf_surface_t *surface)
 
 /* A PDF stencil mask is an A1 mask used with the current color */
 static cairo_int_status_t
-_cairo_pdf_surface_emit_stencil_mask (cairo_pdf_surface_t   *surface,
-                                     const cairo_pattern_t *source,
-                                     const cairo_pattern_t *mask)
+_cairo_pdf_surface_emit_stencil_mask (cairo_pdf_surface_t         *surface,
+                                     const cairo_pattern_t       *source,
+                                     const cairo_pattern_t       *mask,
+                                     const cairo_rectangle_int_t *extents)
 {
     cairo_status_t status;
-    cairo_surface_pattern_t *surface_pattern;
     cairo_image_surface_t  *image;
     void                  *image_extra;
     cairo_image_transparency_t transparency;
     cairo_pdf_resource_t pattern_res = {0};
 
     if (! (source->type == CAIRO_PATTERN_TYPE_SOLID &&
-          mask->type == CAIRO_PATTERN_TYPE_SURFACE))
+          (mask->type == CAIRO_PATTERN_TYPE_SURFACE || mask->type == CAIRO_PATTERN_TYPE_RASTER_SOURCE)))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    surface_pattern = (cairo_surface_pattern_t *) mask;
-    if (surface_pattern->surface->type == CAIRO_SURFACE_TYPE_RECORDING)
+    if (mask->type == CAIRO_PATTERN_TYPE_SURFACE &&
+       ((cairo_surface_pattern_t *) mask)->surface->type == CAIRO_SURFACE_TYPE_RECORDING)
+    {
        return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
 
-    status = _cairo_surface_acquire_source_image (surface_pattern->surface,
-                                                 &image,
-                                                 &image_extra);
+    status = _cairo_pdf_surface_acquire_source_image_from_pattern (surface, mask, extents,
+                                                                  &image, &image_extra);
     if (unlikely (status))
        return status;
 
@@ -5939,19 +6396,16 @@ _cairo_pdf_surface_emit_stencil_mask (cairo_pdf_surface_t   *surface,
        return status;
 
     _cairo_output_stream_printf (surface->output, "q\n");
-    status = _cairo_pdf_surface_paint_surface_pattern (surface,
-                                                      (cairo_surface_pattern_t *) surface_pattern,
-                                                      TRUE);
+    status = _cairo_pdf_surface_paint_surface_pattern (surface, mask, NULL, TRUE);
     if (unlikely (status))
        return status;
 
     _cairo_output_stream_printf (surface->output, "Q\n");
 
-    _cairo_surface_release_source_image (surface_pattern->surface, image, image_extra);
     status = _cairo_output_stream_get_status (surface->output);
 
 cleanup:
-    _cairo_surface_release_source_image (surface_pattern->surface, image, image_extra);
+    _cairo_pdf_surface_release_source_image_from_pattern (surface, mask, image, image_extra);
 
     return status;
 }
@@ -6015,13 +6469,12 @@ _cairo_pdf_surface_paint (void                  *abstract_surface,
     if (unlikely (status))
        goto cleanup;
 
-    if (source->type == CAIRO_PATTERN_TYPE_SURFACE &&
-       source->extend == CAIRO_EXTEND_NONE)
-    {
+    if (_can_paint_pattern (source)) {
        _cairo_output_stream_printf (surface->output, "q\n");
-       status = _cairo_pdf_surface_paint_surface_pattern (surface,
-                                                          (cairo_surface_pattern_t *) source,
-                                                          FALSE);
+       status = _cairo_pdf_surface_paint_pattern (surface,
+                                                  source,
+                                                  &extents.bounded,
+                                                  FALSE);
        if (unlikely (status))
            goto cleanup;
 
@@ -6173,7 +6626,7 @@ _cairo_pdf_surface_mask (void                     *abstract_surface,
        goto cleanup;
 
     /* Check if we can use a stencil mask */
-    status = _cairo_pdf_surface_emit_stencil_mask (surface, source, mask);
+    status = _cairo_pdf_surface_emit_stencil_mask (surface, source, mask, &extents.bounded);
     if (status != CAIRO_INT_STATUS_UNSUPPORTED)
        goto cleanup;
 
@@ -6430,9 +6883,7 @@ _cairo_pdf_surface_fill (void                     *abstract_surface,
     if (unlikely (status))
        goto cleanup;
 
-    if (source->type == CAIRO_PATTERN_TYPE_SURFACE &&
-       source->extend == CAIRO_EXTEND_NONE)
-    {
+    if (_can_paint_pattern (source)) {
        status = _cairo_pdf_operators_flush (&surface->pdf_operators);
        if (unlikely (status))
            goto cleanup;
@@ -6444,9 +6895,10 @@ _cairo_pdf_surface_fill (void                    *abstract_surface,
        if (unlikely (status))
            goto cleanup;
 
-       status = _cairo_pdf_surface_paint_surface_pattern (surface,
-                                                          (cairo_surface_pattern_t *) source,
-                                                          FALSE);
+       status = _cairo_pdf_surface_paint_pattern (surface,
+                                                  source,
+                                                  &extents.bounded,
+                                                  FALSE);
        if (unlikely (status))
            goto cleanup;
 
@@ -6853,6 +7305,11 @@ cleanup:
     return status;
 }
 
+static const char **
+_cairo_pdf_surface_get_supported_mime_types (void               *abstract_surface)
+{
+    return _cairo_pdf_supported_mime_types;
+}
 
 static void
 _cairo_pdf_surface_set_paginated_mode (void                    *abstract_surface,
@@ -6874,6 +7331,7 @@ static const cairo_surface_backend_t cairo_pdf_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_surface_default_source,
     NULL, /* acquire_source_image */
     NULL, /* release_source_image */
     NULL, /* snapshot */
@@ -6896,6 +7354,7 @@ static const cairo_surface_backend_t cairo_pdf_surface_backend = {
     NULL, /* show_glyphs */
     _cairo_pdf_surface_has_show_text_glyphs,
     _cairo_pdf_surface_show_text_glyphs,
+    _cairo_pdf_surface_get_supported_mime_types,
 };
 
 static const cairo_paginated_surface_backend_t
index 50460cc..1bc8524 100644 (file)
@@ -45,14 +45,14 @@ CAIRO_BEGIN_DECLS
 
 /**
  * cairo_pdf_version_t:
- * @CAIRO_PDF_VERSION_1_4: The version 1.4 of the PDF specification.
- * @CAIRO_PDF_VERSION_1_5: The version 1.5 of the PDF specification.
+ * @CAIRO_PDF_VERSION_1_4: The version 1.4 of the PDF specification. (Since 1.10)
+ * @CAIRO_PDF_VERSION_1_5: The version 1.5 of the PDF specification. (Since 1.10)
  *
  * #cairo_pdf_version_t is used to describe the version number of the PDF
  * specification that a generated PDF file will conform to.
  *
- * Since 1.10
- */
+ * Since: 1.10
+ **/
 typedef enum _cairo_pdf_version {
     CAIRO_PDF_VERSION_1_4,
     CAIRO_PDF_VERSION_1_5
index 59bbe68..e74a4a8 100644 (file)
@@ -62,7 +62,7 @@
  * cairo_image_surface_get_data() or a backend-specific access
  * function, and process it with another library, e.g. gdk-pixbuf or
  * libpng.
- */
+ **/
 
 /**
  * CAIRO_HAS_PNG_FUNCTIONS:
@@ -70,7 +70,9 @@
  * Defined if the PNG functions are available.
  * This macro can be used to conditionally compile code using the cairo
  * PNG functions.
- */
+ *
+ * Since: 1.0
+ **/
 
 struct png_read_closure_t {
     cairo_read_func_t           read_func;
@@ -348,6 +350,8 @@ stdio_write_func (png_structp png, png_bytep data, png_size_t size)
  * %CAIRO_STATUS_SURFACE_TYPE_MISMATCH if the surface does not have
  * pixel contents, or %CAIRO_STATUS_WRITE_ERROR if an I/O error occurs
  * while attempting to write the file.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_surface_write_to_png (cairo_surface_t    *surface,
@@ -414,6 +418,8 @@ stream_write_func (png_structp png, png_bytep data, png_size_t size)
  * memory could not be allocated for the operation,
  * %CAIRO_STATUS_SURFACE_TYPE_MISMATCH if the surface does not have
  * pixel contents.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_surface_write_to_png_stream (cairo_surface_t     *surface,
@@ -742,6 +748,8 @@ read_png (struct png_read_closure_t *png_closure)
  * Alternatively, you can allow errors to propagate through the drawing
  * operations and check the status on the context upon completion
  * using cairo_status().
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_image_surface_create_from_png (const char *filename)
@@ -795,6 +803,8 @@ cairo_image_surface_create_from_png (const char *filename)
  * Alternatively, you can allow errors to propagate through the drawing
  * operations and check the status on the context upon completion
  * using cairo_status().
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_image_surface_create_from_png_stream (cairo_read_func_t  read_func,
index 92becd0..c900c89 100644 (file)
@@ -40,7 +40,7 @@
 
 #include "cairo-error-private.h"
 #include "cairo-freelist-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 
 typedef cairo_point_t cairo_bo_point32_t;
 
@@ -1172,13 +1172,23 @@ edges_start_or_continue (cairo_bo_edge_t        *left,
                         int                     top,
                         cairo_polygon_t        *polygon)
 {
+    assert (right->deferred.other == NULL);
+
     if (left->deferred.other == right)
        return;
 
     if (left->deferred.other != NULL) {
        if (right != NULL && edges_colinear (left->deferred.other, right)) {
-           /* continuation on right, so just swap edges */
-           assert (left->deferred.other->deferred.other == NULL);
+           cairo_bo_edge_t *old = left->deferred.other;
+
+           /* continuation on right, extend right to cover both */
+           assert (old->deferred.other == NULL);
+           assert (old->edge.line.p2.y > old->edge.line.p1.y);
+
+           if (old->edge.line.p1.y < right->edge.line.p1.y)
+               right->edge.line.p1 = old->edge.line.p1;
+           if (old->edge.line.p2.y > right->edge.line.p2.y)
+               right->edge.line.p2 = old->edge.line.p2;
            left->deferred.other = right;
            return;
        }
@@ -1233,13 +1243,11 @@ active_edges (cairo_bo_edge_t           *left,
                }
 
                right = right->next;
-           } while (right);
+           } while (1);
 
            edges_start_or_continue (left, right, top, polygon);
 
-           left = right;
-           if (left != NULL)
-               left = left->next;
+           left = right->next;
        }
 }
 
@@ -1324,6 +1332,11 @@ intersection_sweep (cairo_bo_event_t   **start_events,
            if (e2 != e1->next)
                break;
 
+           if (e1->deferred.other)
+               edges_end (e1, sweep_line.current_y, polygon);
+           if (e2->deferred.other)
+               edges_end (e2, sweep_line.current_y, polygon);
+
            left = e1->prev;
            right = e2->next;
 
index f18e234..8758070 100644 (file)
@@ -40,7 +40,7 @@
 
 #include "cairo-error-private.h"
 #include "cairo-freelist-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 
 typedef cairo_point_t cairo_bo_point32_t;
 
index 90f81f7..c714b32 100644 (file)
 #include "cairo-contour-private.h"
 #include "cairo-error-private.h"
 
+#define DEBUG_POLYGON 0
+
+#if DEBUG_POLYGON && !NDEBUG
+static void
+assert_last_edge_is_valid(cairo_polygon_t *polygon,
+                         const cairo_box_t *limit)
+{
+    cairo_edge_t *edge;
+    cairo_fixed_t x;
+
+    edge = &polygon->edges[polygon->num_edges-1];
+
+    assert (edge->bottom > edge->top);
+    assert (edge->top >= limit->p1.y);
+    assert (edge->bottom <= limit->p2.y);
+
+    x = _cairo_edge_compute_intersection_x_for_y (&edge->line.p1,
+                                                 &edge->line.p2,
+                                                 edge->top);
+    assert (x >= limit->p1.x);
+    assert (x <= limit->p2.x);
+
+    x = _cairo_edge_compute_intersection_x_for_y (&edge->line.p1,
+                                                 &edge->line.p2,
+                                                 edge->bottom);
+    assert (x >= limit->p1.x);
+    assert (x <= limit->p2.x);
+}
+#else
+#define assert_last_edge_is_valid(p, l)
+#endif
+
 static void
 _cairo_polygon_add_edge (cairo_polygon_t *polygon,
                         const cairo_point_t *p1,
@@ -340,16 +372,19 @@ _add_clipped_edge (cairo_polygon_t *polygon,
             * clip vertically by restricting top and bottom */
 
            _add_edge (polygon, p1, p2, top_y, bot_y, dir);
+           assert_last_edge_is_valid (polygon, limits);
        } else if (pright <= limits->p1.x) {
            /* Projection of the edge to the left of the box:
             * replace with the left side of the box (clipped top/bottom) */
 
            _add_edge (polygon, &limits->p1, &bot_left, top_y, bot_y, dir);
+           assert_last_edge_is_valid (polygon, limits);
        } else if (limits->p2.x <= pleft) {
            /* Projection of the edge to the right of the box:
             * replace with the right side of the box (clipped top/bottom) */
 
            _add_edge (polygon, &top_right, &limits->p2, top_y, bot_y, dir);
+           assert_last_edge_is_valid (polygon, limits);
        } else {
            /* The edge and the box intersect in a generic way */
            cairo_fixed_t left_y, right_y;
@@ -388,37 +423,55 @@ _add_clipped_edge (cairo_polygon_t *polygon,
            top_left_to_bottom_right = (p1->x < p2->x) == (p1->y < p2->y);
 
            if (top_left_to_bottom_right) {
+               if (_cairo_edge_compute_intersection_x_for_y (p1, p2, left_y) < limits->p1.x)
+                   left_y++;
+
                left_y = MIN (left_y, bot_y);
                if (top_y < left_y) {
                    _add_edge (polygon, &limits->p1, &bot_left,
                               top_y, left_y, dir);
+                   assert_last_edge_is_valid (polygon, limits);
                    top_y = left_y;
                }
 
+               if (_cairo_edge_compute_intersection_x_for_y (p1, p2, right_y) > limits->p1.y)
+                   right_y--;
+
                right_y = MAX (right_y, top_y);
                if (bot_y > right_y) {
                    _add_edge (polygon, &top_right, &limits->p2,
                               right_y, bot_y, dir);
+                   assert_last_edge_is_valid (polygon, limits);
                    bot_y = right_y;
                }
            } else {
+               if (_cairo_edge_compute_intersection_x_for_y (p1, p2, right_y) > limits->p2.x)
+                   right_y++;
+
                right_y = MIN (right_y, bot_y);
                if (top_y < right_y) {
                    _add_edge (polygon, &top_right, &limits->p2,
                               top_y, right_y, dir);
+                   assert_last_edge_is_valid (polygon, limits);
                    top_y = right_y;
                }
 
+               if (_cairo_edge_compute_intersection_x_for_y (p1, p2, left_y) < limits->p1.x)
+                   left_y--;
+
                left_y = MAX (left_y, top_y);
                if (bot_y > left_y) {
                    _add_edge (polygon, &limits->p1, &bot_left,
                               left_y, bot_y, dir);
+                   assert_last_edge_is_valid (polygon, limits);
                    bot_y = left_y;
                }
            }
 
-           if (top_y != bot_y)
+           if (top_y != bot_y) {
                _add_edge (polygon, p1, p2, top_y, bot_y, dir);
+               assert_last_edge_is_valid (polygon, limits);
+           }
        }
     }
 }
index a5a8cd0..1d5d27d 100644 (file)
@@ -70,11 +70,6 @@ typedef struct cairo_ps_surface {
     int bbox_x1, bbox_y1, bbox_x2, bbox_y2;
     cairo_matrix_t cairo_to_ps;
 
-    /* XXX These 3 are used as temporary storage whilst emitting patterns */
-    cairo_image_surface_t *image;
-    cairo_image_surface_t *acquired_image;
-    void *image_extra;
-
     cairo_bool_t use_string_datasource;
 
     cairo_bool_t current_pattern_is_solid_color;
index 36d555d..1285108 100644 (file)
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-scaled-font-subsets-private.h"
 #include "cairo-paginated-private.h"
 #include "cairo-recording-surface-private.h"
 #include "cairo-surface-clipper-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
 #include "cairo-surface-subsurface-private.h"
 #include "cairo-output-stream-private.h"
 #include "cairo-type3-glyph-surface-private.h"
  *
  * The PostScript surface is used to render cairo graphics to Adobe
  * PostScript files and is a multi-page vector surface backend.
- */
+ **/
 
 /**
  * CAIRO_HAS_PS_SURFACE:
  * 
  * Defined if the PostScript surface backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.2
+ **/
 
 typedef enum {
     CAIRO_PS_COMPRESS_NONE,
@@ -126,10 +129,6 @@ static cairo_bool_t
 _cairo_ps_surface_get_extents (void                   *abstract_surface,
                               cairo_rectangle_int_t   *rectangle);
 
-static void
-_cairo_ps_surface_release_surface (cairo_ps_surface_t      *surface,
-                                  cairo_surface_pattern_t *pattern);
-
 static const cairo_ps_level_t _cairo_ps_levels[] =
 {
     CAIRO_PS_LEVEL_2,
@@ -144,6 +143,12 @@ static const char * _cairo_ps_level_strings[CAIRO_PS_LEVEL_LAST] =
     "PS Level 3"
 };
 
+static const char *_cairo_ps_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    NULL
+};
+
 typedef struct _cairo_page_standard_media {
     const char *name;
     int width;
@@ -268,10 +273,8 @@ _cairo_ps_surface_emit_header (cairo_ps_surface_t *surface)
 
     if (surface->eps) {
        _cairo_output_stream_printf (surface->final_stream,
-                                    "/cairo_eps_state save def\n"
-                                    "/dict_count countdictstack def\n"
-                                    "/op_count count 1 sub def\n"
-                                    "userdict begin\n");
+                                    "save\n"
+                                    "50 dict begin\n");
     } else {
        _cairo_output_stream_printf (surface->final_stream,
                                     "/languagelevel where\n"
@@ -807,9 +810,7 @@ _cairo_ps_surface_emit_footer (cairo_ps_surface_t *surface)
 
     if (surface->eps) {
        _cairo_output_stream_printf (surface->final_stream,
-                                    "count op_count sub {pop} repeat\n"
-                                    "countdictstack dict_count sub {end} repeat\n"
-                                    "cairo_eps_state restore\n");
+                                    "end restore\n");
     }
 
     _cairo_output_stream_printf (surface->final_stream,
@@ -1123,7 +1124,7 @@ cairo_ps_surface_create (const char               *filename,
  * occurs. You can use cairo_surface_status() to check for this.
  *
  * Since: 1.2
- */
+ **/
 cairo_surface_t *
 cairo_ps_surface_create_for_stream (cairo_write_func_t write_func,
                                    void               *closure,
@@ -1627,62 +1628,264 @@ _cairo_ps_surface_start_page (void *abstract_surface)
 }
 
 static cairo_int_status_t
-_cairo_ps_surface_end_page (cairo_ps_surface_t *surface)
+_cairo_ps_surface_show_page (void *abstract_surface)
 {
+    cairo_ps_surface_t *surface = abstract_surface;
     cairo_int_status_t status;
 
+    if (surface->clipper.clip != NULL)
+       _cairo_surface_clipper_reset (&surface->clipper);
+
     status = _cairo_pdf_operators_flush (&surface->pdf_operators);
     if (unlikely (status))
        return status;
 
-    if (surface->clipper.clip != NULL) {
-       _cairo_output_stream_printf (surface->stream, "Q Q\n");
-       _cairo_surface_clipper_reset (&surface->clipper);
-    } else
-       _cairo_output_stream_printf (surface->stream, "Q\n");
+    _cairo_output_stream_printf (surface->stream,
+                                "Q Q\n"
+                                "showpage\n");
 
     return CAIRO_STATUS_SUCCESS;
 }
 
-static cairo_int_status_t
-_cairo_ps_surface_show_page (void *abstract_surface)
+static cairo_bool_t
+color_is_gray (double red, double green, double blue)
 {
-    cairo_ps_surface_t *surface = abstract_surface;
-    cairo_int_status_t status;
+    const double epsilon = 0.00001;
 
-    status = _cairo_ps_surface_end_page (surface);
-    if (unlikely (status))
-       return status;
+    return (fabs (red - green) < epsilon &&
+           fabs (red - blue) < epsilon);
+}
+
+/**
+ * _cairo_ps_surface_acquire_source_surface_from_pattern:
+ * @surface: the ps surface
+ * @pattern: A #cairo_pattern_t of type SURFACE or RASTER_SOURCE to use as the source
+ * @extents: extents of the operation that is using this source
+ * @width: returns width of surface
+ * @height: returns height of surface
+ * @x_offset: returns x offset of surface
+ * @y_offset: returns y offset of surface
+ * @surface: returns surface of type image surface or recording surface
+ * @image_extra: returns image extra for image type surface
+ *
+ * Acquire source surface or raster source pattern.
+ **/
+static cairo_status_t
+_cairo_ps_surface_acquire_source_surface_from_pattern (cairo_ps_surface_t           *surface,
+                                                      const cairo_pattern_t        *pattern,
+                                                      const cairo_rectangle_int_t  *extents,
+                                                      int                          *width,
+                                                      int                          *height,
+                                                      double                       *x_offset,
+                                                      double                       *y_offset,
+                                                      cairo_surface_t             **source_surface,
+                                                      void                        **image_extra)
+{
+    cairo_status_t          status;
+    cairo_image_surface_t  *image;
+
+    *x_offset = *y_offset = 0;
+    switch (pattern->type) {
+    case CAIRO_PATTERN_TYPE_SURFACE: {
+       cairo_surface_t *surf = ((cairo_surface_pattern_t *) pattern)->surface;
+
+       if (surf->type == CAIRO_SURFACE_TYPE_RECORDING) {
+           if (surf->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
+               cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) surf;
+
+               *width  = sub->extents.width;
+               *height = sub->extents.height;
+           } else {
+               cairo_surface_t *free_me = NULL;
+               cairo_recording_surface_t *recording_surface;
+               cairo_box_t bbox;
+               cairo_rectangle_int_t extents;
+
+               recording_surface = (cairo_recording_surface_t *) surf;
+               if (_cairo_surface_is_snapshot (&recording_surface->base)) {
+                   free_me = _cairo_surface_snapshot_get_target (&recording_surface->base);
+                   recording_surface = (cairo_recording_surface_t *) free_me;
+               }
 
-    _cairo_output_stream_printf (surface->stream, "showpage\n");
+               status = _cairo_recording_surface_get_bbox (recording_surface, &bbox, NULL);
+               cairo_surface_destroy (free_me);
+               if (unlikely (status))
+                   return status;
 
+               _cairo_box_round_to_rectangle (&bbox, &extents);
+               *width  = extents.width;
+               *height = extents.height;
+           }
+           *source_surface = surf;
+
+           return CAIRO_STATUS_SUCCESS;
+       } else {
+           status =  _cairo_surface_acquire_source_image (surf, &image, image_extra);
+           if (unlikely (status))
+               return status;
+       }
+    } break;
+
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE: {
+       cairo_surface_t *surf;
+       cairo_box_t box;
+       cairo_rectangle_int_t rect;
+
+       /* get the operation extents in pattern space */
+       _cairo_box_from_rectangle (&box, extents);
+       _cairo_matrix_transform_bounding_box_fixed (&pattern->matrix, &box, NULL);
+       _cairo_box_round_to_rectangle (&box, &rect);
+       surf = _cairo_raster_source_pattern_acquire (pattern, &surface->base, &rect);
+       if (!surf)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+       assert (cairo_surface_get_type (surf) == CAIRO_SURFACE_TYPE_IMAGE);
+       image = (cairo_image_surface_t *) surf;
+    } break;
+
+    case CAIRO_PATTERN_TYPE_SOLID:
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+    default:
+       ASSERT_NOT_REACHED;
+       break;
+    }
+
+    *width = image->width;
+    *height = image->height;
+    *source_surface = &image->base;
     return CAIRO_STATUS_SUCCESS;
 }
 
-static cairo_bool_t
-color_is_gray (double red, double green, double blue)
+static void
+_cairo_ps_surface_release_source_surface_from_pattern (cairo_ps_surface_t           *surface,
+                                                      const cairo_pattern_t        *pattern,
+                                                      cairo_surface_t              *source,
+                                                      void                         *image_extra)
 {
-    const double epsilon = 0.00001;
+    switch (pattern->type) {
+    case CAIRO_PATTERN_TYPE_SURFACE: {
+       cairo_surface_pattern_t *surf_pat = (cairo_surface_pattern_t *) pattern;
+       if (surf_pat->surface->type != CAIRO_SURFACE_TYPE_RECORDING) {
+           cairo_image_surface_t *image  = (cairo_image_surface_t *) source;
+           _cairo_surface_release_source_image (surf_pat->surface, image, image_extra);
+       }
+    } break;
 
-    return (fabs (red - green) < epsilon &&
-           fabs (red - blue) < epsilon);
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       _cairo_raster_source_pattern_release (pattern, source);
+       break;
+
+    case CAIRO_PATTERN_TYPE_SOLID:
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+    default:
+
+       ASSERT_NOT_REACHED;
+       break;
+    }
+}
+
+/**
+ * _cairo_ps_surface_create_padded_image_from_image:
+ * @surface: the ps surface
+ * @source: The source image
+ * @extents: extents of the operation that is using this source
+ * @width: returns width of padded image
+ * @height: returns height of padded image
+ * @x_offset: returns x offset of padded image
+ * @y_offset: returns y offset of padded image
+ * @image: returns the padded image or NULL if padding not required to fill @extents
+ *
+ * Creates a padded image if the source image does not fill the extents.
+ **/
+static cairo_status_t
+_cairo_ps_surface_create_padded_image_from_image (cairo_ps_surface_t           *surface,
+                                                 cairo_image_surface_t        *source,
+                                                 const cairo_matrix_t         *source_matrix,
+                                                 const cairo_rectangle_int_t  *extents,
+                                                 int                          *width,
+                                                 int                          *height,
+                                                 double                       *x_offset,
+                                                 double                       *y_offset,
+                                                 cairo_image_surface_t       **image)
+{
+    cairo_box_t box;
+    cairo_rectangle_int_t rect;
+    cairo_surface_t       *pad_image;
+    cairo_surface_pattern_t pad_pattern;
+    int w, h;
+    cairo_int_status_t      status;
+
+    /* get the operation extents in pattern space */
+    _cairo_box_from_rectangle (&box, extents);
+    _cairo_matrix_transform_bounding_box_fixed (source_matrix, &box, NULL);
+    _cairo_box_round_to_rectangle (&box, &rect);
+
+    /* Check if image needs padding to fill extents. */
+    w = source->width;
+    h = source->height;
+    if (_cairo_fixed_integer_ceil(box.p1.x) < 0 ||
+       _cairo_fixed_integer_ceil(box.p1.y) < 0 ||
+       _cairo_fixed_integer_floor(box.p2.y) > w ||
+       _cairo_fixed_integer_floor(box.p2.y) > h)
+    {
+       pad_image =
+           _cairo_image_surface_create_with_pixman_format (NULL,
+                                                           source->pixman_format,
+                                                           rect.width, rect.height,
+                                                           0);
+       if (pad_image->status)
+           return pad_image->status;
+
+       _cairo_pattern_init_for_surface (&pad_pattern, &source->base);
+       cairo_matrix_init_translate (&pad_pattern.base.matrix, rect.x, rect.y);
+       pad_pattern.base.extend = CAIRO_EXTEND_PAD;
+       status = _cairo_surface_paint (pad_image,
+                                      CAIRO_OPERATOR_SOURCE,
+                                      &pad_pattern.base,
+                                      NULL);
+       _cairo_pattern_fini (&pad_pattern.base);
+       *image = (cairo_image_surface_t *) pad_image;
+       *width = rect.width;
+       *height = rect.height;
+       *x_offset = rect.x;
+       *y_offset = rect.y;
+    } else {
+       *image = NULL;
+       status = CAIRO_STATUS_SUCCESS;
+    }
+
+    return status;
 }
 
 static cairo_int_status_t
-_cairo_ps_surface_analyze_surface_pattern_transparency (cairo_ps_surface_t      *surface,
-                                                      cairo_surface_pattern_t *pattern)
+_cairo_ps_surface_analyze_surface_pattern_transparency (cairo_ps_surface_t            *surface,
+                                                       const cairo_pattern_t         *pattern,
+                                                       const cairo_rectangle_int_t   *extents)
 {
-    cairo_image_surface_t  *image;
-    void                  *image_extra;
+    int width, height;
+    double x_offset, y_offset;
+    cairo_surface_t *source;
+    cairo_image_surface_t *image;
+    void *image_extra;
     cairo_int_status_t      status;
     cairo_image_transparency_t transparency;
 
-    status = _cairo_surface_acquire_source_image (pattern->surface,
-                                                 &image,
-                                                 &image_extra);
+    status = _cairo_ps_surface_acquire_source_surface_from_pattern (surface,
+                                                                   pattern,
+                                                                   extents,
+                                                                   &width,
+                                                                   &height,
+                                                                   &x_offset,
+                                                                   &y_offset,
+                                                                   &source,
+                                                                   &image_extra);
     if (unlikely (status))
        return status;
 
+    image = (cairo_image_surface_t *) source;
     if (image->base.status)
        return image->base.status;
 
@@ -1709,7 +1912,7 @@ _cairo_ps_surface_analyze_surface_pattern_transparency (cairo_ps_surface_t
        ASSERT_NOT_REACHED;
     }
 
-    _cairo_surface_release_source_image (pattern->surface, image, image_extra);
+    _cairo_ps_surface_release_source_surface_from_pattern (surface, pattern, source, image_extra);
 
     return status;
 }
@@ -1770,6 +1973,9 @@ pattern_supported (cairo_ps_surface_t *surface, const cairo_pattern_t *pattern)
     case CAIRO_PATTERN_TYPE_SURFACE:
        return surface_pattern_supported ((cairo_surface_pattern_t *) pattern);
 
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return TRUE;
+
     default:
        ASSERT_NOT_REACHED;
        return FALSE;
@@ -1777,7 +1983,9 @@ pattern_supported (cairo_ps_surface_t *surface, const cairo_pattern_t *pattern)
 }
 
 static cairo_bool_t
-mask_supported (cairo_ps_surface_t *surface, const cairo_pattern_t *mask)
+mask_supported (cairo_ps_surface_t *surface,
+               const cairo_pattern_t *mask,
+               const cairo_rectangle_int_t *extents)
 {
     if (surface->ps_level == CAIRO_PS_LEVEL_2)
        return FALSE;
@@ -1786,7 +1994,7 @@ mask_supported (cairo_ps_surface_t *surface, const cairo_pattern_t *mask)
        cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) mask;
        if (surface_pattern->surface->type == CAIRO_SURFACE_TYPE_IMAGE) {
            /* check if mask if opaque or bilevel alpha */
-           if (_cairo_ps_surface_analyze_surface_pattern_transparency (surface, surface_pattern) == CAIRO_INT_STATUS_SUCCESS) {
+           if (_cairo_ps_surface_analyze_surface_pattern_transparency (surface, mask, extents) == CAIRO_INT_STATUS_SUCCESS) {
                surface->ps_level_used = CAIRO_PS_LEVEL_3;
                return TRUE;
            }
@@ -1818,7 +2026,7 @@ _cairo_ps_surface_analyze_operation (cairo_ps_surface_t    *surface,
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
     /* Mask is only supported when the mask is an image with opaque or bilevel alpha. */
-    if (mask && !mask_supported (surface, mask))
+    if (mask && !mask_supported (surface, mask, extents))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
     if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) {
@@ -1848,12 +2056,8 @@ _cairo_ps_surface_analyze_operation (cairo_ps_surface_t    *surface,
      * render stage and we blend the transparency into the white
      * background to convert the pattern to opaque.
      */
-    if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) {
-       cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) pattern;
-
-       return _cairo_ps_surface_analyze_surface_pattern_transparency (surface,
-                                                                      surface_pattern);
-    }
+    if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE || pattern->type == CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return _cairo_ps_surface_analyze_surface_pattern_transparency (surface, pattern, extents);
 
     /* Patterns whose drawn part is opaque are directly supported;
        those whose drawn part is partially transparent can be
@@ -2152,7 +2356,7 @@ _cairo_ps_surface_emit_base85_string (cairo_ps_surface_t    *surface,
 
 static cairo_status_t
 _cairo_ps_surface_emit_image (cairo_ps_surface_t    *surface,
-                             cairo_image_surface_t *image,
+                             cairo_image_surface_t *image_surf,
                              cairo_operator_t       op,
                              cairo_filter_t         filter,
                              cairo_bool_t           stencil_mask)
@@ -2160,7 +2364,7 @@ _cairo_ps_surface_emit_image (cairo_ps_surface_t    *surface,
     cairo_status_t status;
     unsigned char *data;
     unsigned long data_size;
-    cairo_image_surface_t *ps_image = image;
+    cairo_image_surface_t *ps_image;
     int x, y, i, a;
     cairo_image_transparency_t transparency;
     cairo_bool_t use_mask;
@@ -2171,9 +2375,38 @@ _cairo_ps_surface_emit_image (cairo_ps_surface_t    *surface,
     const char *interpolate;
     cairo_ps_compress_t compress;
     const char *compress_filter;
+    cairo_image_surface_t *image;
 
-    if (image->base.status)
-       return image->base.status;
+    if (image_surf->base.status)
+       return image_surf->base.status;
+
+    image  = image_surf;
+    if (image->format != CAIRO_FORMAT_RGB24 &&
+       image->format != CAIRO_FORMAT_ARGB32 &&
+       image->format != CAIRO_FORMAT_A8 &&
+       image->format != CAIRO_FORMAT_A1)
+    {
+       cairo_surface_t *surf;
+       cairo_surface_pattern_t pattern;
+
+       surf = _cairo_image_surface_create_with_content (cairo_surface_get_content (&image_surf->base),
+                                                        image_surf->width,
+                                                        image_surf->height);
+       image = (cairo_image_surface_t *) surf;
+       if (surf->status) {
+           status = surf->status;
+           goto bail0;
+       }
+
+       _cairo_pattern_init_for_surface (&pattern, &image_surf->base);
+       status = _cairo_surface_paint (surf,
+                                      CAIRO_OPERATOR_SOURCE, &pattern.base,
+                                      NULL);
+        _cairo_pattern_fini (&pattern.base);
+        if (unlikely (status))
+            goto bail0;
+    }
+    ps_image = image;
 
     switch (filter) {
     default:
@@ -2496,6 +2729,10 @@ bail1:
     if (!use_mask && ps_image != image)
        cairo_surface_destroy (&ps_image->base);
 
+bail0:
+    if (image != image_surf)
+       cairo_surface_destroy (&image->base);
+
     return status;
 }
 
@@ -2509,6 +2746,8 @@ _cairo_ps_surface_emit_jpeg_image (cairo_ps_surface_t    *surface,
     const unsigned char *mime_data;
     unsigned long mime_data_length;
     cairo_image_info_t info;
+    const char *colorspace;
+    const char *decode;
 
     cairo_surface_get_mime_data (source, CAIRO_MIME_TYPE_JPEG,
                                 &mime_data, &mime_data_length);
@@ -2521,8 +2760,22 @@ _cairo_ps_surface_emit_jpeg_image (cairo_ps_surface_t    *surface,
     if (unlikely (status))
        return status;
 
-    if (info.num_components != 1 && info.num_components != 3)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
+    switch (info.num_components) {
+       case 1:
+           colorspace = "/DeviceGray";
+           decode = "0 1";
+           break;
+       case 3:
+           colorspace = "/DeviceRGB";
+           decode =  "0 1 0 1 0 1";
+           break;
+       case 4:
+           colorspace = "/DeviceCMYK";
+           decode =  "0 1 0 1 0 1 0 1";
+           break;
+       default:
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
 
     if (surface->use_string_datasource) {
        /* Emit the image data as a base85-encoded string which will
@@ -2545,18 +2798,18 @@ _cairo_ps_surface_emit_jpeg_image (cairo_ps_surface_t    *surface,
     }
 
     _cairo_output_stream_printf (surface->stream,
-                                "/%s setcolorspace\n"
+                                "%s setcolorspace\n"
                                 "8 dict dup begin\n"
                                 "  /ImageType 1 def\n"
                                 "  /Width %d def\n"
                                 "  /Height %d def\n"
                                 "  /BitsPerComponent %d def\n"
                                 "  /Decode [ %s ] def\n",
-                                info.num_components == 1 ? "DeviceGray" : "DeviceRGB",
+                                colorspace,
                                 info.width,
                                 info.height,
                                 info.bits_per_component,
-                                 info.num_components == 1 ? "0 1" : "0 1 0 1 0 1");
+                                 decode);
 
     if (surface->use_string_datasource) {
        _cairo_output_stream_printf (surface->stream,
@@ -2598,6 +2851,7 @@ _cairo_ps_surface_emit_recording_surface (cairo_ps_surface_t *surface,
     cairo_matrix_t old_cairo_to_ps;
     cairo_content_t old_content;
     cairo_rectangle_int_t old_page_bbox;
+    cairo_surface_t *free_me = NULL;
     cairo_surface_clipper_t old_clipper;
     cairo_box_t bbox;
     cairo_int_status_t status;
@@ -2612,14 +2866,14 @@ _cairo_ps_surface_emit_recording_surface (cairo_ps_surface_t *surface,
                                 _cairo_ps_surface_clipper_intersect_clip_path);
 
     if (_cairo_surface_is_snapshot (recording_surface))
-       recording_surface = _cairo_surface_snapshot_get_target (recording_surface);
+       free_me = recording_surface = _cairo_surface_snapshot_get_target (recording_surface);
 
     status =
        _cairo_recording_surface_get_bbox ((cairo_recording_surface_t *) recording_surface,
                                           &bbox,
                                           NULL);
     if (unlikely (status))
-       return status;
+       goto err;
 
 #if DEBUG_PS
     _cairo_output_stream_printf (surface->stream,
@@ -2657,11 +2911,11 @@ _cairo_ps_surface_emit_recording_surface (cairo_ps_surface_t *surface,
                                                     CAIRO_RECORDING_REGION_NATIVE);
     assert (status != CAIRO_INT_STATUS_UNSUPPORTED);
     if (unlikely (status))
-       return status;
+       goto err;
 
     status = _cairo_pdf_operators_flush (&surface->pdf_operators);
     if (unlikely (status))
-       return status;
+       goto err;
 
     _cairo_output_stream_printf (surface->stream, "  Q\n");
 
@@ -2678,7 +2932,9 @@ _cairo_ps_surface_emit_recording_surface (cairo_ps_surface_t *surface,
     _cairo_pdf_operators_set_cairo_to_pdf_matrix (&surface->pdf_operators,
                                                  &surface->cairo_to_ps);
 
-    return CAIRO_STATUS_SUCCESS;
+err:
+    cairo_surface_destroy (free_me);
+    return status;
 }
 
 static cairo_int_status_t
@@ -2691,6 +2947,7 @@ _cairo_ps_surface_emit_recording_subsurface (cairo_ps_surface_t *surface,
     cairo_content_t old_content;
     cairo_rectangle_int_t old_page_bbox;
     cairo_surface_clipper_t old_clipper;
+    cairo_surface_t *free_me = NULL;
     cairo_int_status_t status;
 
     old_content = surface->content;
@@ -2721,7 +2978,7 @@ _cairo_ps_surface_emit_recording_subsurface (cairo_ps_surface_t *surface,
     _cairo_output_stream_printf (surface->stream, "  q\n");
 
     if (_cairo_surface_is_snapshot (recording_surface))
-       recording_surface = _cairo_surface_snapshot_get_target (recording_surface);
+       free_me = recording_surface = _cairo_surface_snapshot_get_target (recording_surface);
 
     if (recording_surface->content == CAIRO_CONTENT_COLOR) {
        surface->content = CAIRO_CONTENT_COLOR;
@@ -2739,11 +2996,11 @@ _cairo_ps_surface_emit_recording_subsurface (cairo_ps_surface_t *surface,
                                                     CAIRO_RECORDING_REGION_NATIVE);
     assert (status != CAIRO_INT_STATUS_UNSUPPORTED);
     if (unlikely (status))
-       return status;
+       goto err;
 
     status = _cairo_pdf_operators_flush (&surface->pdf_operators);
     if (unlikely (status))
-       return status;
+       goto err;
 
     _cairo_output_stream_printf (surface->stream, "  Q\n");
 
@@ -2760,7 +3017,9 @@ _cairo_ps_surface_emit_recording_subsurface (cairo_ps_surface_t *surface,
     _cairo_pdf_operators_set_cairo_to_pdf_matrix (&surface->pdf_operators,
                                                  &surface->cairo_to_ps);
 
-    return CAIRO_STATUS_SUCCESS;
+err:
+    cairo_surface_destroy (free_me);
+    return status;
 }
 
 static void
@@ -2806,109 +3065,9 @@ _cairo_ps_surface_emit_solid_pattern (cairo_ps_surface_t    *surface,
 }
 
 static cairo_status_t
-_cairo_ps_surface_acquire_surface (cairo_ps_surface_t      *surface,
-                                  cairo_surface_pattern_t *pattern,
-                                  cairo_rectangle_int_t   *extents,
-                                  int                     *width,
-                                  int                     *height,
-                                  int                     *origin_x,
-                                  int                     *origin_y)
-{
-    cairo_status_t          status;
-    cairo_surface_t       *pad_image;
-    int x = 0;
-    int y = 0;
-
-    surface->acquired_image = NULL;
-    surface->image = NULL;
-
-    if (pattern->surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
-       if (pattern->surface->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
-           cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) pattern->surface;
-
-           *width  = sub->extents.width;
-           *height = sub->extents.height;
-       } else {
-           cairo_recording_surface_t *recording_surface;
-           cairo_box_t bbox;
-           cairo_rectangle_int_t extents;
-
-           recording_surface = (cairo_recording_surface_t *) pattern->surface;
-           if (_cairo_surface_is_snapshot (&recording_surface->base))
-               recording_surface = (cairo_recording_surface_t *)
-                   _cairo_surface_snapshot_get_target (&recording_surface->base);
-
-           status = _cairo_recording_surface_get_bbox (recording_surface, &bbox, NULL);
-           if (unlikely (status))
-               return status;
-
-           _cairo_box_round_to_rectangle (&bbox, &extents);
-           *width  = extents.width;
-           *height = extents.height;
-       }
-       return CAIRO_STATUS_SUCCESS;
-    } else {
-       status = _cairo_surface_acquire_source_image (pattern->surface,
-                                                     &surface->acquired_image,
-                                                     &surface->image_extra);
-       if (unlikely (status))
-           return status;
-
-       pad_image = &surface->acquired_image->base;
-       if (cairo_pattern_get_extend (&pattern->base) == CAIRO_EXTEND_PAD) {
-           cairo_box_t box;
-           cairo_rectangle_int_t rect;
-           cairo_surface_pattern_t pad_pattern;
-
-           /* get the operation extents in pattern space */
-           _cairo_box_from_rectangle (&box, extents);
-           _cairo_matrix_transform_bounding_box_fixed (&pattern->base.matrix, &box, NULL);
-           _cairo_box_round_to_rectangle (&box, &rect);
-           x = -rect.x;
-           y = -rect.y;
-
-           pad_image =
-               _cairo_image_surface_create_with_pixman_format (NULL,
-                                                               surface->acquired_image->pixman_format,
-                                                               rect.width, rect.height,
-                                                               0);
-           if (pad_image->status) {
-               status = pad_image->status;
-               goto BAIL;
-           }
-
-           _cairo_pattern_init_for_surface (&pad_pattern, &surface->acquired_image->base);
-           cairo_matrix_init_translate (&pad_pattern.base.matrix, -x, -y);
-           pad_pattern.base.extend = CAIRO_EXTEND_PAD;
-           status = _cairo_surface_paint (pad_image,
-                                          CAIRO_OPERATOR_SOURCE,
-                                          &pad_pattern.base,
-                                          NULL);
-           _cairo_pattern_fini (&pad_pattern.base);
-           if (unlikely (status)) {
-               if (pad_image != &surface->acquired_image->base)
-                   cairo_surface_destroy (pad_image);
-
-               goto BAIL;
-           }
-       }
-
-       surface->image = (cairo_image_surface_t *) pad_image;
-       *width = surface->image->width;
-       *height = surface->image->height;
-       *origin_x = x;
-       *origin_y = y;
-       return CAIRO_STATUS_SUCCESS;
-    }
-
-BAIL:
-    _cairo_ps_surface_release_surface (surface, pattern);
-    return status;
-}
-
-static cairo_status_t
 _cairo_ps_surface_emit_surface (cairo_ps_surface_t      *surface,
-                               cairo_surface_pattern_t *pattern,
+                               cairo_pattern_t         *source_pattern,
+                               cairo_surface_t         *source_surface,
                                cairo_operator_t         op,
                                int                      width,
                                int                      height,
@@ -2916,46 +3075,29 @@ _cairo_ps_surface_emit_surface (cairo_ps_surface_t      *surface,
 {
     cairo_int_status_t status;
 
-    if (pattern->surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
-       cairo_surface_t *source = pattern->surface;
-
-       if (source->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
-           cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) source;
+    if (source_surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
+       if (source_surface->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
+           cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) source_surface;
            status = _cairo_ps_surface_emit_recording_subsurface (surface, sub->target, &sub->extents);
        } else {
-           status = _cairo_ps_surface_emit_recording_surface (surface, source);
+           status = _cairo_ps_surface_emit_recording_surface (surface, source_surface);
        }
     } else {
-       if (pattern->base.extend != CAIRO_EXTEND_PAD) {
-           status = _cairo_ps_surface_emit_jpeg_image (surface, pattern->surface,
+       cairo_image_surface_t *image = (cairo_image_surface_t *) source_surface;
+       if (source_pattern->extend != CAIRO_EXTEND_PAD) {
+           status = _cairo_ps_surface_emit_jpeg_image (surface, source_surface,
                                                        width, height);
            if (status != CAIRO_INT_STATUS_UNSUPPORTED)
                return status;
        }
 
-       status = _cairo_ps_surface_emit_image (surface, surface->image,
-                                              op, pattern->base.filter, stencil_mask);
+       status = _cairo_ps_surface_emit_image (surface, image,
+                                              op, source_pattern->filter, stencil_mask);
     }
 
     return status;
 }
 
-static void
-_cairo_ps_surface_release_surface (cairo_ps_surface_t      *surface,
-                                  cairo_surface_pattern_t *pattern)
-{
-    if (surface->image != surface->acquired_image)
-       cairo_surface_destroy (&surface->image->base);
-
-    if (pattern->surface->type != CAIRO_SURFACE_TYPE_RECORDING) {
-       _cairo_surface_release_source_image (pattern->surface,
-                                            surface->acquired_image,
-                                            surface->image_extra);
-    }
-
-    surface->acquired_image = NULL;
-    surface->image = NULL;
-}
 
 static void
 _path_fixed_init_rectangle (cairo_path_fixed_t *path,
@@ -2987,51 +3129,83 @@ _path_fixed_init_rectangle (cairo_path_fixed_t *path,
 }
 
 static cairo_status_t
-_cairo_ps_surface_paint_surface (cairo_ps_surface_t      *surface,
-                                cairo_surface_pattern_t *pattern,
-                                cairo_rectangle_int_t   *extents,
-                                cairo_operator_t         op,
-                                cairo_bool_t             stencil_mask)
+_cairo_ps_surface_paint_surface (cairo_ps_surface_t     *surface,
+                                cairo_pattern_t        *pattern,
+                                cairo_rectangle_int_t  *extents,
+                                cairo_operator_t        op,
+                                cairo_bool_t            stencil_mask)
 {
     cairo_status_t status;
     int width, height;
     cairo_matrix_t cairo_p2d, ps_p2d;
     cairo_path_fixed_t path;
-    int origin_x = 0;
-    int origin_y = 0;
+    double x_offset, y_offset;
+    cairo_surface_t *source;
+    cairo_image_surface_t *image = NULL;
+    void *image_extra;
 
     status = _cairo_pdf_operators_flush (&surface->pdf_operators);
     if (unlikely (status))
        return status;
 
-    status = _cairo_ps_surface_acquire_surface (surface,
-                                               pattern,
-                                               extents,
-                                               &width, &height,
-                                               &origin_x, &origin_y);
+    status = _cairo_ps_surface_acquire_source_surface_from_pattern (surface,
+                                                                   pattern,
+                                                                   extents,
+                                                                   &width, &height,
+                                                                   &x_offset, &y_offset,
+                                                                   &source,
+                                                                   &image_extra);
     if (unlikely (status))
        return status;
 
+    if (pattern->extend == CAIRO_EXTEND_PAD) {
+       cairo_image_surface_t *img;
+
+       assert (source->type == CAIRO_SURFACE_TYPE_IMAGE);
+       img = (cairo_image_surface_t *) source;
+       status = _cairo_ps_surface_create_padded_image_from_image (surface,
+                                                                  img,
+                                                                  &pattern->matrix,
+                                                                  extents,
+                                                                  &width, &height,
+                                                                  &x_offset, &y_offset,
+                                                                  &image);
+       if (unlikely (status))
+           goto release_source;
+    }
+
     _path_fixed_init_rectangle (&path, extents);
     status = _cairo_pdf_operators_clip (&surface->pdf_operators,
                                        &path,
                                        CAIRO_FILL_RULE_WINDING);
     _cairo_path_fixed_fini (&path);
     if (unlikely (status))
-       return status;
+       goto release_source;
 
-    cairo_p2d = pattern->base.matrix;
+    cairo_p2d = pattern->matrix;
 
     if (surface->paginated_mode == CAIRO_PAGINATED_MODE_FALLBACK) {
-       double scale = cairo_p2d.xx;
+       double x_scale = cairo_p2d.xx;
+       double y_scale = cairo_p2d.yy;
 
        _cairo_output_stream_printf (surface->stream,
-                                    "%% Fallback Image: x=%f y=%f w=%d h=%d res=%fppi size=%ld\n",
-                                    -cairo_p2d.x0/scale,
-                                    -cairo_p2d.y0/scale,
-                                    (int)(width/scale),
-                                    (int)(height/scale),
-                                    scale*72,
+                                    "%% Fallback Image: x=%f y=%f w=%d h=%d ",
+                                    -cairo_p2d.x0/x_scale,
+                                    -cairo_p2d.y0/y_scale,
+                                    (int)(width/x_scale),
+                                    (int)(height/y_scale));
+       if (x_scale == y_scale) {
+           _cairo_output_stream_printf (surface->stream,
+                                        "res=%fppi ",
+                                        x_scale*72);
+       } else {
+           _cairo_output_stream_printf (surface->stream,
+                                        "res=%fx%fppi ",
+                                        x_scale*72,
+                                        y_scale*72);
+       }
+       _cairo_output_stream_printf (surface->stream,
+                                    "size=%ld\n",
                                     (long)width*height*3);
     } else {
        if (op == CAIRO_OPERATOR_SOURCE) {
@@ -3049,7 +3223,7 @@ _cairo_ps_surface_paint_surface (cairo_ps_surface_t      *surface,
 
     ps_p2d = surface->cairo_to_ps;
     cairo_matrix_multiply (&ps_p2d, &cairo_p2d, &ps_p2d);
-    cairo_matrix_translate (&ps_p2d, -origin_x, -origin_y);
+    cairo_matrix_translate (&ps_p2d, x_offset, y_offset);
     cairo_matrix_translate (&ps_p2d, 0.0, height);
     cairo_matrix_scale (&ps_p2d, 1.0, -1.0);
 
@@ -3061,15 +3235,25 @@ _cairo_ps_surface_paint_surface (cairo_ps_surface_t      *surface,
                                     ps_p2d.x0, ps_p2d.y0);
     }
 
-    status = _cairo_ps_surface_emit_surface (surface, pattern, op, width, height, stencil_mask);
-    _cairo_ps_surface_release_surface (surface, pattern);
+    status = _cairo_ps_surface_emit_surface (surface,
+                                            pattern,
+                                            image ? &image->base : source,
+                                            op,
+                                            width, height,
+                                            stencil_mask);
+
+  release_source:
+    if (image)
+       cairo_surface_destroy (&image->base);
+
+    _cairo_ps_surface_release_source_surface_from_pattern (surface, pattern, source, image_extra);
 
     return status;
 }
 
 static cairo_status_t
 _cairo_ps_surface_emit_surface_pattern (cairo_ps_surface_t      *surface,
-                                       cairo_surface_pattern_t *pattern,
+                                       cairo_pattern_t         *pattern,
                                        cairo_rectangle_int_t   *extents,
                                        cairo_operator_t         op)
 {
@@ -3079,23 +3263,45 @@ _cairo_ps_surface_emit_surface_pattern (cairo_ps_surface_t      *surface,
     double xstep, ystep;
     cairo_matrix_t cairo_p2d, ps_p2d;
     cairo_bool_t old_use_string_datasource;
-    int origin_x = 0;
-    int origin_y = 0;
+    double x_offset, y_offset;
+    cairo_surface_t *source;
+    cairo_image_surface_t *image = NULL;
+    void *image_extra;
 
-    cairo_p2d = pattern->base.matrix;
+    cairo_p2d = pattern->matrix;
     status = cairo_matrix_invert (&cairo_p2d);
     /* cairo_pattern_set_matrix ensures the matrix is invertible */
     assert (status == CAIRO_STATUS_SUCCESS);
 
-    status = _cairo_ps_surface_acquire_surface (surface,
-                                               pattern,
-                                               extents,
-                                               &pattern_width, &pattern_height,
-                                               &origin_x, &origin_y);
+    status = _cairo_ps_surface_acquire_source_surface_from_pattern (surface,
+                                                                   pattern,
+                                                                   extents,
+                                                                   &pattern_width, &pattern_height,
+                                                                   &x_offset, &y_offset,
+                                                                   &source,
+                                                                   &image_extra);
     if (unlikely (status))
        return status;
 
-    switch (pattern->base.extend) {
+    if (pattern->extend == CAIRO_EXTEND_PAD) {
+       cairo_image_surface_t *img;
+
+       assert (source->type == CAIRO_SURFACE_TYPE_IMAGE);
+       img = (cairo_image_surface_t *) source;
+       status = _cairo_ps_surface_create_padded_image_from_image (surface,
+                                                                  img,
+                                                                  &pattern->matrix,
+                                                                  extents,
+                                                                  &pattern_width, &pattern_height,
+                                                                  &x_offset, &y_offset,
+                                                                  &image);
+       if (unlikely (status))
+           goto release_source;
+    }
+    if (unlikely (status))
+       goto release_source;
+
+    switch (pattern->extend) {
     case CAIRO_EXTEND_PAD:
     case CAIRO_EXTEND_NONE:
     {
@@ -3113,7 +3319,7 @@ _cairo_ps_surface_emit_surface_pattern (cairo_ps_surface_t      *surface,
         */
        double x1 = 0.0, y1 = 0.0;
        double x2 = surface->width, y2 = surface->height;
-       _cairo_matrix_transform_bounding_box (&pattern->base.matrix,
+       _cairo_matrix_transform_bounding_box (&pattern->matrix,
                                              &x1, &y1, &x2, &y2,
                                              NULL);
 
@@ -3152,10 +3358,13 @@ _cairo_ps_surface_emit_surface_pattern (cairo_ps_surface_t      *surface,
                                     surface->content == CAIRO_CONTENT_COLOR ? 0 : 1,
                                     xstep, ystep);
     }
-    status = _cairo_ps_surface_emit_surface (surface, pattern, op,
+    status = _cairo_ps_surface_emit_surface (surface,
+                                            pattern,
+                                            image ? &image->base : source,
+                                            op,
                                             pattern_width, pattern_height, FALSE);
     if (unlikely (status))
-       return status;
+       goto release_source;
 
     surface->use_string_datasource = old_use_string_datasource;
     _cairo_output_stream_printf (surface->stream,
@@ -3169,7 +3378,7 @@ _cairo_ps_surface_emit_surface_pattern (cairo_ps_surface_t      *surface,
                                 "   /XStep %f /YStep %f\n",
                                 xstep, ystep);
 
-    if (pattern->base.extend == CAIRO_EXTEND_REFLECT) {
+    if (pattern->extend == CAIRO_EXTEND_REFLECT) {
        _cairo_output_stream_printf (surface->stream,
                                     "   /BBox [0 0 %d %d]\n"
                                     "   /PaintProc {\n"
@@ -3200,7 +3409,7 @@ _cairo_ps_surface_emit_surface_pattern (cairo_ps_surface_t      *surface,
     _cairo_output_stream_printf (surface->stream,
                                 ">>\n");
 
-    cairo_p2d = pattern->base.matrix;
+    cairo_p2d = pattern->matrix;
     status = cairo_matrix_invert (&cairo_p2d);
     /* cairo_pattern_set_matrix ensures the matrix is invertible */
     assert (status == CAIRO_STATUS_SUCCESS);
@@ -3220,7 +3429,13 @@ _cairo_ps_surface_emit_surface_pattern (cairo_ps_surface_t      *surface,
     _cairo_output_stream_printf (surface->stream,
                                 "makepattern setpattern\n");
 
-    return CAIRO_STATUS_SUCCESS;
+  release_source:
+    if (image)
+       cairo_surface_destroy (&image->base);
+
+    _cairo_ps_surface_release_source_surface_from_pattern (surface, pattern, source, image_extra);
+
+    return status;
 }
 
 typedef struct _cairo_ps_color_stop {
@@ -3435,7 +3650,8 @@ _cairo_ps_surface_emit_repeating_function (cairo_ps_surface_t       *surface,
 
 static cairo_status_t
 _cairo_ps_surface_emit_gradient (cairo_ps_surface_t       *surface,
-                                cairo_gradient_pattern_t *pattern)
+                                cairo_gradient_pattern_t *pattern,
+                                cairo_bool_t              is_ps_pattern)
 {
     cairo_matrix_t pat_to_ps;
     cairo_circle_double_t start, end;
@@ -3531,10 +3747,14 @@ _cairo_ps_surface_emit_gradient (cairo_ps_surface_t       *surface,
        domain[1] = 1.0;
     }
 
-    if (pattern->base.type == CAIRO_PATTERN_TYPE_LINEAR) {
+    if (is_ps_pattern) {
        _cairo_output_stream_printf (surface->stream,
                                     "<< /PatternType 2\n"
-                                    "   /Shading\n"
+                                    "   /Shading\n");
+    }
+
+    if (pattern->base.type == CAIRO_PATTERN_TYPE_LINEAR) {
+       _cairo_output_stream_printf (surface->stream,
                                     "   << /ShadingType 2\n"
                                     "      /ColorSpace /DeviceRGB\n"
                                     "      /Coords [ %f %f %f %f ]\n",
@@ -3542,8 +3762,6 @@ _cairo_ps_surface_emit_gradient (cairo_ps_surface_t       *surface,
                                     end.center.x, end.center.y);
     } else {
        _cairo_output_stream_printf (surface->stream,
-                                    "<< /PatternType 2\n"
-                                    "   /Shading\n"
                                     "   << /ShadingType 3\n"
                                     "      /ColorSpace /DeviceRGB\n"
                                     "      /Coords [ %f %f %f %f %f %f ]\n",
@@ -3553,10 +3771,6 @@ _cairo_ps_surface_emit_gradient (cairo_ps_surface_t       *surface,
                                     MAX (end.radius, 0));
     }
 
-    _cairo_output_stream_printf (surface->stream,
-                                "      /Domain [ %f %f ]\n",
-                                domain[0], domain[1]);
-
     if (pattern->base.extend != CAIRO_EXTEND_NONE) {
        _cairo_output_stream_printf (surface->stream,
                                      "      /Extend [ true true ]\n");
@@ -3565,22 +3779,44 @@ _cairo_ps_surface_emit_gradient (cairo_ps_surface_t       *surface,
                                      "      /Extend [ false false ]\n");
     }
 
+    if (domain[0] == 0.0 && domain[1] == 1.0) {
+       _cairo_output_stream_printf (surface->stream,
+                                    "      /Function CairoFunction\n");
+    } else {
+       _cairo_output_stream_printf (surface->stream,
+                                    "      /Function <<\n"
+                                    "         /FunctionType 3\n"
+                                    "         /Domain [ 0 1 ]\n"
+                                    "         /Bounds [ ]\n"
+                                    "         /Encode [ %f %f ]\n"
+                                    "         /Functions [ CairoFunction ]\n"
+                                    "      >>\n",
+                                    domain[0], domain[1]);
+    }
+
     _cairo_output_stream_printf (surface->stream,
-                                "      /Function CairoFunction\n"
-                                "   >>\n"
-                                ">>\n"
-                                "[ %f %f %f %f %f %f ]\n"
-                                "makepattern setpattern\n",
-                                 pat_to_ps.xx, pat_to_ps.yx,
-                                 pat_to_ps.xy, pat_to_ps.yy,
-                                 pat_to_ps.x0, pat_to_ps.y0);
+                                "   >>\n");
+
+    if (is_ps_pattern) {
+       _cairo_output_stream_printf (surface->stream,
+                                    ">>\n"
+                                    "[ %f %f %f %f %f %f ]\n"
+                                    "makepattern setpattern\n",
+                                    pat_to_ps.xx, pat_to_ps.yx,
+                                    pat_to_ps.xy, pat_to_ps.yy,
+                                    pat_to_ps.x0, pat_to_ps.y0);
+    } else {
+       _cairo_output_stream_printf (surface->stream,
+                                    "shfill\n");
+    }
 
     return status;
 }
 
 static cairo_status_t
 _cairo_ps_surface_emit_mesh_pattern (cairo_ps_surface_t     *surface,
-                                    cairo_mesh_pattern_t   *pattern)
+                                    cairo_mesh_pattern_t   *pattern,
+                                    cairo_bool_t            is_ps_pattern)
 {
     cairo_matrix_t pat_to_ps;
     cairo_status_t status;
@@ -3615,9 +3851,15 @@ _cairo_ps_surface_emit_mesh_pattern (cairo_ps_surface_t     *surface,
 
     _cairo_output_stream_printf (surface->stream,
                                 "\n"
-                                "/CairoData exch def\n"
-                                "<< /PatternType 2\n"
-                                "   /Shading\n"
+                                "/CairoData exch def\n");
+
+    if (is_ps_pattern) {
+       _cairo_output_stream_printf (surface->stream,
+                                    "<< /PatternType 2\n"
+                                    "   /Shading\n");
+    }
+
+    _cairo_output_stream_printf (surface->stream,
                                 "   << /ShadingType %d\n"
                                 "      /ColorSpace /DeviceRGB\n"
                                 "      /DataSource CairoData\n"
@@ -3635,17 +3877,23 @@ _cairo_ps_surface_emit_mesh_pattern (cairo_ps_surface_t     *surface,
 
     _cairo_output_stream_printf (surface->stream,
                                 "]\n"
-                                "   >>\n"
-                                ">>\n");
+                                "   >>\n");
+
+    if (is_ps_pattern) {
+       _cairo_output_stream_printf (surface->stream,
+                                    ">>\n"
+                                    "[ %f %f %f %f %f %f ]\n",
+                                    pat_to_ps.xx, pat_to_ps.yx,
+                                    pat_to_ps.xy, pat_to_ps.yy,
+                                    pat_to_ps.x0, pat_to_ps.y0);
+       _cairo_output_stream_printf (surface->stream,
+                                    "makepattern\n"
+                                    "setpattern\n");
+    } else {
+       _cairo_output_stream_printf (surface->stream, "shfill\n");
+    }
 
     _cairo_output_stream_printf (surface->stream,
-                                "[ %f %f %f %f %f %f ]\n",
-                                pat_to_ps.xx, pat_to_ps.yx,
-                                 pat_to_ps.xy, pat_to_ps.yy,
-                                 pat_to_ps.x0, pat_to_ps.y0);
-    _cairo_output_stream_printf (surface->stream,
-                                "makepattern\n"
-                                "setpattern\n"
                                 "currentdict /CairoData undef\n");
 
     _cairo_pdf_shading_fini (&shading);
@@ -3692,8 +3940,9 @@ _cairo_ps_surface_emit_pattern (cairo_ps_surface_t *surface,
        break;
 
     case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        status = _cairo_ps_surface_emit_surface_pattern (surface,
-                                                        (cairo_surface_pattern_t *) pattern,
+                                                        (cairo_pattern_t *)pattern,
                                                         extents,
                                                         op);
        if (unlikely (status))
@@ -3703,14 +3952,16 @@ _cairo_ps_surface_emit_pattern (cairo_ps_surface_t *surface,
     case CAIRO_PATTERN_TYPE_LINEAR:
     case CAIRO_PATTERN_TYPE_RADIAL:
        status = _cairo_ps_surface_emit_gradient (surface,
-                                         (cairo_gradient_pattern_t *) pattern);
+                                                 (cairo_gradient_pattern_t *) pattern,
+                                                 TRUE);
        if (unlikely (status))
            return status;
        break;
 
     case CAIRO_PATTERN_TYPE_MESH:
        status = _cairo_ps_surface_emit_mesh_pattern (surface,
-                                         (cairo_mesh_pattern_t *) pattern);
+                                                     (cairo_mesh_pattern_t *) pattern,
+                                                     TRUE);
        if (unlikely (status))
            return status;
        break;
@@ -3719,6 +3970,98 @@ _cairo_ps_surface_emit_pattern (cairo_ps_surface_t *surface,
     return CAIRO_STATUS_SUCCESS;
 }
 
+static cairo_status_t
+_cairo_ps_surface_paint_gradient (cairo_ps_surface_t          *surface,
+                                 const cairo_pattern_t       *source,
+                                 const cairo_rectangle_int_t *extents)
+{
+    cairo_matrix_t pat_to_ps;
+    cairo_status_t status;
+
+    pat_to_ps = source->matrix;
+    status = cairo_matrix_invert (&pat_to_ps);
+    /* cairo_pattern_set_matrix ensures the matrix is invertible */
+    assert (status == CAIRO_STATUS_SUCCESS);
+    cairo_matrix_multiply (&pat_to_ps, &pat_to_ps, &surface->cairo_to_ps);
+
+    if (! _cairo_matrix_is_identity (&pat_to_ps)) {
+       _cairo_output_stream_printf (surface->stream,
+                                    "[%f %f %f %f %f %f] concat\n",
+                                    pat_to_ps.xx, pat_to_ps.yx,
+                                    pat_to_ps.xy, pat_to_ps.yy,
+                                    pat_to_ps.x0, pat_to_ps.y0);
+    }
+
+    if (source->type == CAIRO_PATTERN_TYPE_MESH) {
+       status = _cairo_ps_surface_emit_mesh_pattern (surface,
+                                                     (cairo_mesh_pattern_t *)source,
+                                                     FALSE);
+       if (unlikely (status))
+           return status;
+    } else {
+       status = _cairo_ps_surface_emit_gradient (surface,
+                                                 (cairo_gradient_pattern_t *)source,
+                                                 FALSE);
+       if (unlikely (status))
+           return status;
+    }
+
+    return status;
+}
+
+static cairo_status_t
+_cairo_ps_surface_paint_pattern (cairo_ps_surface_t           *surface,
+                                const cairo_pattern_t        *source,
+                                cairo_rectangle_int_t        *extents,
+                                cairo_operator_t              op,
+                                cairo_bool_t                  stencil_mask)
+{
+    switch (source->type) {
+    case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return _cairo_ps_surface_paint_surface (surface,
+                                               (cairo_pattern_t *)source,
+                                               extents,
+                                               op,
+                                              stencil_mask);
+
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+       return _cairo_ps_surface_paint_gradient (surface,
+                                                 source,
+                                                 extents);
+
+    case CAIRO_PATTERN_TYPE_SOLID:
+    default:
+       ASSERT_NOT_REACHED;
+       return CAIRO_STATUS_SUCCESS;
+    }
+}
+
+static cairo_bool_t
+_can_paint_pattern (const cairo_pattern_t *pattern)
+{
+    switch (pattern->type) {
+    case CAIRO_PATTERN_TYPE_SOLID:
+       return FALSE;
+
+    case CAIRO_PATTERN_TYPE_SURFACE:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       return (pattern->extend == CAIRO_EXTEND_NONE ||
+               pattern->extend == CAIRO_EXTEND_PAD);
+
+    case CAIRO_PATTERN_TYPE_LINEAR:
+    case CAIRO_PATTERN_TYPE_RADIAL:
+    case CAIRO_PATTERN_TYPE_MESH:
+       return TRUE;
+
+    default:
+       ASSERT_NOT_REACHED;
+       return FALSE;
+    }
+}
+
 static cairo_bool_t
 _cairo_ps_surface_get_extents (void                   *abstract_surface,
                               cairo_rectangle_int_t   *rectangle)
@@ -3801,17 +4144,14 @@ _cairo_ps_surface_paint (void                   *abstract_surface,
     if (unlikely (status))
        goto cleanup_composite;
 
-    if (source->type == CAIRO_PATTERN_TYPE_SURFACE &&
-       (source->extend == CAIRO_EXTEND_NONE ||
-        source->extend == CAIRO_EXTEND_PAD))
-    {
+    if (_can_paint_pattern (source)) {
        status = _cairo_pdf_operators_flush (&surface->pdf_operators);
        if (unlikely (status))
            goto cleanup_composite;
 
        _cairo_output_stream_printf (stream, "q\n");
-       status = _cairo_ps_surface_paint_surface (surface,
-                                                (cairo_surface_pattern_t *) source,
+       status = _cairo_ps_surface_paint_pattern (surface,
+                                                 source,
                                                  &extents.bounded, op, FALSE);
        if (unlikely (status))
            goto cleanup_composite;
@@ -3870,8 +4210,8 @@ _cairo_ps_surface_mask (void                      *abstract_surface,
        goto cleanup_composite;
 
     _cairo_output_stream_printf (stream, "q\n");
-    status = _cairo_ps_surface_paint_surface (surface,
-                                             (cairo_surface_pattern_t *) mask,
+    status = _cairo_ps_surface_paint_pattern (surface,
+                                             mask,
                                              &extents.bounded, op, TRUE);
     if (unlikely (status))
        goto cleanup_composite;
@@ -4013,10 +4353,7 @@ _cairo_ps_surface_fill (void             *abstract_surface,
     if (unlikely (status))
        goto cleanup_composite;
 
-    if (source->type == CAIRO_PATTERN_TYPE_SURFACE &&
-       (source->extend == CAIRO_EXTEND_NONE ||
-        source->extend == CAIRO_EXTEND_PAD))
-    {
+    if (_can_paint_pattern (source)) {
        _cairo_output_stream_printf (surface->stream, "q\n");
 
        status =  _cairo_pdf_operators_clip (&surface->pdf_operators,
@@ -4025,8 +4362,8 @@ _cairo_ps_surface_fill (void              *abstract_surface,
        if (unlikely (status))
            goto cleanup_composite;
 
-       status = _cairo_ps_surface_paint_surface (surface,
-                                                (cairo_surface_pattern_t *) source,
+       status = _cairo_ps_surface_paint_pattern (surface,
+                                                 source,
                                                  &extents.bounded, op, FALSE);
        if (unlikely (status))
            goto cleanup_composite;
@@ -4115,6 +4452,12 @@ cleanup_composite:
     return status;
 }
 
+static const char **
+_cairo_ps_surface_get_supported_mime_types (void                *abstract_surface)
+{
+    return _cairo_ps_supported_mime_types;
+}
+
 static void
 _cairo_ps_surface_set_paginated_mode (void                     *abstract_surface,
                                      cairo_paginated_mode_t     paginated_mode)
@@ -4241,6 +4584,7 @@ static const cairo_surface_backend_t cairo_ps_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_surface_default_source,
     NULL, /* acquire_source_image */
     NULL, /* release_source_image */
     NULL, /* snapshot */
@@ -4264,6 +4608,7 @@ static const cairo_surface_backend_t cairo_ps_surface_backend = {
     NULL, /* show_glyphs */
     _cairo_ps_surface_has_show_text_glyphs,
     _cairo_ps_surface_show_text_glyphs,
+    _cairo_ps_surface_get_supported_mime_types,
 };
 
 static const cairo_paginated_surface_backend_t cairo_ps_surface_paginated_backend = {
index fd1d21d..33d0e0d 100644 (file)
@@ -49,13 +49,15 @@ CAIRO_BEGIN_DECLS
 
 /**
  * cairo_ps_level_t:
- * @CAIRO_PS_LEVEL_2: The language level 2 of the PostScript specification.
- * @CAIRO_PS_LEVEL_3: The language level 3 of the PostScript specification.
+ * @CAIRO_PS_LEVEL_2: The language level 2 of the PostScript specification. (Since 1.6)
+ * @CAIRO_PS_LEVEL_3: The language level 3 of the PostScript specification. (Since 1.6)
  *
  * #cairo_ps_level_t is used to describe the language level of the
  * PostScript Language Reference that a generated PostScript file will
  * conform to.
- */
+ *
+ * Since: 1.6
+ **/
 typedef enum _cairo_ps_level {
     CAIRO_PS_LEVEL_2,
     CAIRO_PS_LEVEL_3
index aaed90c..b75f522 100644 (file)
@@ -45,6 +45,9 @@
 #include "cairo-region-private.h"
 #include "cairo-surface-clipper-private.h"
 #include "cairo-types-private.h"
+#include "cairo-image-surface-private.h"
+#include "cairo-pattern-private.h"
+#include "cairo-surface-backend-private.h"
 
 #include "cairo-ft.h"
 #include "cairo-qt.h"
@@ -58,8 +61,7 @@
 #include <QtGui/QPixmap>
 #include <QtGui/QBrush>
 #include <QtGui/QPen>
-#include <QtGui/QWidget>
-#include <QtGui/QX11Info>
+#include <QWidget>
 #include <QtCore/QVarLengthArray>
 
 #if (QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)) || defined(QT_GLYPHS_API_BACKPORT)
@@ -134,9 +136,9 @@ struct cairo_qt_surface_t {
  */
 static cairo_bool_t _qpixmaps_have_no_alpha = FALSE;
 
-/**
- ** Helper methods
- **/
+/*
+ * Helper methods
+ */
 
 static QPainter::CompositionMode
 _qpainter_compositionmode_from_cairo_op (cairo_operator_t op)
@@ -311,7 +313,7 @@ _qmatrix_from_cairo_matrix (const cairo_matrix_t& m)
     return QMatrix(m.xx, m.yx, m.xy, m.yy, m.x0, m.y0);
 }
 
-/** Path conversion **/
+/* Path conversion */
 typedef struct _qpainter_path_transform {
     QPainterPath path;
     const cairo_matrix_t *ctm_inverse;
@@ -381,7 +383,7 @@ _cairo_path_to_qpainterpath_close_path (void *closure)
 }
 
 static inline QPainterPath
-path_to_qt (cairo_path_fixed_t *path,
+path_to_qt (const cairo_path_fixed_t *path,
            const cairo_matrix_t *ctm_inverse = NULL)
 {
     qpainter_path_data data;
@@ -403,7 +405,7 @@ path_to_qt (cairo_path_fixed_t *path,
 }
 
 static inline QPainterPath
-path_to_qt (cairo_path_fixed_t *path,
+path_to_qt (const cairo_path_fixed_t *path,
            cairo_fill_rule_t fill_rule,
            cairo_matrix_t *ctm_inverse = NULL)
 {
@@ -416,9 +418,9 @@ path_to_qt (cairo_path_fixed_t *path,
     return qpath;
 }
 
-/**
- ** Surface backend methods
- **/
+/*
+ * Surface backend methods
+ */
 static cairo_surface_t *
 _cairo_qt_surface_create_similar (void *abstract_surface,
                                  cairo_content_t content,
@@ -649,29 +651,6 @@ _cairo_qt_surface_release_dest_image (void *abstract_surface,
     }
 }
 
-static cairo_status_t
-_cairo_qt_surface_clone_similar (void *abstract_surface,
-                                cairo_surface_t *src,
-                                int              src_x,
-                                int              src_y,
-                                int              width,
-                                int              height,
-                                int              *clone_offset_x,
-                                int              *clone_offset_y,
-                                cairo_surface_t **clone_out)
-{
-    cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
-
-    if (src->backend == qs->base.backend) {
-       *clone_offset_x = 0;
-       *clone_offset_y = 0;
-       *clone_out = cairo_surface_reference (src);
-       return CAIRO_STATUS_SUCCESS;
-    }
-
-    return (cairo_status_t) CAIRO_INT_STATUS_UNSUPPORTED;
-}
-
 static cairo_bool_t
 _cairo_qt_surface_get_extents (void *abstract_surface,
                               cairo_rectangle_int_t *extents)
@@ -715,7 +694,7 @@ _cairo_qt_surface_clipper_intersect_clip_path (cairo_surface_clipper_t *clipper,
 
 static void
 _cairo_qt_surface_set_clip_region (cairo_qt_surface_t *qs,
-                                  cairo_region_t *clip_region)
+                                  const cairo_region_t *clip_region)
 {
     _cairo_surface_clipper_reset (&qs->clipper);
 
@@ -746,7 +725,7 @@ _cairo_qt_surface_set_clip_region (cairo_qt_surface_t *qs,
 
 static cairo_int_status_t
 _cairo_qt_surface_set_clip (cairo_qt_surface_t *qs,
-                           cairo_clip_t *clip)
+                           const cairo_clip_t *clip)
 {
     cairo_int_status_t status;
 
@@ -796,9 +775,9 @@ _cairo_qt_surface_set_clip (cairo_qt_surface_t *qs,
     return status;
 }
 
-/**
- ** Brush conversion
- **/
+/*
+ * Brush conversion
+ */
 
 struct PatternToBrushConverter {
     PatternToBrushConverter (const cairo_pattern_t *pattern) :
@@ -1103,14 +1082,14 @@ struct PatternToPenConverter {
     PatternToBrushConverter mBrushConverter;
 };
 
-/**
- ** Core drawing operations
- **/
+/*
+ * Core drawing operations
+ */
 
 static bool
 _cairo_qt_fast_fill (cairo_qt_surface_t *qs,
                     const cairo_pattern_t *source,
-                    cairo_path_fixed_t *path = NULL,
+                    const cairo_path_fixed_t *path = NULL,
                     cairo_fill_rule_t fill_rule = CAIRO_FILL_RULE_WINDING,
                     double tolerance = 0.0,
                     cairo_antialias_t antialias = CAIRO_ANTIALIAS_NONE)
@@ -1226,7 +1205,7 @@ static cairo_int_status_t
 _cairo_qt_surface_paint (void *abstract_surface,
                         cairo_operator_t op,
                         const cairo_pattern_t *source,
-                        cairo_clip_t          *clip)
+                        const cairo_clip_t            *clip)
 {
     cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
     cairo_int_status_t status;
@@ -1261,11 +1240,11 @@ static cairo_int_status_t
 _cairo_qt_surface_fill (void *abstract_surface,
                        cairo_operator_t op,
                        const cairo_pattern_t *source,
-                       cairo_path_fixed_t *path,
+                       const cairo_path_fixed_t *path,
                        cairo_fill_rule_t fill_rule,
                        double tolerance,
                        cairo_antialias_t antialias,
-                       cairo_clip_t *clip)
+                       const cairo_clip_t *clip)
 {
     cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
 
@@ -1306,13 +1285,13 @@ static cairo_int_status_t
 _cairo_qt_surface_stroke (void *abstract_surface,
                          cairo_operator_t op,
                          const cairo_pattern_t *source,
-                         cairo_path_fixed_t *path,
+                         const cairo_path_fixed_t *path,
                          const cairo_stroke_style_t *style,
                          const cairo_matrix_t *ctm,
                          const cairo_matrix_t *ctm_inverse,
                          double tolerance,
                          cairo_antialias_t antialias,
-                         cairo_clip_t *clip)
+                         const cairo_clip_t *clip)
 {
     cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
 
@@ -1361,8 +1340,7 @@ _cairo_qt_surface_show_glyphs (void *abstract_surface,
                               cairo_glyph_t *glyphs,
                               int num_glyphs,
                               cairo_scaled_font_t *scaled_font,
-                              cairo_clip_t *clip,
-                              int *remaining_glyphs)
+                              const cairo_clip_t *clip)
 {
 #if (QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)) || defined(QT_GLYPHS_API_BACKPORT)
     cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
@@ -1405,7 +1383,7 @@ _cairo_qt_surface_mask (void *abstract_surface,
                        cairo_operator_t op,
                        const cairo_pattern_t *source,
                        const cairo_pattern_t *mask,
-                       cairo_clip_t        *clip)
+                       const cairo_clip_t          *clip)
 {
     cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
 
@@ -1431,108 +1409,6 @@ _cairo_qt_surface_mask (void *abstract_surface,
     return CAIRO_INT_STATUS_UNSUPPORTED;
 }
 
-static cairo_int_status_t
-_cairo_qt_surface_composite (cairo_operator_t op,
-                            const cairo_pattern_t *pattern,
-                            const cairo_pattern_t *mask_pattern,
-                            void *abstract_surface,
-                            int src_x,
-                            int src_y,
-                            int mask_x,
-                            int mask_y,
-                            int dst_x,
-                            int dst_y,
-                            unsigned int width,
-                            unsigned int height,
-                            cairo_region_t *clip_region)
-{
-    cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
-
-    if (mask_pattern)
-        return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    if (! _op_is_supported (qs, op))
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    _cairo_qt_surface_set_clip_region (qs, clip_region);
-
-    D(fprintf(stderr, "q[%p] composite op:%s src:%p [%d %d] dst [%d %d] dim [%d %d]\n",
-              abstract_surface, _opstr(op), (void*)pattern,
-              src_x, src_y, dst_x, dst_y, width, height));
-
-    if (pattern->type == CAIRO_PATTERN_TYPE_SOLID) {
-        cairo_solid_pattern_t *solid = (cairo_solid_pattern_t*) pattern;
-
-        QColor color;
-        color.setRgbF(solid->color.red,
-                      solid->color.green,
-                      solid->color.blue,
-                      solid->color.alpha);
-
-        if (qs->supports_porter_duff)
-            qs->p->setCompositionMode (_qpainter_compositionmode_from_cairo_op (op));
-
-        qs->p->fillRect (dst_x, dst_y, width, height, color);
-
-        if (qs->supports_porter_duff)
-            qs->p->setCompositionMode (QPainter::CompositionMode_SourceOver);
-    } else if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) {
-        cairo_surface_pattern_t *spattern = (cairo_surface_pattern_t*) pattern;
-        cairo_surface_t *surface = spattern->surface;
-
-        QImage *qimg = NULL;
-        QPixmap *qpixmap = NULL;
-        std::auto_ptr<QImage> qimg_d;
-
-        if (surface->type == CAIRO_SURFACE_TYPE_IMAGE) {
-            cairo_image_surface_t *isurf = (cairo_image_surface_t*) surface;
-            qimg = new QImage ((const uchar *) isurf->data,
-                               isurf->width,
-                               isurf->height,
-                               isurf->stride,
-                               _qimage_format_from_cairo_format (isurf->format));
-            qimg_d.reset(qimg);
-        }
-
-        if (surface->type == CAIRO_SURFACE_TYPE_QT) {
-            cairo_qt_surface_t *qsrc = (cairo_qt_surface_t*) surface;
-
-            if (qsrc->image)
-                qimg = qsrc->image;
-            else if (qsrc->pixmap)
-                qpixmap = qsrc->pixmap;
-        }
-
-        if (!qimg && !qpixmap)
-            return CAIRO_INT_STATUS_UNSUPPORTED;
-
-        QMatrix savedMatrix = qs->p->worldMatrix();
-        if (! _cairo_matrix_is_identity (&pattern->matrix)) {
-            cairo_matrix_t pm = pattern->matrix;
-           cairo_status_t status;
-
-            status = cairo_matrix_invert (&pm);
-           assert (status == CAIRO_STATUS_SUCCESS);
-           qs->p->setWorldMatrix(_qmatrix_from_cairo_matrix (pm), true);
-        }
-
-        if (qs->supports_porter_duff)
-            qs->p->setCompositionMode (_qpainter_compositionmode_from_cairo_op (op));
-
-        if (qimg)
-            qs->p->drawImage (dst_x, dst_y, *qimg, src_x, src_y, width, height);
-        else if (qpixmap)
-            qs->p->drawPixmap (dst_x, dst_y, *qpixmap, src_x, src_y, width, height);
-
-        if (qs->supports_porter_duff)
-            qs->p->setCompositionMode (QPainter::CompositionMode_SourceOver);
-    } else {
-        return CAIRO_INT_STATUS_UNSUPPORTED;
-    }
-
-    return CAIRO_INT_STATUS_SUCCESS;
-}
-
 static cairo_status_t
 _cairo_qt_surface_mark_dirty (void *abstract_surface,
                              int x, int y,
@@ -1546,55 +1422,34 @@ _cairo_qt_surface_mark_dirty (void *abstract_surface,
     return CAIRO_STATUS_SUCCESS;
 }
 
-/**
- ** Backend struct
- **/
+/*
+ * Backend struct
+ */
 
 static const cairo_surface_backend_t cairo_qt_surface_backend = {
     CAIRO_SURFACE_TYPE_QT,
     _cairo_qt_surface_finish,
-
-    _cairo_default_context_create,
-
+    _cairo_default_context_create, /* XXX */
     _cairo_qt_surface_create_similar,
     NULL, /* similar image */
     NULL, /* map to image */
     NULL, /* unmap image */
-
+    _cairo_surface_default_source,
     _cairo_qt_surface_acquire_source_image,
     _cairo_qt_surface_release_source_image,
-    _cairo_qt_surface_acquire_dest_image,
-    _cairo_qt_surface_release_dest_image,
-    _cairo_qt_surface_clone_similar,
-
-    _cairo_qt_surface_composite,
-    NULL, /* fill_rectangles */
-    NULL, /* composite_trapezoids */
-    NULL, /* create_span_renderer */
-    NULL, /* check_span_renderer */
+    NULL, /* snapshot */
     NULL, /* copy_page */
     NULL, /* show_page */
     _cairo_qt_surface_get_extents,
-    NULL, /* old_show_glyphs */
     NULL, /* get_font_options */
     NULL, /* flush */
     _cairo_qt_surface_mark_dirty,
-    NULL, /* scaled_font_fini */
-    NULL, /* scaled_glyph_fini */
-
     _cairo_qt_surface_paint,
     _cairo_qt_surface_mask,
     _cairo_qt_surface_stroke,
     _cairo_qt_surface_fill,
-    _cairo_qt_surface_show_glyphs,
-
-    NULL, /* snapshot */
-    NULL, /* is_similar */
     NULL, /* fill_stroke */
-    NULL, /* create_solid_pattern_surface */
-    NULL, /* can_repaint_solid_pattern_surface */
-    NULL, /* has_show_text_glyphs */
-    NULL, /* show_text_glyphs */
+    _cairo_qt_surface_show_glyphs
 };
 
 cairo_surface_t *
index 53d5c35..a9bbbdc 100644 (file)
  * The Quartz font backend is primarily used to render text on Apple
  * MacOS X systems.  The CGFont API is used for the internal
  * implementation of the font backend methods.
- */
+ **/
 
 /**
  * CAIRO_HAS_QUARTZ_FONT:
  *
  * Defined if the Quartz font backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.6
+ **/
 
 static CFDataRef (*CGFontCopyTableForTagPtr) (CGFontRef font, uint32_t tag) = NULL;
 
@@ -340,7 +342,7 @@ const cairo_font_face_backend_t _cairo_quartz_font_face_backend = {
 };
 
 /**
- * cairo_quartz_font_face_create_for_cgfont
+ * cairo_quartz_font_face_create_for_cgfont:
  * @font: a #CGFontRef obtained through a method external to cairo.
  *
  * Creates a new font for the Quartz font backend based on a
@@ -351,7 +353,7 @@ const cairo_font_face_backend_t _cairo_quartz_font_face_backend = {
  *  cairo_font_face_destroy() when you are done using it.
  *
  * Since: 1.6
- */
+ **/
 cairo_font_face_t *
 cairo_quartz_font_face_create_for_cgfont (CGFontRef font)
 {
@@ -815,7 +817,7 @@ _cairo_quartz_scaled_font_get_cg_font_ref (cairo_scaled_font_t *abstract_font)
  */
 
 /**
- * cairo_quartz_font_face_create_for_atsu_font_id
+ * cairo_quartz_font_face_create_for_atsu_font_id:
  * @font_id: an ATSUFontID for the font.
  *
  * Creates a new font for the Quartz font backend based on an
index b04c421..763ce96 100644 (file)
 
 #include "cairoint.h"
 
+#include "cairo-image-surface-private.h"
 #include "cairo-quartz-image.h"
 #include "cairo-quartz-private.h"
+#include "cairo-surface-backend-private.h"
 
 #include "cairo-error-private.h"
 #include "cairo-default-context-private.h"
@@ -110,14 +112,18 @@ _cairo_quartz_image_surface_map_to_image (void *asurface,
                                          const cairo_rectangle_int_t *extents)
 {
     cairo_quartz_image_surface_t *surface = (cairo_quartz_image_surface_t *) asurface;
-    return _cairo_surface_create_for_rectangle_int (surface->imageSurface, extents);
+
+    return cairo_surface_map_to_image (&surface->imageSurface->base, extents);
 }
 
 static cairo_int_status_t
 _cairo_quartz_image_surface_unmap_image (void *asurface,
                                         cairo_image_surface_t *image)
 {
-    cairo_surface_destroy (&image->base);
+    cairo_quartz_image_surface_t *surface = (cairo_quartz_image_surface_t *) asurface;
+
+    cairo_surface_unmap_image (&surface->imageSurface->base, &image->base);
+    return cairo_surface_status (&surface->imageSurface->base);
 }
 
 static cairo_bool_t
@@ -149,15 +155,15 @@ _cairo_quartz_image_surface_flush (void *asurface)
     /* To be released by the ReleaseCallback */
     cairo_surface_reference ((cairo_surface_t*) surface->imageSurface);
 
-    newImage = _cairo_quartz_create_cgimage (surface->imageSurface->format,
-                                            surface->imageSurface->width,
-                                            surface->imageSurface->height,
-                                            surface->imageSurface->stride,
-                                            surface->imageSurface->data,
-                                            TRUE,
-                                            NULL,
-                                            DataProviderReleaseCallback,
-                                            surface->imageSurface);
+    newImage = CairoQuartzCreateCGImage (surface->imageSurface->format,
+                                        surface->imageSurface->width,
+                                        surface->imageSurface->height,
+                                        surface->imageSurface->stride,
+                                        surface->imageSurface->data,
+                                        TRUE,
+                                        NULL,
+                                        DataProviderReleaseCallback,
+                                        surface->imageSurface);
 
     surface->image = newImage;
     CGImageRelease (oldImage);
@@ -234,10 +240,12 @@ _cairo_quartz_image_surface_glyphs (void                  *abstract_surface,
                                    const cairo_clip_t          *clip)
 {
     cairo_quartz_image_surface_t *surface = abstract_surface;
-    return _cairo_surface_show_glyphs (&surface->imageSurface->base,
-                                      op, source,
-                                      glyphs, num_glyphs, scaled_font,
-                                      clip, num_remaining);
+    return _cairo_surface_show_text_glyphs (&surface->imageSurface->base,
+                                           op, source,
+                                           NULL, 0,
+                                           glyphs, num_glyphs,
+                                           NULL, 0, 0,
+                                           scaled_font, clip);
 }
 
 
@@ -252,6 +260,7 @@ static const cairo_surface_backend_t cairo_quartz_image_surface_backend = {
     _cairo_quartz_image_surface_map_to_image,
     _cairo_quartz_image_surface_unmap_image,
 
+    _cairo_surface_default_source,
     _cairo_quartz_image_surface_acquire_source_image,
     NULL, /* release_source_image */
     NULL, /* snapshot */
@@ -269,13 +278,13 @@ static const cairo_surface_backend_t cairo_quartz_image_surface_backend = {
     _cairo_quartz_image_surface_mask,
     _cairo_quartz_image_surface_stroke,
     _cairo_quartz_image_surface_fill,
-    NULL  /* fill-stroke */
+    NULL,  /* fill-stroke */
     _cairo_quartz_image_surface_glyphs,
 };
 
 /**
- * cairo_quartz_image_surface_create
- * @surface: a cairo image surface to wrap with a quartz image surface
+ * cairo_quartz_image_surface_create:
+ * @image_surface: a cairo image surface to wrap with a quartz image surface
  *
  * Creates a Quartz surface backed by a CGImageRef that references the
  * given image surface. The resulting surface can be rendered quickly
@@ -287,7 +296,7 @@ static const cairo_surface_backend_t cairo_quartz_image_surface_backend = {
  * Return value: the newly created surface.
  *
  * Since: 1.6
- */
+ **/
 cairo_surface_t *
 cairo_quartz_image_surface_create (cairo_surface_t *surface)
 {
@@ -334,14 +343,14 @@ cairo_quartz_image_surface_create (cairo_surface_t *surface)
      */
     cairo_surface_reference (surface);
 
-    image = _cairo_quartz_create_cgimage (format,
-                                         width, height,
-                                         stride,
-                                         data,
-                                         TRUE,
-                                         NULL,
-                                         DataProviderReleaseCallback,
-                                         image_surface);
+    image = CairoQuartzCreateCGImage (format,
+                                     width, height,
+                                     stride,
+                                     data,
+                                     TRUE,
+                                     NULL,
+                                     DataProviderReleaseCallback,
+                                     image_surface);
 
     if (!image) {
        free (qisurf);
index 474ec15..f841a49 100644 (file)
@@ -80,10 +80,10 @@ typedef struct cairo_quartz_image_surface {
     cairo_image_surface_t *imageSurface;
 } cairo_quartz_image_surface_t;
 
-cairo_bool_t
+cairo_private cairo_bool_t
 _cairo_quartz_verify_surface_size(int width, int height);
 
-CGImageRef
+cairo_private CGImageRef
 CairoQuartzCreateCGImage (cairo_format_t format,
                              unsigned int width,
                              unsigned int height,
@@ -94,7 +94,7 @@ CairoQuartzCreateCGImage (cairo_format_t format,
                              CGDataProviderReleaseDataCallback releaseCallback,
                              void *releaseInfo);
 
-CGFontRef
+cairo_private CGFontRef
 _cairo_quartz_scaled_font_get_cg_font_ref (cairo_scaled_font_t *sfont);
 
 #else
index e18461b..d216261 100644 (file)
  *
  * The Quartz surface is used to render cairo graphics targeting the
  * Apple OS X Quartz rendering system.
- */
+ **/
 
 /**
  * CAIRO_HAS_QUARTZ_SURFACE:
  *
  * Defined if the Quartz surface backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.6
+ **/
 
 #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1050
 /* This method is private, but it exists.  Its params are are exposed
@@ -1634,7 +1636,8 @@ _cairo_quartz_cg_paint (const cairo_compositor_t *compositor,
     cairo_quartz_drawing_state_t state;
     cairo_int_status_t rv;
 
-    ND ((stderr, "%p _cairo_quartz_surface_paint op %d source->type %d\n", surface, op, source->type));
+    ND ((stderr, "%p _cairo_quartz_surface_paint op %d source->type %d\n",
+        extents->surface, extents->op, extents->source_pattern.base.type));
 
     rv = _cairo_quartz_setup_state (&state, extents);
     if (unlikely (rv))
@@ -1732,7 +1735,9 @@ _cairo_quartz_cg_mask (const cairo_compositor_t *compositor,
     cairo_bool_t need_temp;
     CGInterpolationQuality filter;
 
-    ND ((stderr, "%p _cairo_quartz_surface_mask op %d source->type %d mask->type %d\n", surface, op, source->type, mask->type));
+    ND ((stderr, "%p _cairo_quartz_surface_mask op %d source->type %d mask->type %d\n",
+        extents->surface, extents->op, extents->source_pattern.base.type,
+        extents->mask_pattern.base.type));
 
     if (mask->type == CAIRO_PATTERN_TYPE_SOLID)
        return _cairo_quartz_cg_mask_with_solid (surface, extents);
@@ -1820,7 +1825,8 @@ _cairo_quartz_cg_fill (const cairo_compositor_t *compositor,
     cairo_quartz_drawing_state_t state;
     cairo_int_status_t rv = CAIRO_STATUS_SUCCESS;
 
-    ND ((stderr, "%p _cairo_quartz_surface_fill op %d source->type %d\n", surface, op, source->type));
+    ND ((stderr, "%p _cairo_quartz_surface_fill op %d source->type %d\n",
+        extents->surface, extents->op, extents->source_pattern.base.type));
 
     rv = _cairo_quartz_setup_state (&state, extents);
     if (unlikely (rv))
@@ -1866,7 +1872,8 @@ _cairo_quartz_cg_stroke (const cairo_compositor_t *compositor,
     cairo_int_status_t rv = CAIRO_STATUS_SUCCESS;
     CGAffineTransform strokeTransform, invStrokeTransform;
 
-    ND ((stderr, "%p _cairo_quartz_surface_stroke op %d source->type %d\n", surface, op, source->type));
+    ND ((stderr, "%p _cairo_quartz_surface_stroke op %d source->type %d\n",
+        extents->surface, extents->op, extents->source_pattern.base.type));
 
     rv = _cairo_quartz_setup_state (&state, extents);
     if (unlikely (rv))
@@ -1975,6 +1982,7 @@ _cairo_quartz_cg_glyphs (const cairo_compositor_t *compositor,
 
     switch (scaled_font->options.antialias) {
        case CAIRO_ANTIALIAS_SUBPIXEL:
+       case CAIRO_ANTIALIAS_BEST:
            CGContextSetShouldAntialias (state.cgMaskContext, TRUE);
            CGContextSetShouldSmoothFonts (state.cgMaskContext, TRUE);
            if (CGContextSetAllowsFontSmoothingPtr &&
@@ -1988,6 +1996,8 @@ _cairo_quartz_cg_glyphs (const cairo_compositor_t *compositor,
            CGContextSetShouldAntialias (state.cgMaskContext, FALSE);
            break;
        case CAIRO_ANTIALIAS_GRAY:
+       case CAIRO_ANTIALIAS_GOOD:
+       case CAIRO_ANTIALIAS_FAST:
            CGContextSetShouldAntialias (state.cgMaskContext, TRUE);
            CGContextSetShouldSmoothFonts (state.cgMaskContext, FALSE);
            break;
@@ -2206,6 +2216,7 @@ static const struct _cairo_surface_backend cairo_quartz_surface_backend = {
     _cairo_quartz_surface_map_to_image,
     _cairo_quartz_surface_unmap_image,
 
+    _cairo_surface_default_source,
     _cairo_quartz_surface_acquire_source_image,
     _cairo_quartz_surface_release_source_image,
     _cairo_quartz_surface_snapshot,
@@ -2280,7 +2291,7 @@ _cairo_quartz_surface_create_internal (CGContextRef cgContext,
 }
 
 /**
- * cairo_quartz_surface_create_for_cg_context
+ * cairo_quartz_surface_create_for_cg_context:
  * @cgContext: the existing CGContext for which to create the surface
  * @width: width of the surface, in pixels
  * @height: height of the surface, in pixels
@@ -2303,7 +2314,7 @@ _cairo_quartz_surface_create_internal (CGContextRef cgContext,
  *
  * Return value: the newly created Cairo surface.
  *
- * Since: 1.4
+ * Since: 1.6
  **/
 
 cairo_surface_t *
@@ -2322,7 +2333,7 @@ cairo_quartz_surface_create_for_cg_context (CGContextRef cgContext,
 }
 
 /**
- * cairo_quartz_surface_create
+ * cairo_quartz_surface_create:
  * @format: format of pixels in the surface to create
  * @width: width of the surface, in pixels
  * @height: height of the surface, in pixels
@@ -2334,7 +2345,7 @@ cairo_quartz_surface_create_for_cg_context (CGContextRef cgContext,
  *
  * Return value: the newly created surface.
  *
- * Since: 1.4
+ * Since: 1.6
  **/
 cairo_surface_t *
 cairo_quartz_surface_create (cairo_format_t format,
@@ -2432,7 +2443,7 @@ cairo_quartz_surface_create (cairo_format_t format,
 }
 
 /**
- * cairo_quartz_surface_get_cg_context
+ * cairo_quartz_surface_get_cg_context:
  * @surface: the Cairo Quartz surface
  *
  * Returns the CGContextRef that the given Quartz surface is backed
@@ -2447,7 +2458,7 @@ cairo_quartz_surface_create (cairo_format_t format,
  *
  * Return value: the CGContextRef for the given surface.
  *
- * Since: 1.4
+ * Since: 1.6
  **/
 CGContextRef
 cairo_quartz_surface_get_cg_context (cairo_surface_t *surface)
diff --git a/src/cairo-raster-source-pattern.c b/src/cairo-raster-source-pattern.c
new file mode 100644 (file)
index 0000000..601fe60
--- /dev/null
@@ -0,0 +1,432 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairoint.h"
+#include "cairo-error-private.h"
+#include "cairo-pattern-private.h"
+
+/**
+ * SECTION:cairo-raster-source
+ * @Title: Raster Sources
+ * @Short_Description: Supplying arbitrary image data
+ * @See_Also: #cairo_pattern_t
+ *
+ * The raster source provides the ability to supply arbitrary pixel data
+ * whilst rendering. The pixels are queried at the time of rasterisation
+ * by means of user callback functions, allowing for the ultimate
+ * flexibility. For example, in handling compressed image sources, you
+ * may keep a MRU cache of decompressed images and decompress sources on the
+ * fly and discard old ones to conserve memory.
+ *
+ * For the raster source to be effective, you must at least specify
+ * the acquire and release callbacks which are used to retrieve the pixel
+ * data for the region of interest and demark when it can be freed afterwards.
+ * Other callbacks are provided for when the pattern is copied temporarily
+ * during rasterisation, or more permanently as a snapshot in order to keep
+ * the pixel data available for printing.
+ *
+ * Since: 1.12
+ **/
+
+cairo_surface_t *
+_cairo_raster_source_pattern_acquire (const cairo_pattern_t *abstract_pattern,
+                                     cairo_surface_t *target,
+                                     const cairo_rectangle_int_t *extents)
+{
+    cairo_raster_source_pattern_t *pattern =
+       (cairo_raster_source_pattern_t *) abstract_pattern;
+
+    if (pattern->acquire == NULL)
+       return NULL;
+
+    if (extents == NULL)
+       extents = &pattern->extents;
+
+    return pattern->acquire (&pattern->base, pattern->user_data,
+                            target, extents);
+}
+
+void
+_cairo_raster_source_pattern_release (const cairo_pattern_t *abstract_pattern,
+                                     cairo_surface_t *surface)
+{
+    cairo_raster_source_pattern_t *pattern =
+       (cairo_raster_source_pattern_t *) abstract_pattern;
+
+    if (pattern->release == NULL)
+       return;
+
+    pattern->release (&pattern->base, pattern->user_data, surface);
+}
+
+cairo_status_t
+_cairo_raster_source_pattern_init_copy (cairo_pattern_t *abstract_pattern,
+                                       const cairo_pattern_t *other)
+{
+    cairo_raster_source_pattern_t *pattern =
+       (cairo_raster_source_pattern_t *) abstract_pattern;
+    cairo_status_t status;
+
+    VG (VALGRIND_MAKE_MEM_UNDEFINED (pattern, sizeof (cairo_raster_source_pattern_t)));
+    memcpy(pattern, other, sizeof (cairo_raster_source_pattern_t));
+
+    status = CAIRO_STATUS_SUCCESS;
+    if (pattern->copy)
+       status = pattern->copy (&pattern->base, pattern->user_data, other);
+
+    return status;
+}
+
+cairo_status_t
+_cairo_raster_source_pattern_snapshot (cairo_pattern_t *abstract_pattern)
+{
+    cairo_raster_source_pattern_t *pattern =
+       (cairo_raster_source_pattern_t *) abstract_pattern;
+
+    if (pattern->snapshot == NULL)
+       return CAIRO_STATUS_SUCCESS;
+
+    return pattern->snapshot (&pattern->base, pattern->user_data);
+}
+
+void
+_cairo_raster_source_pattern_finish (cairo_pattern_t *abstract_pattern)
+{
+    cairo_raster_source_pattern_t *pattern =
+       (cairo_raster_source_pattern_t *) abstract_pattern;
+
+    if (pattern->finish == NULL)
+       return;
+
+    pattern->finish (&pattern->base, pattern->user_data);
+}
+
+/* Public interface */
+
+/**
+ * cairo_pattern_create_raster_source:
+ * @user_data: the user data to be passed to all callbacks
+ * @content: content type for the pixel data that will be returned. Knowing
+ * the content type ahead of time is used for analysing the operation and
+ * picking the appropriate rendering path.
+ * @width: maximum size of the sample area
+ * @height: maximum size of the sample area
+ *
+ * Creates a new user pattern for providing pixel data.
+ *
+ * Use the setter functions to associate callbacks with the returned
+ * pattern.  The only mandatory callback is acquire.
+ *
+ * Return value: a newly created #cairo_pattern_t. Free with
+ *  cairo_pattern_destroy() when you are done using it.
+ *
+ * Since: 1.12
+ **/
+cairo_pattern_t *
+cairo_pattern_create_raster_source (void *user_data,
+                                   cairo_content_t content,
+                                   int width, int height)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    CAIRO_MUTEX_INITIALIZE ();
+
+    if (width < 0 || height < 0)
+       return _cairo_pattern_create_in_error (CAIRO_STATUS_INVALID_SIZE);
+
+    if (! CAIRO_CONTENT_VALID (content))
+       return _cairo_pattern_create_in_error (CAIRO_STATUS_INVALID_CONTENT);
+
+    pattern = calloc (1, sizeof (*pattern));
+    if (unlikely (pattern == NULL))
+       return _cairo_pattern_create_in_error (CAIRO_STATUS_NO_MEMORY);
+
+    _cairo_pattern_init (&pattern->base,
+                        CAIRO_PATTERN_TYPE_RASTER_SOURCE);
+    CAIRO_REFERENCE_COUNT_INIT (&pattern->base.ref_count, 1);
+
+    pattern->content = content;
+
+    pattern->extents.x = 0;
+    pattern->extents.y = 0;
+    pattern->extents.width  = width;
+    pattern->extents.height = height;
+
+    pattern->user_data = user_data;
+
+    return &pattern->base;
+}
+
+/**
+ * cairo_raster_source_pattern_set_callback_data:
+ * @pattern: the pattern to update
+ * @data: the user data to be passed to all callbacks
+ *
+ * Updates the user data that is provided to all callbacks.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_raster_source_pattern_set_callback_data (cairo_pattern_t *abstract_pattern,
+                                              void *data)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    pattern->user_data = data;
+}
+
+/**
+ * cairo_raster_source_pattern_get_callback_data:
+ * @pattern: the pattern to update
+ *
+ * Queries the current user data.
+ *
+ * Return value: the current user-data passed to each callback
+ *
+ * Since: 1.12
+ **/
+void *
+cairo_raster_source_pattern_get_callback_data (cairo_pattern_t *abstract_pattern)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return NULL;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    return pattern->user_data;
+}
+
+/**
+ * cairo_raster_source_pattern_set_acquire:
+ * @pattern: the pattern to update
+ * @acquire: acquire callback
+ * @release: release callback
+ *
+ * Specifies the callbacks used to generate the image surface for a rendering
+ * operation (acquire) and the function used to cleanup that surface afterwards.
+ *
+ * The @acquire callback should create a surface (preferably an image
+ * surface created to match the target using
+ * cairo_surface_create_similar_image()) that defines at least the region
+ * of interest specified by extents. The surface is allowed to be the entire
+ * sample area, but if it does contain a subsection of the sample area,
+ * the surface extents should be provided by setting the device offset (along
+ * with its width and height) using cairo_surface_set_device_offset().
+ *
+ * Since: 1.12
+ **/
+void
+cairo_raster_source_pattern_set_acquire (cairo_pattern_t *abstract_pattern,
+                                        cairo_raster_source_acquire_func_t acquire,
+                                        cairo_raster_source_release_func_t release)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    pattern->acquire = acquire;
+    pattern->release = release;
+}
+
+/**
+ * cairo_raster_source_pattern_get_acquire:
+ * @pattern: the pattern to query
+ * @acquire: return value for the current acquire callback
+ * @release: return value for the current release callback
+ *
+ * Queries the current acquire and release callbacks.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_raster_source_pattern_get_acquire (cairo_pattern_t *abstract_pattern,
+                                        cairo_raster_source_acquire_func_t *acquire,
+                                        cairo_raster_source_release_func_t *release)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    if (acquire)
+       *acquire = pattern->acquire;
+    if (release)
+       *release = pattern->release;
+}
+
+/**
+ * cairo_raster_source_pattern_set_snapshot:
+ * @pattern: the pattern to update
+ * @snapshot: snapshot callback
+ *
+ * Sets the callback that will be used whenever a snapshot is taken of the
+ * pattern, that is whenever the current contents of the pattern should be
+ * preserved for later use. This is typically invoked whilst printing.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_raster_source_pattern_set_snapshot (cairo_pattern_t *abstract_pattern,
+                                         cairo_raster_source_snapshot_func_t snapshot)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    pattern->snapshot = snapshot;
+}
+
+/**
+ * cairo_raster_source_pattern_get_snapshot:
+ * @pattern: the pattern to query
+ *
+ * Queries the current snapshot callback.
+ *
+ * Return value: the current snapshot callback
+ *
+ * Since: 1.12
+ **/
+cairo_raster_source_snapshot_func_t
+cairo_raster_source_pattern_get_snapshot (cairo_pattern_t *abstract_pattern)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return NULL;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    return pattern->snapshot;
+}
+
+/**
+ * cairo_raster_source_pattern_set_copy:
+ * @pattern: the pattern to update
+ * @copy: the copy callback
+ *
+ * Updates the copy callback which is used whenever a temporary copy of the
+ * pattern is taken.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_raster_source_pattern_set_copy (cairo_pattern_t *abstract_pattern,
+                                     cairo_raster_source_copy_func_t copy)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    pattern->copy = copy;
+}
+
+/**
+ * cairo_raster_source_pattern_get_copy:
+ * @pattern: the pattern to query
+ *
+ * Queries the current copy callback.
+ *
+ * Return value: the current copy callback
+ *
+ * Since: 1.12
+ **/
+cairo_raster_source_copy_func_t
+cairo_raster_source_pattern_get_copy (cairo_pattern_t *abstract_pattern)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return NULL;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    return pattern->copy;
+}
+
+/**
+ * cairo_raster_source_pattern_set_finish:
+ * @pattern: the pattern to update
+ * @finish: the finish callback
+ *
+ * Updates the finish callback which is used whenever a pattern (or a copy
+ * thereof) will no longer be used.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_raster_source_pattern_set_finish (cairo_pattern_t *abstract_pattern,
+                                       cairo_raster_source_finish_func_t finish)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    pattern->finish = finish;
+}
+
+/**
+ * cairo_raster_source_pattern_get_finish:
+ * @pattern: the pattern to query
+ *
+ * Queries the current finish callback.
+ *
+ * Return value: the current finish callback
+ *
+ * Since: 1.12
+ **/
+cairo_raster_source_finish_func_t
+cairo_raster_source_pattern_get_finish (cairo_pattern_t *abstract_pattern)
+{
+    cairo_raster_source_pattern_t *pattern;
+
+    if (abstract_pattern->type != CAIRO_PATTERN_TYPE_RASTER_SOURCE)
+       return NULL;
+
+    pattern = (cairo_raster_source_pattern_t *) abstract_pattern;
+    return pattern->finish;
+}
diff --git a/src/cairo-recording-surface-inline.h b/src/cairo-recording-surface-inline.h
new file mode 100644 (file)
index 0000000..9002ccd
--- /dev/null
@@ -0,0 +1,68 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Kristian Høgsberg <krh@redhat.com>
+ *     Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#ifndef CAIRO_RECORDING_SURFACE_INLINE_H
+#define CAIRO_RECORDING_SURFACE_INLINE_H
+
+#include "cairo-recording-surface-private.h"
+
+static inline cairo_bool_t
+_cairo_recording_surface_get_bounds (cairo_surface_t *surface,
+                                    cairo_rectangle_t *extents)
+{
+    cairo_recording_surface_t *recording = (cairo_recording_surface_t *)surface;
+    if (recording->unbounded)
+       return FALSE;
+
+    *extents = recording->extents_pixels;
+    return TRUE;
+}
+
+/**
+ * _cairo_surface_is_recording:
+ * @surface: a #cairo_surface_t
+ *
+ * Checks if a surface is a #cairo_recording_surface_t
+ *
+ * Return value: %TRUE if the surface is a recording surface
+ **/
+static inline cairo_bool_t
+_cairo_surface_is_recording (const cairo_surface_t *surface)
+{
+    return surface->backend->type == CAIRO_SURFACE_TYPE_RECORDING;
+}
+
+#endif /* CAIRO_RECORDING_SURFACE_INLINE_H */
index 6e93eab..0235b0f 100644 (file)
@@ -184,30 +184,4 @@ _cairo_recording_surface_get_ink_bbox (cairo_recording_surface_t *surface,
                                       cairo_box_t *bbox,
                                       const cairo_matrix_t *transform);
 
-static inline cairo_bool_t
-_cairo_recording_surface_get_bounds (cairo_surface_t *surface,
-                                    cairo_rectangle_t *extents)
-{
-    cairo_recording_surface_t *recording = (cairo_recording_surface_t *)surface;
-    if (recording->unbounded)
-       return FALSE;
-
-    *extents = recording->extents_pixels;
-    return TRUE;
-}
-
-/**
- * _cairo_surface_is_recording:
- * @surface: a #cairo_surface_t
- *
- * Checks if a surface is a #cairo_recording_surface_t
- *
- * Return value: %TRUE if the surface is a recording surface
- **/
-static inline cairo_bool_t
-_cairo_surface_is_recording (const cairo_surface_t *surface)
-{
-    return surface->backend->type == CAIRO_SURFACE_TYPE_RECORDING;
-}
-
 #endif /* CAIRO_RECORDING_SURFACE_H */
index 5316a10..02d8afd 100644 (file)
  * improved by improving the implementation of snapshot for the
  * various objects. For example, it would be nice to have a
  * copy-on-write implementation for _cairo_surface_snapshot.
- */
+ **/
 
 #include "cairoint.h"
 
 #include "cairo-array-private.h"
 #include "cairo-analysis-surface-private.h"
 #include "cairo-clip-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 #include "cairo-composite-rectangles-private.h"
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
 #include "cairo-surface-wrapper-private.h"
 #include "cairo-traps-private.h"
 
@@ -105,7 +105,7 @@ static const cairo_surface_backend_t cairo_recording_surface_backend;
  * This macro was added for completeness in cairo 1.10.
  *
  * Since: 1.10
- */
+ **/
 
 /* Currently all recording surfaces do have a size which should be passed
  * in as the maximum size of any target surface against which the
@@ -535,6 +535,7 @@ static const cairo_surface_backend_t proxy_backend  = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_surface_default_source,
     proxy_acquire_source_image,
     proxy_release_source_image,
 };
@@ -676,6 +677,21 @@ _cairo_recording_surface_reset (cairo_recording_surface_t *surface)
     _cairo_array_init (&surface->commands, sizeof (cairo_command_t *));
 }
 
+static cairo_bool_t
+is_identity_recording_pattern (const cairo_pattern_t *pattern)
+{
+    cairo_surface_t *surface;
+
+    if (pattern->type != CAIRO_PATTERN_TYPE_SURFACE)
+       return FALSE;
+
+    if (!_cairo_matrix_is_identity(&pattern->matrix))
+       return FALSE;
+
+    surface = ((cairo_surface_pattern_t *)pattern)->surface;
+    return surface->backend->type == CAIRO_SURFACE_TYPE_RECORDING;
+}
+
 static cairo_int_status_t
 _cairo_recording_surface_paint (void                     *abstract_surface,
                                cairo_operator_t           op,
@@ -687,6 +703,8 @@ _cairo_recording_surface_paint (void                          *abstract_surface,
     cairo_command_paint_t *command;
     cairo_composite_rectangles_t composite;
 
+    TRACE ((stderr, "%s: surface=%d\n", __FUNCTION__, surface->base.unique_id));
+
     if (op == CAIRO_OPERATOR_CLEAR && clip == NULL) {
        if (surface->optimize_clears) {
            _cairo_recording_surface_reset (surface);
@@ -695,12 +713,15 @@ _cairo_recording_surface_paint (void                        *abstract_surface,
     }
 
     if (clip == NULL && surface->optimize_clears &&
-       source->type == CAIRO_PATTERN_TYPE_SOLID &&
        (op == CAIRO_OPERATOR_SOURCE ||
         (op == CAIRO_OPERATOR_OVER &&
          (surface->base.is_clear || _cairo_pattern_is_opaque_solid (source)))))
     {
        _cairo_recording_surface_reset (surface);
+       if (is_identity_recording_pattern (source)) {
+           cairo_surface_t *src = ((cairo_surface_pattern_t *)source)->surface;
+           return _cairo_recording_surface_replay (src, &surface->base);
+       }
     }
 
     status = _cairo_composite_rectangles_init_for_paint (&composite,
@@ -757,6 +778,8 @@ _cairo_recording_surface_mask (void                 *abstract_surface,
     cairo_command_mask_t *command;
     cairo_composite_rectangles_t composite;
 
+    TRACE ((stderr, "%s: surface=%d\n", __FUNCTION__, surface->base.unique_id));
+
     status = _cairo_composite_rectangles_init_for_mask (&composite,
                                                        &surface->base,
                                                        op, source, mask,
@@ -822,6 +845,8 @@ _cairo_recording_surface_stroke (void                       *abstract_surface,
     cairo_command_stroke_t *command;
     cairo_composite_rectangles_t composite;
 
+    TRACE ((stderr, "%s: surface=%d\n", __FUNCTION__, surface->base.unique_id));
+
     status = _cairo_composite_rectangles_init_for_stroke (&composite,
                                                          &surface->base,
                                                          op, source,
@@ -897,6 +922,8 @@ _cairo_recording_surface_fill (void                 *abstract_surface,
     cairo_command_fill_t *command;
     cairo_composite_rectangles_t composite;
 
+    TRACE ((stderr, "%s: surface=%d\n", __FUNCTION__, surface->base.unique_id));
+
     status = _cairo_composite_rectangles_init_for_fill (&composite,
                                                        &surface->base,
                                                        op, source, path,
@@ -974,6 +1001,8 @@ _cairo_recording_surface_show_text_glyphs (void                            *abstract_surface,
     cairo_command_show_text_glyphs_t *command;
     cairo_composite_rectangles_t composite;
 
+    TRACE ((stderr, "%s: surface=%d\n", __FUNCTION__, surface->base.unique_id));
+
     status = _cairo_composite_rectangles_init_for_glyphs (&composite,
                                                          &surface->base,
                                                          op, source,
@@ -1060,7 +1089,7 @@ CLEANUP_COMPOSITE:
 }
 
 /**
- * _cairo_recording_surface_snapshot
+ * _cairo_recording_surface_snapshot:
  * @surface: a #cairo_surface_t which must be a recording surface
  *
  * Make an immutable copy of @surface. It is an error to call a
@@ -1135,6 +1164,7 @@ static const cairo_surface_backend_t cairo_recording_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_surface_default_source,
     _cairo_recording_surface_acquire_source_image,
     _cairo_recording_surface_release_source_image,
     _cairo_recording_surface_snapshot,
@@ -1694,6 +1724,18 @@ _cairo_recording_surface_get_ink_bbox (cairo_recording_surface_t *surface,
     return _recording_surface_get_ink_bbox (surface, bbox, transform);
 }
 
+/**
+ * cairo_recording_surface_get_extents:
+ * @surface: a #cairo_recording_surface_t
+ * @extents: the #cairo_rectangle_t to be assigned the extents
+ *
+ * Get the extents of the recording-surface.
+ *
+ * Return value: %TRUE if the surface is bounded, of recording type, and
+ * not in an error state, otherwise %FALSE
+ *
+ * Since: 1.12
+ **/
 cairo_bool_t
 cairo_recording_surface_get_extents (cairo_surface_t *surface,
                                     cairo_rectangle_t *extents)
index edad369..9613065 100644 (file)
@@ -39,7 +39,7 @@
 
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 
 const cairo_rectangle_int_t _cairo_empty_rectangle = { 0, 0, 0, 0 };
 const cairo_rectangle_int_t _cairo_unbounded_rectangle = {
@@ -272,7 +272,8 @@ _cairo_box_intersects_line_segment (cairo_box_t *box, cairo_line_t *line)
 
 static cairo_status_t
 _cairo_box_add_spline_point (void *closure,
-                            const cairo_point_t *point)
+                            const cairo_point_t *point,
+                            const cairo_slope_t *tangent)
 {
     _cairo_box_add_point (closure, point);
 
index b4214c8..e353b34 100644 (file)
@@ -33,7 +33,7 @@
 
 #include "cairoint.h"
 
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 #include "cairo-error-private.h"
 #include "cairo-freelist-private.h"
 #include "cairo-list-private.h"
index 11070ba..549e508 100644 (file)
@@ -66,6 +66,12 @@ _cairo_region_init_rectangle (cairo_region_t *region,
 cairo_private void
 _cairo_region_fini (cairo_region_t *region);
 
+cairo_private cairo_region_t *
+_cairo_region_create_from_boxes (const cairo_box_t *boxes, int count);
+
+cairo_private cairo_box_t *
+_cairo_region_get_boxes (const cairo_region_t *region, int *nbox);
+
 CAIRO_END_DECLS
 
 #endif /* CAIRO_REGION_PRIVATE_H */
index f3ccb89..a51e224 100644 (file)
@@ -52,7 +52,7 @@
  * Regions are a simple graphical data type representing an area of 
  * integer-aligned rectangles. They are often used on raster surfaces 
  * to track areas of interest, such as change or clip areas.
- */
+ **/
 
 static const cairo_region_t _cairo_region_nil = {
     CAIRO_REFERENCE_COUNT_INVALID,     /* ref_count */
@@ -276,6 +276,38 @@ cairo_region_create_rectangles (const cairo_rectangle_int_t *rects,
 }
 slim_hidden_def (cairo_region_create_rectangles);
 
+cairo_region_t *
+_cairo_region_create_from_boxes (const cairo_box_t *boxes, int count)
+{
+    cairo_region_t *region;
+
+    region = _cairo_malloc (sizeof (cairo_region_t));
+    if (unlikely (region == NULL))
+       return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+    CAIRO_REFERENCE_COUNT_INIT (&region->ref_count, 1);
+    region->status = CAIRO_STATUS_SUCCESS;
+
+    if (! pixman_region32_init_rects (&region->rgn,
+                                     (pixman_box32_t *)boxes, count)) {
+       free (region);
+       return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+    }
+
+    return region;
+}
+
+cairo_box_t *
+_cairo_region_get_boxes (const cairo_region_t *region, int *nbox)
+{
+    if (region->status) {
+       nbox = 0;
+       return NULL;
+    }
+
+    return (cairo_box_t *) pixman_region32_rectangles (CONST_CAST &region->rgn, nbox);
+}
+
 /**
  * cairo_region_create_rectangle:
  * @rectangle: a #cairo_rectangle_int_t
@@ -484,7 +516,7 @@ slim_hidden_def (cairo_region_get_extents);
  * cairo_region_status:
  * @region: a #cairo_region_t
  *
- * Checks whether an error has previous occured for this
+ * Checks whether an error has previous occurred for this
  * region object.
  *
  * Return value: %CAIRO_STATUS_SUCCESS or %CAIRO_STATUS_NO_MEMORY
@@ -810,13 +842,15 @@ slim_hidden_def (cairo_region_translate);
 
 /**
  * cairo_region_overlap_t:
- * @CAIRO_REGION_OVERLAP_IN: The contents are entirely inside the region
- * @CAIRO_REGION_OVERLAP_OUT: The contents are entirely outside the region
+ * @CAIRO_REGION_OVERLAP_IN: The contents are entirely inside the region. (Since 1.10)
+ * @CAIRO_REGION_OVERLAP_OUT: The contents are entirely outside the region. (Since 1.10)
  * @CAIRO_REGION_OVERLAP_PART: The contents are partially inside and
- *     partially outside the region.
- * 
+ *     partially outside the region. (Since 1.10)
+ *
  * Used as the return value for cairo_region_contains_rectangle().
- */
+ *
+ * Since: 1.10
+ **/
 
 /**
  * cairo_region_contains_rectangle:
index 11079e7..27806ca 100644 (file)
@@ -42,7 +42,7 @@
 #include "cairo-types-private.h"
 
 #include "cairo-freelist-private.h"
-#include "cairo-list-private.h"
+#include "cairo-list-inline.h"
 
 enum {
     CAIRO_RTREE_NODE_AVAILABLE,
@@ -52,7 +52,6 @@ enum {
 
 typedef struct _cairo_rtree_node {
     struct _cairo_rtree_node *children[4], *parent;
-    void **owner;
     cairo_list_t link;
     uint16_t pinned;
     uint16_t state;
@@ -66,6 +65,7 @@ typedef struct _cairo_rtree {
     cairo_list_t pinned;
     cairo_list_t available;
     cairo_list_t evictable;
+    void (*destroy) (cairo_rtree_node_t *);
     cairo_freepool_t node_freepool;
 } cairo_rtree_t;
 
@@ -98,7 +98,8 @@ _cairo_rtree_init (cairo_rtree_t      *rtree,
                   int                   width,
                   int                   height,
                   int                   min_size,
-                  int                   node_size);
+                  int                   node_size,
+                  void (*destroy)(cairo_rtree_node_t *));
 
 cairo_private cairo_int_status_t
 _cairo_rtree_insert (cairo_rtree_t          *rtree,
@@ -112,9 +113,15 @@ _cairo_rtree_evict_random (cairo_rtree_t    *rtree,
                           int                    height,
                           cairo_rtree_node_t   **out);
 
+cairo_private void
+_cairo_rtree_foreach (cairo_rtree_t *rtree,
+                     void (*func)(cairo_rtree_node_t *, void *data),
+                     void *data);
+
 static inline void *
 _cairo_rtree_pin (cairo_rtree_t *rtree, cairo_rtree_node_t *node)
 {
+    assert (node->state == CAIRO_RTREE_NODE_OCCUPIED);
     if (! node->pinned) {
        cairo_list_move (&node->link, &rtree->pinned);
        node->pinned = 1;
index d6e5791..dbc0409 100644 (file)
@@ -57,7 +57,6 @@ _cairo_rtree_node_create (cairo_rtree_t                *rtree,
 
     node->children[0] = NULL;
     node->parent = parent;
-    node->owner  = NULL;
     node->state  = CAIRO_RTREE_NODE_AVAILABLE;
     node->pinned = FALSE;
     node->x     = x;
@@ -78,8 +77,7 @@ _cairo_rtree_node_destroy (cairo_rtree_t *rtree, cairo_rtree_node_t *node)
     cairo_list_del (&node->link);
 
     if (node->state == CAIRO_RTREE_NODE_OCCUPIED) {
-       if (node->owner != NULL)
-           *node->owner = NULL;
+       rtree->destroy (node);
     } else {
        for (i = 0; i < 4 && node->children[i] != NULL; i++)
            _cairo_rtree_node_destroy (rtree, node->children[i]);
@@ -186,6 +184,8 @@ _cairo_rtree_node_remove (cairo_rtree_t *rtree, cairo_rtree_node_t *node)
     assert (node->state == CAIRO_RTREE_NODE_OCCUPIED);
     assert (node->pinned == FALSE);
 
+    rtree->destroy (node);
+
     node->state = CAIRO_RTREE_NODE_AVAILABLE;
     cairo_list_move (&node->link, &rtree->available);
 
@@ -225,15 +225,22 @@ _cairo_rtree_evict_random (cairo_rtree_t   *rtree,
                           int                    height,
                           cairo_rtree_node_t           **out)
 {
+    cairo_int_status_t ret = CAIRO_INT_STATUS_UNSUPPORTED;
     cairo_rtree_node_t *node, *next;
+    cairo_list_t tmp_pinned;
     int i, cnt;
 
+    cairo_list_init (&tmp_pinned);
+
     /* propagate pinned from children to root */
-    cairo_list_foreach_entry_safe (node, next, cairo_rtree_node_t,
-                                  &rtree->pinned, link)
-    {
-       if (node->parent != NULL)
-           _cairo_rtree_pin (rtree, node->parent);
+    cairo_list_foreach_entry_safe (node, next,
+                                  cairo_rtree_node_t, &rtree->pinned, link) {
+       node = node->parent;
+       while (node && ! node->pinned) {
+           node->pinned = 1;
+           cairo_list_move (&node->link, &tmp_pinned);
+           node = node->parent;
+       }
     }
 
     cnt = 0;
@@ -245,7 +252,7 @@ _cairo_rtree_evict_random (cairo_rtree_t     *rtree,
     }
 
     if (cnt == 0)
-       return CAIRO_INT_STATUS_UNSUPPORTED;
+       goto out;
 
     cnt = hars_petruska_f54_1_random () % cnt;
     cairo_list_foreach_entry (node, cairo_rtree_node_t,
@@ -253,8 +260,7 @@ _cairo_rtree_evict_random (cairo_rtree_t     *rtree,
     {
        if (node->width >= width && node->height >= height && cnt-- == 0) {
            if (node->state == CAIRO_RTREE_NODE_OCCUPIED) {
-               if (node->owner != NULL)
-                   *node->owner = NULL;
+               rtree->destroy (node);
            } else {
                for (i = 0; i < 4 && node->children[i] != NULL; i++)
                    _cairo_rtree_node_destroy (rtree, node->children[i]);
@@ -265,60 +271,29 @@ _cairo_rtree_evict_random (cairo_rtree_t   *rtree,
            cairo_list_move (&node->link, &rtree->available);
 
            *out = node;
-           return CAIRO_STATUS_SUCCESS;
+           ret = CAIRO_STATUS_SUCCESS;
+           break;
        }
     }
 
-    return CAIRO_INT_STATUS_UNSUPPORTED;
+out:
+    while (! cairo_list_is_empty (&tmp_pinned)) {
+       node = cairo_list_first_entry (&tmp_pinned, cairo_rtree_node_t, link);
+       node->pinned = 0;
+       cairo_list_move (&node->link, &rtree->evictable);
+    }
+    return ret;
 }
 
 void
 _cairo_rtree_unpin (cairo_rtree_t *rtree)
 {
-    cairo_rtree_node_t *node, *next;
-    cairo_list_t can_collapse;
-
-    if (cairo_list_is_empty (&rtree->pinned))
-       return;
-
-    cairo_list_init (&can_collapse);
-
-    cairo_list_foreach_entry_safe (node, next,
-                                  cairo_rtree_node_t,
-                                  &rtree->pinned,
-                                  link)
-    {
-       node->pinned = FALSE;
-       if (node->state == CAIRO_RTREE_NODE_OCCUPIED && node->owner == NULL) {
-           cairo_bool_t all_available;
-           int i;
-
-           node->state = CAIRO_RTREE_NODE_AVAILABLE;
-           cairo_list_move (&node->link, &rtree->available);
-
-           all_available = TRUE;
-           node = node->parent;
-           for (i = 0; i < 4 && node->children[i] != NULL && all_available; i++)
-               all_available &= node->children[i]->state == CAIRO_RTREE_NODE_AVAILABLE;
-
-           if (all_available) {
-               cairo_list_move (&node->link, &can_collapse);
-               for (i = 0;  i < 4 && node->children[i] != NULL; i++)
-                   cairo_list_del (&node->children[i]->link);
-           }
-       }
-       else
-       {
-           cairo_list_move (&node->link, &rtree->evictable);
-       }
-    }
-
-    cairo_list_foreach_entry_safe (node, next,
-                                  cairo_rtree_node_t,
-                                  &can_collapse,
-                                  link)
-    {
-       _cairo_rtree_node_collapse (rtree, node);
+    while (! cairo_list_is_empty (&rtree->pinned)) {
+       cairo_rtree_node_t *node = cairo_list_first_entry (&rtree->pinned,
+                                                          cairo_rtree_node_t,
+                                                          link);
+       node->pinned = 0;
+       cairo_list_move (&node->link, &rtree->evictable);
     }
 }
 
@@ -327,7 +302,8 @@ _cairo_rtree_init (cairo_rtree_t    *rtree,
                   int                   width,
                   int                   height,
                   int                   min_size,
-                  int                   node_size)
+                  int                   node_size,
+                  void (*destroy) (cairo_rtree_node_t *))
 {
     assert (node_size >= (int) sizeof (cairo_rtree_node_t));
     _cairo_freepool_init (&rtree->node_freepool, node_size);
@@ -337,6 +313,7 @@ _cairo_rtree_init (cairo_rtree_t    *rtree,
     cairo_list_init (&rtree->evictable);
 
     rtree->min_size = min_size;
+    rtree->destroy = destroy;
 
     memset (&rtree->root, 0, sizeof (rtree->root));
     rtree->root.width = width;
@@ -351,8 +328,7 @@ _cairo_rtree_reset (cairo_rtree_t *rtree)
     int i;
 
     if (rtree->root.state == CAIRO_RTREE_NODE_OCCUPIED) {
-       if (rtree->root.owner != NULL)
-           *rtree->root.owner = NULL;
+       rtree->destroy (&rtree->root);
     } else {
        for (i = 0; i < 4 && rtree->root.children[i] != NULL; i++)
            _cairo_rtree_node_destroy (rtree, rtree->root.children[i]);
@@ -368,14 +344,41 @@ _cairo_rtree_reset (cairo_rtree_t *rtree)
     cairo_list_add (&rtree->root.link, &rtree->available);
 }
 
+static void
+_cairo_rtree_node_foreach (cairo_rtree_node_t *node,
+                          void (*func)(cairo_rtree_node_t *, void *data),
+                          void *data)
+{
+    int i;
+
+    for (i = 0; i < 4 && node->children[i] != NULL; i++)
+       _cairo_rtree_node_foreach(node->children[i], func, data);
+
+    func(node, data);
+}
+
+void
+_cairo_rtree_foreach (cairo_rtree_t *rtree,
+                     void (*func)(cairo_rtree_node_t *, void *data),
+                     void *data)
+{
+    int i;
+
+    if (rtree->root.state == CAIRO_RTREE_NODE_OCCUPIED) {
+       func(&rtree->root, data);
+    } else {
+       for (i = 0; i < 4 && rtree->root.children[i] != NULL; i++)
+           _cairo_rtree_node_foreach (rtree->root.children[i], func, data);
+    }
+}
+
 void
 _cairo_rtree_fini (cairo_rtree_t *rtree)
 {
     int i;
 
     if (rtree->root.state == CAIRO_RTREE_NODE_OCCUPIED) {
-       if (rtree->root.owner != NULL)
-           *rtree->root.owner = NULL;
+       rtree->destroy (&rtree->root);
     } else {
        for (i = 0; i < 4 && rtree->root.children[i] != NULL; i++)
            _cairo_rtree_node_destroy (rtree, rtree->root.children[i]);
index 2edf770..dd19962 100644 (file)
@@ -225,7 +225,7 @@ typedef cairo_int_status_t
                                             void                       *closure);
 
 /**
- * _cairo_scaled_font_subsets_foreach:
+ * _cairo_scaled_font_subsets_foreach_scaled:
  * @font_subsets: a #cairo_scaled_font_subsets_t
  * @font_subset_callback: a function to be called for each font subset
  * @closure: closure data for the callback function
@@ -439,7 +439,7 @@ typedef struct _cairo_truetype_subset {
 } cairo_truetype_subset_t;
 
 /**
- * _cairo_truetype_subset_init:
+ * _cairo_truetype_subset_init_ps:
  * @truetype_subset: a #cairo_truetype_subset_t to initialize
  * @font_subset: the #cairo_scaled_font_subset_t to initialize from
  *
@@ -460,7 +460,7 @@ _cairo_truetype_subset_init_ps (cairo_truetype_subset_t    *truetype_subset,
                                cairo_scaled_font_subset_t *font_subset);
 
 /**
- * _cairo_truetype_subset_init:
+ * _cairo_truetype_subset_init_pdf:
  * @truetype_subset: a #cairo_truetype_subset_t to initialize
  * @font_subset: the #cairo_scaled_font_subset_t to initialize from
  *
@@ -576,7 +576,7 @@ _cairo_type1_fallback_init_binary (cairo_type1_subset_t           *type_subset,
                                    cairo_scaled_font_subset_t *font_subset);
 
 /**
- * _cairo_type1_fallback_init_hexencode:
+ * _cairo_type1_fallback_init_hex:
  * @type1_subset: a #cairo_type1_subset_t to initialize
  * @font_subset: the #cairo_scaled_font_subset_t to initialize from
  *
index 355245a..e78e0c2 100644 (file)
@@ -522,11 +522,6 @@ _cairo_sub_font_add_glyph (cairo_sub_font_t           *sub_font,
     y_advance = scaled_glyph->metrics.y_advance;
     _cairo_scaled_font_thaw_cache (sub_font->scaled_font);
 
-    if (unlikely (status)) {
-       _cairo_sub_font_glyph_destroy (sub_font_glyph);
-       return status;
-    }
-
     if (!is_latin && sub_font->num_glyphs_in_current_subset == sub_font->max_glyphs_per_subset)
     {
        sub_font->current_subset++;
index be612a9..f719266 100644 (file)
 #include "cairoint.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-pattern-private.h"
 #include "cairo-scaled-font-private.h"
 #include "cairo-surface-backend-private.h"
 
+#define TOLERANCE 0.00001
+
 #if _XOPEN_SOURCE >= 600 || defined (_ISOC99_SOURCE)
 #define ISFINITE(x) isfinite (x)
 #else
  *
  * #cairo_scaled_font_t represents a realization of a font face at a particular
  * size and transformation and a certain set of font options.
- */
+ **/
+
+static uint32_t
+_cairo_scaled_font_compute_hash (cairo_scaled_font_t *scaled_font);
 
 /* Global Glyph Cache
  *
@@ -314,6 +320,8 @@ cairo_scaled_font_get_type (cairo_scaled_font_t *scaled_font)
  *
  * Return value: %CAIRO_STATUS_SUCCESS or another error such as
  *   %CAIRO_STATUS_NO_MEMORY.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_scaled_font_status (cairo_scaled_font_t *scaled_font)
@@ -506,6 +514,8 @@ _cairo_scaled_font_register_placeholder_and_unlock_font_map (cairo_scaled_font_t
 
     placeholder_scaled_font->placeholder = TRUE;
 
+    placeholder_scaled_font->hash_entry.hash
+       = _cairo_scaled_font_compute_hash (placeholder_scaled_font);
     status = _cairo_hash_table_insert (cairo_scaled_font_map->hash_table,
                                       &placeholder_scaled_font->hash_entry);
     if (unlikely (status))
@@ -531,6 +541,9 @@ _cairo_scaled_font_unregister_placeholder_and_lock_font_map (cairo_scaled_font_t
 
     CAIRO_MUTEX_LOCK (_cairo_scaled_font_map_mutex);
 
+    /* temporary hash value to match the placeholder */
+    scaled_font->hash_entry.hash
+       = _cairo_scaled_font_compute_hash (scaled_font);
     placeholder_scaled_font =
        _cairo_hash_table_lookup (cairo_scaled_font_map->hash_table,
                                  &scaled_font->hash_entry);
@@ -602,6 +615,26 @@ _hash_mix_bits (uint32_t hash)
     return hash;
 }
 
+static uint32_t
+_cairo_scaled_font_compute_hash (cairo_scaled_font_t *scaled_font)
+{
+    uint32_t hash = FNV1_32_INIT;
+
+    /* We do a bytewise hash on the font matrices */
+    hash = _hash_matrix_fnv (&scaled_font->font_matrix, hash);
+    hash = _hash_matrix_fnv (&scaled_font->ctm, hash);
+    hash = _hash_mix_bits (hash);
+
+    hash ^= (unsigned long) scaled_font->original_font_face;
+    hash ^= cairo_font_options_hash (&scaled_font->options);
+
+    /* final mixing of bits */
+    hash = _hash_mix_bits (hash);
+    assert (hash != ZOMBIE);
+
+    return hash;
+}
+
 static void
 _cairo_scaled_font_init_key (cairo_scaled_font_t        *scaled_font,
                             cairo_font_face_t          *font_face,
@@ -609,8 +642,6 @@ _cairo_scaled_font_init_key (cairo_scaled_font_t        *scaled_font,
                             const cairo_matrix_t       *ctm,
                             const cairo_font_options_t *options)
 {
-    uint32_t hash = FNV1_32_INIT;
-
     scaled_font->status = CAIRO_STATUS_SUCCESS;
     scaled_font->placeholder = FALSE;
     scaled_font->font_face = font_face;
@@ -622,19 +653,8 @@ _cairo_scaled_font_init_key (cairo_scaled_font_t        *scaled_font,
     scaled_font->ctm.y0 = 0.;
     _cairo_font_options_init_copy (&scaled_font->options, options);
 
-    /* We do a bytewise hash on the font matrices */
-    hash = _hash_matrix_fnv (&scaled_font->font_matrix, hash);
-    hash = _hash_matrix_fnv (&scaled_font->ctm, hash);
-    hash = _hash_mix_bits (hash);
-
-    hash ^= (unsigned long) scaled_font->font_face;
-    hash ^= cairo_font_options_hash (&scaled_font->options);
-
-    /* final mixing of bits */
-    hash = _hash_mix_bits (hash);
-
-    assert (hash != ZOMBIE);
-    scaled_font->hash_entry.hash = hash;
+    scaled_font->hash_entry.hash =
+       _cairo_scaled_font_compute_hash (scaled_font);
 }
 
 static cairo_bool_t
@@ -689,8 +709,16 @@ _cairo_scaled_font_init (cairo_scaled_font_t               *scaled_font,
     if (unlikely (status))
        return status;
 
-    _cairo_scaled_font_init_key (scaled_font, font_face,
-                                font_matrix, ctm, options);
+    scaled_font->status = CAIRO_STATUS_SUCCESS;
+    scaled_font->placeholder = FALSE;
+    scaled_font->font_face = font_face;
+    scaled_font->original_font_face = font_face;
+    scaled_font->font_matrix = *font_matrix;
+    scaled_font->ctm = *ctm;
+    /* ignore translation values in the ctm */
+    scaled_font->ctm.x0 = 0.;
+    scaled_font->ctm.y0 = 0.;
+    _cairo_font_options_init_copy (&scaled_font->options, options);
 
     cairo_matrix_multiply (&scaled_font->scale,
                           &scaled_font->font_matrix,
@@ -936,6 +964,8 @@ _cairo_scaled_glyph_find_private (cairo_scaled_glyph_t *scaled_glyph,
  *
  * Return value: a newly created #cairo_scaled_font_t. Destroy with
  *  cairo_scaled_font_destroy()
+ *
+ * Since: 1.0
  **/
 cairo_scaled_font_t *
 cairo_scaled_font_create (cairo_font_face_t          *font_face,
@@ -996,106 +1026,88 @@ cairo_scaled_font_create (cairo_font_face_t          *font_face,
        scaled_font->hash_entry.hash = ZOMBIE;
        dead = scaled_font;
        font_map->mru_scaled_font = NULL;
-
-       if (font_face->backend->get_implementation != NULL) {
-           font_face = font_face->backend->get_implementation (font_face,
-                                                               font_matrix,
-                                                               ctm,
-                                                               options);
-           if (unlikely (font_face->status)) {
-               _cairo_scaled_font_map_unlock ();
-               cairo_scaled_font_destroy (scaled_font);
-               return _cairo_scaled_font_create_in_error (font_face->status);
-           }
-       }
-
-       _cairo_scaled_font_init_key (&key, original_font_face,
-                                    font_matrix, ctm, options);
     }
-    else
-    {
-       if (font_face->backend->get_implementation != NULL) {
-           font_face = font_face->backend->get_implementation (font_face,
-                                                               font_matrix,
-                                                               ctm,
-                                                               options);
-           if (unlikely (font_face->status)) {
-               _cairo_scaled_font_map_unlock ();
-               return _cairo_scaled_font_create_in_error (font_face->status);
-           }
-       }
 
-       _cairo_scaled_font_init_key (&key, original_font_face,
-                                    font_matrix, ctm, options);
+    _cairo_scaled_font_init_key (&key, font_face, font_matrix, ctm, options);
 
-       while ((scaled_font = _cairo_hash_table_lookup (font_map->hash_table,
-                                                       &key.hash_entry)))
-       {
-           if (! scaled_font->placeholder)
-               break;
+    while ((scaled_font = _cairo_hash_table_lookup (font_map->hash_table,
+                                                   &key.hash_entry)))
+    {
+       if (! scaled_font->placeholder)
+           break;
 
-           /* If the scaled font is being created (happens for user-font),
-            * just wait until it's done, then retry */
-           _cairo_scaled_font_placeholder_wait_for_creation_to_finish (scaled_font);
-       }
+       /* If the scaled font is being created (happens for user-font),
+        * just wait until it's done, then retry */
+       _cairo_scaled_font_placeholder_wait_for_creation_to_finish (scaled_font);
+    }
 
-       /* Return existing scaled_font if it exists in the hash table. */
-       if (scaled_font != NULL) {
-           /* If the original reference count is 0, then this font must have
-            * been found in font_map->holdovers, (which means this caching is
-            * actually working). So now we remove it from the holdovers
-            * array, unless we caught the font in the middle of destruction.
-            */
-           if (! CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&scaled_font->ref_count)) {
-               if (scaled_font->holdover) {
-                   int i;
-
-                   for (i = 0; i < font_map->num_holdovers; i++) {
-                       if (font_map->holdovers[i] == scaled_font) {
-                           font_map->num_holdovers--;
-                           memmove (&font_map->holdovers[i],
-                                    &font_map->holdovers[i+1],
-                                    (font_map->num_holdovers - i) * sizeof (cairo_scaled_font_t*));
-                           break;
-                       }
+    if (scaled_font != NULL) {
+       /* If the original reference count is 0, then this font must have
+        * been found in font_map->holdovers, (which means this caching is
+        * actually working). So now we remove it from the holdovers
+        * array, unless we caught the font in the middle of destruction.
+        */
+       if (! CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&scaled_font->ref_count)) {
+           if (scaled_font->holdover) {
+               int i;
+
+               for (i = 0; i < font_map->num_holdovers; i++) {
+                   if (font_map->holdovers[i] == scaled_font) {
+                       font_map->num_holdovers--;
+                       memmove (&font_map->holdovers[i],
+                                &font_map->holdovers[i+1],
+                                (font_map->num_holdovers - i) * sizeof (cairo_scaled_font_t*));
+                       break;
                    }
-
-                   scaled_font->holdover = FALSE;
                }
 
-               /* reset any error status */
-               scaled_font->status = CAIRO_STATUS_SUCCESS;
+               scaled_font->holdover = FALSE;
            }
 
-           if (likely (scaled_font->status == CAIRO_STATUS_SUCCESS)) {
-               /* We increment the reference count manually here, (rather
-                * than calling into cairo_scaled_font_reference), since we
-                * must modify the reference count while our lock is still
-                * held. */
-
-               old = font_map->mru_scaled_font;
-               font_map->mru_scaled_font = scaled_font;
-               /* increment reference count for the mru cache */
-               _cairo_reference_count_inc (&scaled_font->ref_count);
-               /* and increment for the returned reference */
-               _cairo_reference_count_inc (&scaled_font->ref_count);
-               _cairo_scaled_font_map_unlock ();
-
-               cairo_scaled_font_destroy (old);
-               if (font_face != original_font_face)
-                   cairo_font_face_destroy (font_face);
-
-               return scaled_font;
-           }
+           /* reset any error status */
+           scaled_font->status = CAIRO_STATUS_SUCCESS;
+       }
+
+       if (likely (scaled_font->status == CAIRO_STATUS_SUCCESS)) {
+           /* We increment the reference count manually here, (rather
+            * than calling into cairo_scaled_font_reference), since we
+            * must modify the reference count while our lock is still
+            * held. */
+
+           old = font_map->mru_scaled_font;
+           font_map->mru_scaled_font = scaled_font;
+           /* increment reference count for the mru cache */
+           _cairo_reference_count_inc (&scaled_font->ref_count);
+           /* and increment for the returned reference */
+           _cairo_reference_count_inc (&scaled_font->ref_count);
+           _cairo_scaled_font_map_unlock ();
+
+           cairo_scaled_font_destroy (old);
+           if (font_face != original_font_face)
+               cairo_font_face_destroy (font_face);
 
-           /* the font has been put into an error status - abandon the cache */
-           _cairo_hash_table_remove (font_map->hash_table,
-                                     &scaled_font->hash_entry);
-           scaled_font->hash_entry.hash = ZOMBIE;
+           return scaled_font;
        }
+
+       /* the font has been put into an error status - abandon the cache */
+       _cairo_hash_table_remove (font_map->hash_table,
+                                 &scaled_font->hash_entry);
+       scaled_font->hash_entry.hash = ZOMBIE;
     }
 
+
     /* Otherwise create it and insert it into the hash table. */
+    if (font_face->backend->get_implementation != NULL) {
+       font_face = font_face->backend->get_implementation (font_face,
+                                                           font_matrix,
+                                                           ctm,
+                                                           options);
+       if (unlikely (font_face->status)) {
+           _cairo_scaled_font_map_unlock ();
+           return _cairo_scaled_font_create_in_error (font_face->status);
+       }
+    }
+
     status = font_face->backend->scaled_font_create (font_face, font_matrix,
                                                     ctm, options, &scaled_font);
     /* Did we leave the backend in an error state? */
@@ -1131,6 +1143,8 @@ cairo_scaled_font_create (cairo_font_face_t          *font_face,
     scaled_font->original_font_face =
        cairo_font_face_reference (original_font_face);
 
+    scaled_font->hash_entry.hash = _cairo_scaled_font_compute_hash(scaled_font);
+
     status = _cairo_hash_table_insert (font_map->hash_table,
                                       &scaled_font->hash_entry);
     if (likely (status == CAIRO_STATUS_SUCCESS)) {
@@ -1229,6 +1243,8 @@ _cairo_scaled_font_reset_static_data (void)
  * cairo_scaled_font_get_reference_count().
  *
  * Returns: the referenced #cairo_scaled_font_t
+ *
+ * Since: 1.0
  **/
 cairo_scaled_font_t *
 cairo_scaled_font_reference (cairo_scaled_font_t *scaled_font)
@@ -1252,6 +1268,8 @@ slim_hidden_def (cairo_scaled_font_reference);
  * Decreases the reference count on @font by one. If the result
  * is zero, then @font and all associated resources are freed.
  * See cairo_scaled_font_reference().
+ *
+ * Since: 1.0
  **/
 void
 cairo_scaled_font_destroy (cairo_scaled_font_t *scaled_font)
@@ -1408,6 +1426,8 @@ slim_hidden_def (cairo_scaled_font_set_user_data);
  * @extents: a #cairo_font_extents_t which to store the retrieved extents.
  *
  * Gets the metrics for a #cairo_scaled_font_t.
+ *
+ * Since: 1.0
  **/
 void
 cairo_scaled_font_extents (cairo_scaled_font_t  *scaled_font,
@@ -1505,6 +1525,8 @@ ZERO_EXTENTS:
  *
  * Note that whitespace glyphs do not contribute to the size of the
  * rectangle (extents.width and extents.height).
+ *
+ * Since: 1.0
  **/
 void
 cairo_scaled_font_glyph_extents (cairo_scaled_font_t   *scaled_font,
@@ -2088,6 +2110,29 @@ cairo_scaled_font_text_to_glyphs (cairo_scaled_font_t   *scaled_font,
 }
 slim_hidden_def (cairo_scaled_font_text_to_glyphs);
 
+/* XXX: Shoot me - cairo has two basic ways of rendring text in API.
+ * The first way is cairo_show_text() and the second way is
+ * cairo_show_glyphs().
+ *
+ * For the first method, each glyph location is advanced by x_advance
+ * and y_advance computed from glyph metrics.  For the second method,
+ * app is responsible for supplying the glyph location.  This gives us
+ * opportunity to check whether the computed x_advance and _y_advance
+ * is equala/larger than supplied glyphs difference for each adjacent
+ * glyphs.  The rational is that if the spacing between glyphs is at
+ * least larger than computed x_advance/y_advance, there should be no
+ * overlapping in text portion of the text images.
+ */
+static inline cairo_bool_t
+_glyph_is_next_to_glyph (cairo_glyph_t *prev,
+                        cairo_glyph_t *current,
+                        double x_advance,
+                        double y_advance)
+{
+    return current->x - prev->x >= x_advance - TOLERANCE &&
+           current->y - prev->y >= y_advance - TOLERANCE;
+}
+
 static inline cairo_bool_t
 _range_contains_glyph (const cairo_box_t *extents,
                       cairo_fixed_t left,
@@ -2095,6 +2140,9 @@ _range_contains_glyph (const cairo_box_t *extents,
                       cairo_fixed_t right,
                       cairo_fixed_t bottom)
 {
+    if (left == right || top == bottom)
+       return FALSE;
+
     return right > extents->p1.x &&
           left < extents->p2.x &&
           bottom > extents->p1.y &&
@@ -2152,8 +2200,10 @@ _cairo_scaled_font_glyph_device_extents (cairo_scaled_font_t      *scaled_font,
     cairo_box_t box = { { INT_MAX, INT_MAX }, { INT_MIN, INT_MIN }};
     cairo_scaled_glyph_t *glyph_cache[64];
     cairo_bool_t overlap = overlap_out ? FALSE : TRUE;
+    cairo_scaled_glyph_t *prev_scaled_glyph = NULL;
     cairo_round_glyph_positions_t round_glyph_positions = _cairo_font_options_get_round_glyph_positions (&scaled_font->options);
     int i;
+    cairo_bool_t is_next = FALSE;
 
     if (unlikely (scaled_font->status))
        return scaled_font->status;
@@ -2203,13 +2253,22 @@ _cairo_scaled_font_glyph_device_extents (cairo_scaled_font_t     *scaled_font,
        y1 = y + scaled_glyph->bbox.p1.y;
        y2 = y + scaled_glyph->bbox.p2.y;
 
-       if (overlap == FALSE)
-           overlap = _range_contains_glyph (&box, x1, y1, x2, y2);
+       if (prev_scaled_glyph != NULL && overlap == FALSE) {
+           is_next = _glyph_is_next_to_glyph ((cairo_glyph_t *)&glyphs[i-1],
+                                              (cairo_glyph_t *)&glyphs[i],
+                                              prev_scaled_glyph->metrics.x_advance,
+                                              prev_scaled_glyph->metrics.y_advance);
+
+           if (is_next == FALSE)
+               overlap = _range_contains_glyph (&box, x1, y1, x2, y2);
+       }
 
        if (x1 < box.p1.x) box.p1.x = x1;
        if (x2 > box.p2.x) box.p2.x = x2;
        if (y1 < box.p1.y) box.p1.y = y1;
        if (y2 > box.p2.y) box.p2.y = y2;
+
+       prev_scaled_glyph = scaled_glyph;
     }
 
     _cairo_scaled_font_thaw_cache (scaled_font);
index 811b015..2149e7e 100644 (file)
  * without having to copy and hold the data in memory.
  */
 
+/**
+ * SECTION:cairo-script
+ * @Title: Script Surfaces
+ * @Short_Description: Rendering to replayable scripts
+ * @See_Also: #cairo_surface_t
+ *
+ * The script surface provides the ability to render to a native
+ * script that matches the cairo drawing model. The scripts can
+ * be replayed using tools under the util/cairo-script directoriy,
+ * or with cairo-perf-trace.
+ **/
+
+/**
+ * CAIRO_HAS_SCRIPT_SURFACE:
+ *
+ * Defined if the script surface backend is available.
+ * The script surface backend is always built in since 1.12.
+ *
+ * Since: 1.12
+ **/
+
+
 #include "cairoint.h"
 
 #include "cairo-script.h"
 #include "cairo-default-context-private.h"
 #include "cairo-device-private.h"
 #include "cairo-error-private.h"
-#include "cairo-list-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-image-surface-private.h"
-#include "cairo-recording-surface-private.h"
 #include "cairo-output-stream-private.h"
+#include "cairo-pattern-private.h"
+#include "cairo-recording-surface-inline.h"
 #include "cairo-scaled-font-private.h"
 #include "cairo-surface-clipper-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
 #include "cairo-surface-subsurface-private.h"
 #include "cairo-surface-wrapper-private.h"
 
@@ -985,7 +1008,7 @@ _emit_mesh_pattern (cairo_script_surface_t *surface,
        cairo_path_data_t *data;
        int j;
 
-       _cairo_output_stream_printf (ctx->stream, "\n  mesh-begin-patch");
+       _cairo_output_stream_printf (ctx->stream, "\n  begin-patch");
 
        path = cairo_mesh_pattern_get_path (mesh, i);
        if (unlikely (path->status))
@@ -996,17 +1019,17 @@ _emit_mesh_pattern (cairo_script_surface_t *surface,
            switch (data->header.type) {
            case CAIRO_PATH_MOVE_TO:
                _cairo_output_stream_printf (ctx->stream,
-                                            "\n  %f %f mesh-move-to",
+                                            "\n  %f %f m",
                                             data[1].point.x, data[1].point.y);
                break;
            case CAIRO_PATH_LINE_TO:
                _cairo_output_stream_printf (ctx->stream,
-                                            "\n  %f %f mesh-line-to",
+                                            "\n  %f %f l",
                                             data[1].point.x, data[1].point.y);
                break;
            case CAIRO_PATH_CURVE_TO:
                _cairo_output_stream_printf (ctx->stream,
-                                            "\n  %f %f %f %f %f %f mesh-curve-to",
+                                            "\n  %f %f %f %f %f %f c",
                                             data[1].point.x, data[1].point.y,
                                             data[2].point.x, data[2].point.y,
                                             data[3].point.x, data[3].point.y);
@@ -1024,7 +1047,7 @@ _emit_mesh_pattern (cairo_script_surface_t *surface,
            if (unlikely (status))
                return status;
            _cairo_output_stream_printf (ctx->stream,
-                                        "\n  %d %f %f mesh-set-control-point",
+                                        "\n  %d %f %f set-control-point",
                                         j, x, y);
        }
 
@@ -1036,11 +1059,11 @@ _emit_mesh_pattern (cairo_script_surface_t *surface,
                return status;
 
            _cairo_output_stream_printf (ctx->stream,
-                                        "\n  %d %f %f %f %f mesh-set-corner-color",
+                                        "\n  %d %f %f %f %f set-corner-color",
                                         j, r, g, b, a);
        }
 
-       _cairo_output_stream_printf (ctx->stream, "\n  mesh-end-patch");
+       _cairo_output_stream_printf (ctx->stream, "\n  end-patch");
     }
 
     return CAIRO_STATUS_SUCCESS;
@@ -1469,7 +1492,6 @@ _emit_image_surface (cairo_script_surface_t *surface,
 
        _cairo_output_stream_puts (ctx->stream, "~> set-mime-data\n");
     }
-    attach_snapshot (ctx, &image->base);
 
     return CAIRO_INT_STATUS_SUCCESS;
 }
@@ -1527,7 +1549,7 @@ _emit_surface_pattern (cairo_script_surface_t *surface,
 {
     cairo_script_context_t *ctx = to_context (surface);
     cairo_surface_pattern_t *surface_pattern;
-    cairo_surface_t *source, *snapshot;
+    cairo_surface_t *source, *snapshot, *free_me = NULL;
     cairo_surface_t *take_snapshot = NULL;
     cairo_int_status_t status;
 
@@ -1546,7 +1568,7 @@ _emit_surface_pattern (cairo_script_surface_t *surface,
        if (_cairo_surface_snapshot_is_reused (source))
            take_snapshot = source;
 
-       source = _cairo_surface_snapshot_get_target (source);
+       free_me = source = _cairo_surface_snapshot_get_target (source);
     }
 
     switch ((int) source->backend->type) {
@@ -1563,6 +1585,7 @@ _emit_surface_pattern (cairo_script_surface_t *surface,
        status = _emit_image_surface_pattern (surface, source);
        break;
     }
+    cairo_surface_destroy (free_me);
     if (unlikely (status))
        return status;
 
@@ -1574,6 +1597,30 @@ _emit_surface_pattern (cairo_script_surface_t *surface,
 }
 
 static cairo_int_status_t
+_emit_raster_pattern (cairo_script_surface_t *surface,
+                     const cairo_pattern_t *pattern)
+{
+    cairo_surface_t *source;
+    cairo_int_status_t status;
+
+    source = _cairo_raster_source_pattern_acquire (pattern, &surface->base, NULL);
+    if (unlikely (source == NULL)) {
+       ASSERT_NOT_REACHED;
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+    if (unlikely (source->status))
+       return source->status;
+
+    status = _emit_image_surface_pattern (surface, source);
+    _cairo_raster_source_pattern_release (pattern, source);
+    if (unlikely (status))
+       return status;
+
+    _cairo_output_stream_puts (to_context(surface)->stream, "pattern");
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
 _emit_pattern (cairo_script_surface_t *surface,
               const cairo_pattern_t *pattern)
 {
@@ -1603,6 +1650,10 @@ _emit_pattern (cairo_script_surface_t *surface,
        status = _emit_surface_pattern (surface, pattern);
        is_default_extend = pattern->extend == CAIRO_EXTEND_SURFACE_DEFAULT;
        break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       status = _emit_raster_pattern (surface, pattern);
+       is_default_extend = pattern->extend == CAIRO_EXTEND_SURFACE_DEFAULT;
+       break;
 
     default:
        ASSERT_NOT_REACHED;
@@ -2040,6 +2091,21 @@ _device_destroy (void *abstract_device)
     free (ctx);
 }
 
+static cairo_surface_t *
+_cairo_script_surface_source (void                    *abstract_surface,
+                             cairo_rectangle_int_t     *extents)
+{
+    cairo_script_surface_t *surface = abstract_surface;
+
+    if (extents) {
+       extents->x = extents->y = 0;
+       extents->width  = surface->width;
+       extents->height = surface->height;
+    }
+
+    return &surface->base;
+}
+
 static cairo_status_t
 _cairo_script_surface_acquire_source_image (void                    *abstract_surface,
                                            cairo_image_surface_t  **image_out,
@@ -3507,6 +3573,7 @@ _cairo_script_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_script_surface_source,
     _cairo_script_surface_acquire_source_image,
     _cairo_script_surface_release_source_image,
     _cairo_script_surface_snapshot,
@@ -3666,6 +3733,23 @@ _cairo_script_context_create (cairo_output_stream_t *stream)
     return &ctx->base;
 }
 
+/**
+ * cairo_script_create:
+ * @filename: the name (path) of the file to write the script to
+ *
+ * Creates a output device for emitting the script, used when
+ * creating the individual surfaces.
+ *
+ * Return value: a pointer to the newly created device. The caller
+ * owns the surface and should call cairo_device_destroy() when done
+ * with it.
+ *
+ * This function always returns a valid pointer, but it will return a
+ * pointer to a "nil" device if an error such as out of memory
+ * occurs. You can use cairo_device_status() to check for this.
+ *
+ * Since: 1.12
+ **/
 cairo_device_t *
 cairo_script_create (const char *filename)
 {
@@ -3679,6 +3763,24 @@ cairo_script_create (const char *filename)
     return _cairo_script_context_create (stream);
 }
 
+/**
+ * cairo_script_create_for_stream:
+ * @write_func: callback function passed the bytes written to the script
+ * @closure: user data to be passed to the callback
+ *
+ * Creates a output device for emitting the script, used when
+ * creating the individual surfaces.
+ *
+ * Return value: a pointer to the newly created device. The caller
+ * owns the surface and should call cairo_device_destroy() when done
+ * with it.
+ *
+ * This function always returns a valid pointer, but it will return a
+ * pointer to a "nil" device if an error such as out of memory
+ * occurs. You can use cairo_device_status() to check for this.
+ *
+ * Since: 1.12
+ **/
 cairo_device_t *
 cairo_script_create_for_stream (cairo_write_func_t      write_func,
                                void                    *closure)
@@ -3693,12 +3795,22 @@ cairo_script_create_for_stream (cairo_write_func_t       write_func,
     return _cairo_script_context_create (stream);
 }
 
+/**
+ * cairo_script_write_comment:
+ * @script: the script (output device)
+ * @comment: the string to emit
+ * @len:the length of the sting to write, or -1 to use strlen()
+ *
+ * Emit a string verbatim into the script.
+ *
+ * Since: 1.12
+ **/
 void
-cairo_script_write_comment (cairo_device_t *device,
+cairo_script_write_comment (cairo_device_t *script,
                            const char *comment,
                            int len)
 {
-    cairo_script_context_t *context = (cairo_script_context_t *) device;
+    cairo_script_context_t *context = (cairo_script_context_t *) script;
 
     if (len < 0)
        len = strlen (comment);
@@ -3708,36 +3820,74 @@ cairo_script_write_comment (cairo_device_t *device,
     _cairo_output_stream_puts (context->stream, "\n");
 }
 
+/**
+ * cairo_script_set_mode:
+ * @script: The script (output device)
+ * @mode: the new mode
+ *
+ * Change the output mode of the script
+ *
+ * Since: 1.12
+ **/
 void
-cairo_script_set_mode (cairo_device_t *device,
+cairo_script_set_mode (cairo_device_t *script,
                       cairo_script_mode_t mode)
 {
-    cairo_script_context_t *context = (cairo_script_context_t *) device;
+    cairo_script_context_t *context = (cairo_script_context_t *) script;
 
     context->mode = mode;
 }
 
+/**
+ * cairo_script_get_mode:
+ * @script: The script (output device) to query
+ *
+ * Queries the script for its current output mode.
+ *
+ * Return value: the current output mode of the script
+ *
+ * Since: 1.12
+ **/
 cairo_script_mode_t
-cairo_script_get_mode (cairo_device_t *device)
+cairo_script_get_mode (cairo_device_t *script)
 {
-    cairo_script_context_t *context = (cairo_script_context_t *) device;
+    cairo_script_context_t *context = (cairo_script_context_t *) script;
 
     return context->mode;
 }
 
+/**
+ * cairo_script_surface_create:
+ * @script: the script (output device)
+ * @content: the content of the surface
+ * @width: width in pixels
+ * @height: height in pixels
+ *
+ * Create a new surface that will emit its rendering through @script
+ *
+ * Return value: a pointer to the newly created surface. The caller
+ * owns the surface and should call cairo_surface_destroy() when done
+ * with it.
+ *
+ * This function always returns a valid pointer, but it will return a
+ * pointer to a "nil" surface if an error such as out of memory
+ * occurs. You can use cairo_surface_status() to check for this.
+ *
+ * Since: 1.12
+ **/
 cairo_surface_t *
-cairo_script_surface_create (cairo_device_t *device,
+cairo_script_surface_create (cairo_device_t *script,
                             cairo_content_t content,
                             double width,
                             double height)
 {
     cairo_rectangle_t *extents, r;
 
-    if (unlikely (device->backend->type != CAIRO_DEVICE_TYPE_SCRIPT))
+    if (unlikely (script->backend->type != CAIRO_DEVICE_TYPE_SCRIPT))
        return _cairo_surface_create_in_error (CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
 
-    if (unlikely (device->status))
-       return _cairo_surface_create_in_error (device->status);
+    if (unlikely (script->status))
+       return _cairo_surface_create_in_error (script->status);
 
     extents = NULL;
     if (width > 0 && height > 0) {
@@ -3746,24 +3896,42 @@ cairo_script_surface_create (cairo_device_t *device,
        r.height = height;
        extents = &r;
     }
-    return &_cairo_script_surface_create_internal ((cairo_script_context_t *) device,
+    return &_cairo_script_surface_create_internal ((cairo_script_context_t *) script,
                                                   content, extents,
                                                   NULL)->base;
 }
 slim_hidden_def (cairo_script_surface_create);
 
+/**
+ * cairo_script_surface_create_for_target:
+ * @script: the script (output device)
+ * @target: a target surface to wrap
+ *
+ * Create a pxoy surface that will render to @target and record
+ * the operations to @device.
+ *
+ * Return value: a pointer to the newly created surface. The caller
+ * owns the surface and should call cairo_surface_destroy() when done
+ * with it.
+ *
+ * This function always returns a valid pointer, but it will return a
+ * pointer to a "nil" surface if an error such as out of memory
+ * occurs. You can use cairo_surface_status() to check for this.
+ *
+ * Since: 1.12
+ **/
 cairo_surface_t *
-cairo_script_surface_create_for_target (cairo_device_t *device,
+cairo_script_surface_create_for_target (cairo_device_t *script,
                                        cairo_surface_t *target)
 {
     cairo_rectangle_int_t extents;
     cairo_rectangle_t rect, *r;
 
-    if (unlikely (device->backend->type != CAIRO_DEVICE_TYPE_SCRIPT))
+    if (unlikely (script->backend->type != CAIRO_DEVICE_TYPE_SCRIPT))
        return _cairo_surface_create_in_error (CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
 
-    if (unlikely (device->status))
-       return _cairo_surface_create_in_error (device->status);
+    if (unlikely (script->status))
+       return _cairo_surface_create_in_error (script->status);
 
     if (unlikely (target->status))
        return _cairo_surface_create_in_error (target->status);
@@ -3775,24 +3943,35 @@ cairo_script_surface_create_for_target (cairo_device_t *device,
        rect.height = extents.height;
        r= &rect;
     }
-    return &_cairo_script_surface_create_internal ((cairo_script_context_t *) device,
+    return &_cairo_script_surface_create_internal ((cairo_script_context_t *) script,
                                                   target->content, r,
                                                   target)->base;
 }
 
+/**
+ * cairo_script_from_recording_surface:
+ * @script: the script (output device)
+ * @recording_surface: the recording surface to replay
+ *
+ * Converts the record operations in @recording_surface into a script.
+ *
+ * Return value: #CAIRO_STATUS_SUCCESS on successful completion or an error code.
+ *
+ * Since: 1.12
+ **/
 cairo_status_t
-cairo_script_from_recording_surface (cairo_device_t *device,
+cairo_script_from_recording_surface (cairo_device_t *script,
                                     cairo_surface_t *recording_surface)
 {
     cairo_rectangle_t r, *extents;
     cairo_surface_t *surface;
     cairo_status_t status;
 
-    if (unlikely (device->backend->type != CAIRO_DEVICE_TYPE_SCRIPT))
+    if (unlikely (script->backend->type != CAIRO_DEVICE_TYPE_SCRIPT))
        return _cairo_error (CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
 
-    if (unlikely (device->status))
-       return _cairo_error (device->status);
+    if (unlikely (script->status))
+       return _cairo_error (script->status);
 
     if (unlikely (recording_surface->status))
        return recording_surface->status;
@@ -3804,7 +3983,7 @@ cairo_script_from_recording_surface (cairo_device_t *device,
     if (_cairo_recording_surface_get_bounds (recording_surface, &r))
        extents = &r;
 
-    surface = &_cairo_script_surface_create_internal ((cairo_script_context_t *) device,
+    surface = &_cairo_script_surface_create_internal ((cairo_script_context_t *) script,
                                                      recording_surface->content,
                                                      extents,
                                                      NULL)->base;
index b82230f..b5a8cf3 100644 (file)
 
 CAIRO_BEGIN_DECLS
 
+/**
+ * cairo_script_mode_t:
+ * @CAIRO_SCRIPT_MODE_ASCII: the output will be in readable text (default). (Since 1.12)
+ * @CAIRO_SCRIPT_MODE_BINARY: the output will use byte codes. (Since 1.12)
+ *
+ * A set of script output variants.
+ *
+ * Since: 1.12
+ **/
 typedef enum {
-    CAIRO_SCRIPT_MODE_BINARY,
-    CAIRO_SCRIPT_MODE_ASCII
+    CAIRO_SCRIPT_MODE_ASCII,
+    CAIRO_SCRIPT_MODE_BINARY
 } cairo_script_mode_t;
 
 cairo_public cairo_device_t *
diff --git a/src/cairo-shape-mask-compositor.c b/src/cairo-shape-mask-compositor.c
new file mode 100644 (file)
index 0000000..c2425b0
--- /dev/null
@@ -0,0 +1,337 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is University of Southern
+ * California.
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairoint.h"
+
+#include "cairo-compositor-private.h"
+#include "cairo-clip-private.h"
+#include "cairo-pattern-private.h"
+#include "cairo-surface-private.h"
+#include "cairo-surface-offset-private.h"
+
+static cairo_int_status_t
+_cairo_shape_mask_compositor_stroke (const cairo_compositor_t *_compositor,
+                                    cairo_composite_rectangles_t *extents,
+                                    const cairo_path_fixed_t   *path,
+                                    const cairo_stroke_style_t *style,
+                                    const cairo_matrix_t       *ctm,
+                                    const cairo_matrix_t       *ctm_inverse,
+                                    double              tolerance,
+                                    cairo_antialias_t   antialias)
+{
+    cairo_surface_t *mask;
+    cairo_surface_pattern_t pattern;
+    cairo_int_status_t status;
+    cairo_clip_t *clip;
+
+    if (! extents->is_bounded)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    mask = _cairo_surface_create_similar_scratch (extents->surface,
+                                                 CAIRO_CONTENT_ALPHA,
+                                                 extents->bounded.width,
+                                                 extents->bounded.height);
+    if (unlikely (mask->status))
+       return mask->status;
+
+    clip = extents->clip;
+    if (! _cairo_clip_is_region (clip))
+       clip = _cairo_clip_copy_region (clip);
+
+    if (! mask->is_clear) {
+       status = _cairo_surface_offset_paint (mask,
+                                             extents->bounded.x,
+                                             extents->bounded.y,
+                                             CAIRO_OPERATOR_CLEAR,
+                                             &_cairo_pattern_clear.base,
+                                             clip);
+       if (unlikely (status))
+           goto error;
+    }
+
+    status = _cairo_surface_offset_stroke (mask,
+                                          extents->bounded.x,
+                                          extents->bounded.y,
+                                          CAIRO_OPERATOR_ADD,
+                                          &_cairo_pattern_white.base,
+                                          path, style, ctm, ctm_inverse,
+                                          tolerance, antialias,
+                                          clip);
+    if (unlikely (status))
+       goto error;
+
+    if (clip != extents->clip) {
+       status = _cairo_clip_combine_with_surface (extents->clip, mask,
+                                                  extents->bounded.x,
+                                                  extents->bounded.y);
+       if (unlikely (status))
+           goto error;
+    }
+
+    _cairo_pattern_init_for_surface (&pattern, mask);
+    cairo_matrix_init_translate (&pattern.base.matrix,
+                                -extents->bounded.x,
+                                -extents->bounded.y);
+    pattern.base.filter = CAIRO_FILTER_NEAREST;
+    pattern.base.extend = CAIRO_EXTEND_NONE;
+    if (extents->op == CAIRO_OPERATOR_SOURCE) {
+       status = _cairo_surface_mask (extents->surface,
+                                     CAIRO_OPERATOR_DEST_OUT,
+                                     &_cairo_pattern_white.base,
+                                     &pattern.base,
+                                     clip);
+       if ((status == CAIRO_INT_STATUS_SUCCESS)) {
+           status = _cairo_surface_mask (extents->surface,
+                                         CAIRO_OPERATOR_ADD,
+                                         &extents->source_pattern.base,
+                                         &pattern.base,
+                                         clip);
+       }
+    } else {
+       status = _cairo_surface_mask (extents->surface,
+                                     extents->op,
+                                     &extents->source_pattern.base,
+                                     &pattern.base,
+                                     clip);
+    }
+    _cairo_pattern_fini (&pattern.base);
+
+error:
+    cairo_surface_destroy (mask);
+    if (clip != extents->clip)
+       _cairo_clip_destroy (clip);
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_shape_mask_compositor_fill (const cairo_compositor_t *_compositor,
+                                  cairo_composite_rectangles_t *extents,
+                                  const cairo_path_fixed_t     *path,
+                                  cairo_fill_rule_t     fill_rule,
+                                  double                        tolerance,
+                                  cairo_antialias_t     antialias)
+{
+    cairo_surface_t *mask;
+    cairo_surface_pattern_t pattern;
+    cairo_int_status_t status;
+    cairo_clip_t *clip;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if (! extents->is_bounded)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    mask = _cairo_surface_create_similar_scratch (extents->surface,
+                                                 CAIRO_CONTENT_ALPHA,
+                                                 extents->bounded.width,
+                                                 extents->bounded.height);
+    if (unlikely (mask->status))
+       return mask->status;
+
+    clip = extents->clip;
+    if (! _cairo_clip_is_region (clip))
+       clip = _cairo_clip_copy_region (clip);
+
+    if (! mask->is_clear) {
+       status = _cairo_surface_offset_paint (mask,
+                                             extents->bounded.x,
+                                             extents->bounded.y,
+                                             CAIRO_OPERATOR_CLEAR,
+                                             &_cairo_pattern_clear.base,
+                                             clip);
+       if (unlikely (status))
+           goto error;
+    }
+
+    status = _cairo_surface_offset_fill (mask,
+                                        extents->bounded.x,
+                                        extents->bounded.y,
+                                        CAIRO_OPERATOR_ADD,
+                                        &_cairo_pattern_white.base,
+                                        path, fill_rule, tolerance, antialias,
+                                        clip);
+    if (unlikely (status))
+       goto error;
+
+    if (clip != extents->clip) {
+       status = _cairo_clip_combine_with_surface (extents->clip, mask,
+                                                  extents->bounded.x,
+                                                  extents->bounded.y);
+       if (unlikely (status))
+           goto error;
+    }
+
+    _cairo_pattern_init_for_surface (&pattern, mask);
+    cairo_matrix_init_translate (&pattern.base.matrix,
+                                -extents->bounded.x,
+                                -extents->bounded.y);
+    pattern.base.filter = CAIRO_FILTER_NEAREST;
+    pattern.base.extend = CAIRO_EXTEND_NONE;
+    if (extents->op == CAIRO_OPERATOR_SOURCE) {
+       status = _cairo_surface_mask (extents->surface,
+                                     CAIRO_OPERATOR_DEST_OUT,
+                                     &_cairo_pattern_white.base,
+                                     &pattern.base,
+                                     clip);
+       if ((status == CAIRO_INT_STATUS_SUCCESS)) {
+           status = _cairo_surface_mask (extents->surface,
+                                         CAIRO_OPERATOR_ADD,
+                                         &extents->source_pattern.base,
+                                         &pattern.base,
+                                         clip);
+       }
+    } else {
+       status = _cairo_surface_mask (extents->surface,
+                                     extents->op,
+                                     &extents->source_pattern.base,
+                                     &pattern.base,
+                                     clip);
+    }
+    _cairo_pattern_fini (&pattern.base);
+
+error:
+    if (clip != extents->clip)
+       _cairo_clip_destroy (clip);
+    cairo_surface_destroy (mask);
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_shape_mask_compositor_glyphs (const cairo_compositor_t *_compositor,
+                                    cairo_composite_rectangles_t *extents,
+                                    cairo_scaled_font_t        *scaled_font,
+                                    cairo_glyph_t              *glyphs,
+                                    int                         num_glyphs,
+                                    cairo_bool_t                overlap)
+{
+    cairo_surface_t *mask;
+    cairo_surface_pattern_t pattern;
+    cairo_int_status_t status;
+    cairo_clip_t *clip;
+
+    if (! extents->is_bounded)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    mask = _cairo_surface_create_similar_scratch (extents->surface,
+                                                 CAIRO_CONTENT_ALPHA,
+                                                 extents->bounded.width,
+                                                 extents->bounded.height);
+    if (unlikely (mask->status))
+       return mask->status;
+
+    clip = extents->clip;
+    if (! _cairo_clip_is_region (clip))
+       clip = _cairo_clip_copy_region (clip);
+
+    if (! mask->is_clear) {
+       status = _cairo_surface_offset_paint (mask,
+                                             extents->bounded.x,
+                                             extents->bounded.y,
+                                             CAIRO_OPERATOR_CLEAR,
+                                             &_cairo_pattern_clear.base,
+                                             clip);
+       if (unlikely (status))
+           goto error;
+    }
+
+    status = _cairo_surface_offset_glyphs (mask,
+                                          extents->bounded.x,
+                                          extents->bounded.y,
+                                          CAIRO_OPERATOR_ADD,
+                                          &_cairo_pattern_white.base,
+                                          scaled_font, glyphs, num_glyphs,
+                                          clip);
+    if (unlikely (status))
+       goto error;
+
+    if (clip != extents->clip) {
+       status = _cairo_clip_combine_with_surface (extents->clip, mask,
+                                                  extents->bounded.x,
+                                                  extents->bounded.y);
+       if (unlikely (status))
+           goto error;
+    }
+
+    _cairo_pattern_init_for_surface (&pattern, mask);
+    cairo_matrix_init_translate (&pattern.base.matrix,
+                                -extents->bounded.x,
+                                -extents->bounded.y);
+    pattern.base.filter = CAIRO_FILTER_NEAREST;
+    pattern.base.extend = CAIRO_EXTEND_NONE;
+    if (extents->op == CAIRO_OPERATOR_SOURCE) {
+       status = _cairo_surface_mask (extents->surface,
+                                     CAIRO_OPERATOR_DEST_OUT,
+                                     &_cairo_pattern_white.base,
+                                     &pattern.base,
+                                     clip);
+       if ((status == CAIRO_INT_STATUS_SUCCESS)) {
+           status = _cairo_surface_mask (extents->surface,
+                                         CAIRO_OPERATOR_ADD,
+                                         &extents->source_pattern.base,
+                                         &pattern.base,
+                                         clip);
+       }
+    } else {
+       status = _cairo_surface_mask (extents->surface,
+                                     extents->op,
+                                     &extents->source_pattern.base,
+                                     &pattern.base,
+                                     clip);
+    }
+    _cairo_pattern_fini (&pattern.base);
+
+error:
+    if (clip != extents->clip)
+       _cairo_clip_destroy (clip);
+    cairo_surface_destroy (mask);
+    return status;
+}
+
+void
+_cairo_shape_mask_compositor_init (cairo_compositor_t *compositor,
+                                  const cairo_compositor_t  *delegate)
+{
+    compositor->delegate = delegate;
+
+    compositor->paint  = NULL;
+    compositor->mask   = NULL;
+    compositor->fill   = _cairo_shape_mask_compositor_fill;
+    compositor->stroke = _cairo_shape_mask_compositor_stroke;
+    compositor->glyphs = _cairo_shape_mask_compositor_glyphs;
+}
index 537c1bc..bf6b14a 100644 (file)
@@ -39,6 +39,7 @@
 #include "cairo-skia.h"
 
 #include "cairo-surface-clipper-private.h"
+#include "cairo-image-surface-inline.h"
 
 #include <SkBitmap.h>
 #include <SkCanvas.h>
@@ -1151,7 +1152,7 @@ cairo_skia_surface_get_image (cairo_surface_t *surface)
     return &_get_image_surface (esurf)->base;
 }
 
-/***
+/*
 
 Todo:
 
@@ -1171,4 +1172,4 @@ Medium:
 Low:
 - implement EXTEND_NONE
 
-***/
+*/
index cab09f6..d8b94fb 100644 (file)
@@ -61,6 +61,17 @@ struct cairo_spans_compositor {
                                         const cairo_color_t    *color,
                                         cairo_boxes_t          *boxes);
 
+    cairo_int_status_t (*draw_image_boxes) (void *surface,
+                                           cairo_image_surface_t *image,
+                                           cairo_boxes_t *boxes,
+                                           int dx, int dy);
+
+    cairo_int_status_t (*copy_boxes) (void *surface,
+                                     cairo_surface_t *src,
+                                     cairo_boxes_t *boxes,
+                                     const cairo_rectangle_int_t *extents,
+                                     int dx, int dy);
+
     cairo_surface_t * (*pattern_to_surface) (cairo_surface_t *dst,
                                             const cairo_pattern_t *pattern,
                                             cairo_bool_t is_mask,
@@ -84,6 +95,7 @@ struct cairo_spans_compositor {
     /* general shape masks using a span renderer */
     cairo_int_status_t (*renderer_init) (cairo_abstract_span_renderer_t *renderer,
                                         const cairo_composite_rectangles_t *extents,
+                                        cairo_antialias_t antialias,
                                         cairo_bool_t    needs_clip);
 
     void (*renderer_fini) (cairo_abstract_span_renderer_t *renderer,
index cbcd6b3..6cc9a7b 100644 (file)
 #include "cairoint.h"
 
 #include "cairo-compositor-private.h"
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
 #include "cairo-image-surface-private.h"
 #include "cairo-paginated-private.h"
-#include "cairo-pattern-private.h"
+#include "cairo-pattern-inline.h"
 #include "cairo-region-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
 #include "cairo-spans-compositor-private.h"
 #include "cairo-surface-subsurface-private.h"
 #include "cairo-surface-snapshot-private.h"
@@ -77,95 +78,19 @@ clip_and_composite_polygon (const cairo_spans_compositor_t  *compositor,
                            cairo_polygon_t                     *polygon,
                            cairo_fill_rule_t                    fill_rule,
                            cairo_antialias_t                    antialias);
-
-static cairo_int_status_t
-get_clip_polygon (const cairo_clip_path_t *clip_path,
-                 cairo_antialias_t antialias,
-                 cairo_polygon_t *polygon,
-                 cairo_fill_rule_t *fill_rule)
-{
-    cairo_int_status_t status;
-    cairo_bool_t is_first_polygon = TRUE;
-
-    while (clip_path) {
-       if (clip_path->antialias == antialias) {
-           if (is_first_polygon) {
-               status = _cairo_path_fixed_fill_to_polygon (&clip_path->path,
-                                                           clip_path->tolerance,
-                                                           polygon);
-               *fill_rule = clip_path->fill_rule;
-               polygon->limits = NULL;
-               polygon->num_limits = 0;
-               is_first_polygon = FALSE;
-           } else if (polygon->num_edges == 0) {
-               /* Intersecting with empty polygon will generate empty polygon. */
-               return CAIRO_INT_STATUS_NOTHING_TO_DO;
-           } else {
-               cairo_polygon_t next;
-
-               _cairo_polygon_init (&next, NULL, 0);
-               status = _cairo_path_fixed_fill_to_polygon (&clip_path->path,
-                                                           clip_path->tolerance,
-                                                           &next);
-               if (likely (status == CAIRO_INT_STATUS_SUCCESS))
-                   status = _cairo_polygon_intersect (polygon, *fill_rule,
-                                                      &next, clip_path->fill_rule);
-               _cairo_polygon_fini (&next);
-               *fill_rule = CAIRO_FILL_RULE_WINDING;
-           }
-
-           if (unlikely (status))
-               return status;
-       }
-
-       clip_path = clip_path->prev;
-    }
-
-    if (polygon->num_edges == 0)
-       return CAIRO_INT_STATUS_NOTHING_TO_DO;
-
-    assert (is_first_polygon == FALSE);
-    return CAIRO_INT_STATUS_SUCCESS;
-}
-
-static cairo_int_status_t
-composite_clip_polygon (const cairo_spans_compositor_t *compositor,
-                       cairo_surface_t *surface,
-                       cairo_operator_t op,
-                       cairo_polygon_t *polygon,
-                       cairo_fill_rule_t fill_rule,
-                       cairo_antialias_t antialias)
-{
-    cairo_int_status_t status;
-    cairo_composite_rectangles_t composite;
-
-    status = _cairo_composite_rectangles_init_for_polygon (&composite, surface, op,
-                                                          &_cairo_pattern_white.base,
-                                                          polygon,
-                                                          NULL);
-    if (unlikely (status))
-       return CAIRO_INT_STATUS_UNSUPPORTED;
-
-    status = composite_polygon (compositor, &composite,
-                               polygon, fill_rule, antialias);
-    _cairo_composite_rectangles_fini (&composite);
-
-    return status;
-}
-
 static cairo_surface_t *
 get_clip_surface (const cairo_spans_compositor_t *compositor,
                  cairo_surface_t *dst,
                  const cairo_clip_t *clip,
                  const cairo_rectangle_int_t *extents)
 {
+    cairo_composite_rectangles_t composite;
     cairo_surface_t *surface;
     cairo_box_t box;
-    cairo_polygon_t polygon0;
-    cairo_polygon_t polygon1;
-    cairo_fill_rule_t fill_rule0;
-    cairo_fill_rule_t fill_rule1;
+    cairo_polygon_t polygon;
+    const cairo_clip_path_t *clip_path;
     cairo_antialias_t antialias;
+    cairo_fill_rule_t fill_rule;
     cairo_int_status_t status;
 
     assert (clip->path);
@@ -177,68 +102,137 @@ get_clip_surface (const cairo_spans_compositor_t *compositor,
                                                   CAIRO_COLOR_TRANSPARENT);
 
     _cairo_box_from_rectangle (&box, extents);
-    _cairo_polygon_init (&polygon0, &box, 1);
-    _cairo_polygon_init (&polygon1, &box, 1);
+    _cairo_polygon_init (&polygon, &box, 1);
+
+    clip_path = clip->path;
+    status = _cairo_path_fixed_fill_to_polygon (&clip_path->path,
+                                               clip_path->tolerance,
+                                               &polygon);
+    if (unlikely (status))
+       goto cleanup_polygon;
 
-    if (! surface)
-       return _cairo_surface_create_in_error (CAIRO_INT_STATUS_NO_MEMORY);
+    antialias = clip_path->antialias;
+    fill_rule = clip_path->fill_rule;
 
-    status = _cairo_clip_get_polygon (clip, &polygon0, &fill_rule0, &antialias);
+    if (clip->boxes) {
+       cairo_polygon_t intersect;
+       cairo_boxes_t tmp;
 
-    if (status != CAIRO_INT_STATUS_UNSUPPORTED) {
-       if (status == CAIRO_INT_STATUS_NOTHING_TO_DO)
+       _cairo_boxes_init_for_array (&tmp, clip->boxes, clip->num_boxes);
+       status= _cairo_polygon_init_boxes (&intersect, &tmp);
+       if (unlikely (status))
            goto cleanup_polygon;
 
-       _cairo_polygon_translate (&polygon0, -extents->x, -extents->y);
-       status = composite_clip_polygon (compositor, surface, CAIRO_OPERATOR_ADD,
-                                        &polygon0, fill_rule0, antialias);
-       _cairo_polygon_fini (&polygon0);
-       _cairo_polygon_fini (&polygon1);
+       status = _cairo_polygon_intersect (&polygon, fill_rule,
+                                          &intersect, CAIRO_FILL_RULE_WINDING);
+       _cairo_polygon_fini (&intersect);
 
        if (unlikely (status))
            goto cleanup_polygon;
 
-       return surface;
+       fill_rule = CAIRO_FILL_RULE_WINDING;
     }
 
-    /* Here, we can assume that clip paths have heterogeneous antialias,
-     * as this code is fallback for that kind of clip.
-     * This code might not work if all clip paths have equal antialias.
-     */
-    status = get_clip_polygon (clip->path, CAIRO_ANTIALIAS_DEFAULT, &polygon0, &fill_rule0);
+    polygon.limits = NULL;
+    polygon.num_limits = 0;
 
-    if (unlikely (status))
-       goto cleanup_polygon;
+    clip_path = clip_path->prev;
+    while (clip_path) {
+       if (clip_path->antialias == antialias) {
+           cairo_polygon_t next;
+
+           _cairo_polygon_init (&next, NULL, 0);
+           status = _cairo_path_fixed_fill_to_polygon (&clip_path->path,
+                                                       clip_path->tolerance,
+                                                       &next);
+           if (likely (status == CAIRO_INT_STATUS_SUCCESS))
+               status = _cairo_polygon_intersect (&polygon, fill_rule,
+                                                  &next, clip_path->fill_rule);
+           _cairo_polygon_fini (&next);
+           if (unlikely (status))
+               goto cleanup_polygon;
 
-    status = get_clip_polygon (clip->path, CAIRO_ANTIALIAS_NONE, &polygon1, &fill_rule1);
+           fill_rule = CAIRO_FILL_RULE_WINDING;
+       }
+
+       clip_path = clip_path->prev;
+    }
 
+    _cairo_polygon_translate (&polygon, -extents->x, -extents->y);
+    status = _cairo_composite_rectangles_init_for_polygon (&composite, surface,
+                                                          CAIRO_OPERATOR_ADD,
+                                                          &_cairo_pattern_white.base,
+                                                          &polygon,
+                                                          NULL);
     if (unlikely (status))
        goto cleanup_polygon;
 
-    _cairo_polygon_translate (&polygon0, -extents->x, -extents->y);
-    status = composite_clip_polygon (compositor, surface, CAIRO_OPERATOR_ADD,
-                                    &polygon0, fill_rule0, CAIRO_ANTIALIAS_DEFAULT);
-
+    status = composite_polygon (compositor, &composite,
+                               &polygon, fill_rule, antialias);
+    _cairo_composite_rectangles_fini (&composite);
+    _cairo_polygon_fini (&polygon);
     if (unlikely (status))
-       goto cleanup_polygon;
+       goto error;
 
-    _cairo_polygon_translate (&polygon1, -extents->x, -extents->y);
-    status = composite_clip_polygon (compositor, surface, CAIRO_OPERATOR_IN,
-                                    &polygon1, fill_rule1, CAIRO_ANTIALIAS_NONE);
+    _cairo_polygon_init (&polygon, &box, 1);
 
-    if (unlikely (status))
-       goto cleanup_polygon;
+    clip_path = clip->path;
+    antialias = clip_path->antialias == CAIRO_ANTIALIAS_DEFAULT ? CAIRO_ANTIALIAS_NONE : CAIRO_ANTIALIAS_DEFAULT;
+    clip_path = clip_path->prev;
+    while (clip_path) {
+       if (clip_path->antialias == antialias) {
+           if (polygon.num_edges == 0) {
+               status = _cairo_path_fixed_fill_to_polygon (&clip_path->path,
+                                                           clip_path->tolerance,
+                                                           &polygon);
 
-    _cairo_polygon_fini (&polygon0);
-    _cairo_polygon_fini (&polygon1);
+               fill_rule = clip_path->fill_rule;
+               polygon.limits = NULL;
+               polygon.num_limits = 0;
+           } else {
+               cairo_polygon_t next;
+
+               _cairo_polygon_init (&next, NULL, 0);
+               status = _cairo_path_fixed_fill_to_polygon (&clip_path->path,
+                                                           clip_path->tolerance,
+                                                           &next);
+               if (likely (status == CAIRO_INT_STATUS_SUCCESS))
+                   status = _cairo_polygon_intersect (&polygon, fill_rule,
+                                                      &next, clip_path->fill_rule);
+               _cairo_polygon_fini (&next);
+               fill_rule = CAIRO_FILL_RULE_WINDING;
+           }
+           if (unlikely (status))
+               goto error;
+       }
+
+       clip_path = clip_path->prev;
+    }
+
+    if (polygon.num_edges) {
+       _cairo_polygon_translate (&polygon, -extents->x, -extents->y);
+       status = _cairo_composite_rectangles_init_for_polygon (&composite, surface,
+                                                              CAIRO_OPERATOR_IN,
+                                                              &_cairo_pattern_white.base,
+                                                              &polygon,
+                                                              NULL);
+       if (unlikely (status))
+           goto cleanup_polygon;
+
+       status = composite_polygon (compositor, &composite,
+                                   &polygon, fill_rule, antialias);
+       _cairo_composite_rectangles_fini (&composite);
+       _cairo_polygon_fini (&polygon);
+       if (unlikely (status))
+           goto error;
+    }
 
     return surface;
 
 cleanup_polygon:
-    _cairo_polygon_fini (&polygon0);
-    _cairo_polygon_fini (&polygon1);
+    _cairo_polygon_fini (&polygon);
+error:
     cairo_surface_destroy (surface);
-
     return _cairo_int_surface_create_in_error (status);
 }
 
@@ -251,6 +245,8 @@ fixup_unbounded_mask (const cairo_spans_compositor_t *compositor,
     cairo_surface_t *clip;
     cairo_int_status_t status;
 
+    TRACE((stderr, "%s\n", __FUNCTION__));
+
     clip = get_clip_surface (compositor, extents->surface, extents->clip,
                             &extents->unbounded);
     if (unlikely (clip->status)) {
@@ -294,6 +290,8 @@ fixup_unbounded_polygon (const cairo_spans_compositor_t *compositor,
     cairo_antialias_t antialias;
     cairo_int_status_t status;
 
+    TRACE((stderr, "%s\n", __FUNCTION__));
+
     /* Can we treat the clip as a regular clear-polygon and use it to fill? */
     status = _cairo_clip_get_polygon (extents->clip, &polygon,
                                      &fill_rule, &antialias);
@@ -341,6 +339,7 @@ fixup_unbounded_boxes (const cairo_spans_compositor_t *compositor,
 
     assert (boxes->is_pixel_aligned);
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     if (extents->bounded.width  == extents->unbounded.width &&
        extents->bounded.height == extents->unbounded.height)
     {
@@ -378,26 +377,41 @@ fixup_unbounded_boxes (const cairo_spans_compositor_t *compositor,
        assert (status == CAIRO_INT_STATUS_SUCCESS);
     }
 
-    /* Now intersect with the clip boxes */
-    if (extents->clip->num_boxes) {
-       _cairo_boxes_init_for_array (&tmp,
-                                    extents->clip->boxes,
-                                    extents->clip->num_boxes);
-       status = _cairo_boxes_intersect (&clear, &tmp, &clear);
-       if (unlikely (status))
-           goto error;
-    }
-
     /* If we have a clip polygon, we need to intersect with that as well */
     if (extents->clip->path) {
        status = fixup_unbounded_polygon (compositor, extents, &clear);
        if (status == CAIRO_INT_STATUS_UNSUPPORTED)
            status = fixup_unbounded_mask (compositor, extents, &clear);
     } else {
-       status = compositor->fill_boxes (extents->surface,
-                                        CAIRO_OPERATOR_CLEAR,
-                                        CAIRO_COLOR_TRANSPARENT,
-                                        &clear);
+       /* Otherwise just intersect with the clip boxes */
+       if (extents->clip->num_boxes) {
+           _cairo_boxes_init_for_array (&tmp,
+                                        extents->clip->boxes,
+                                        extents->clip->num_boxes);
+           status = _cairo_boxes_intersect (&clear, &tmp, &clear);
+           if (unlikely (status))
+               goto error;
+       }
+
+       if (clear.is_pixel_aligned) {
+           status = compositor->fill_boxes (extents->surface,
+                                            CAIRO_OPERATOR_CLEAR,
+                                            CAIRO_COLOR_TRANSPARENT,
+                                            &clear);
+       } else {
+           cairo_composite_rectangles_t composite;
+
+           status = _cairo_composite_rectangles_init_for_boxes (&composite,
+                                                                extents->surface,
+                                                                CAIRO_OPERATOR_CLEAR,
+                                                                &_cairo_pattern_clear.base,
+                                                                &clear,
+                                                                NULL);
+           if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
+               status = composite_boxes (compositor, &composite, &clear);
+               _cairo_composite_rectangles_fini (&composite);
+           }
+       }
     }
 
 error:
@@ -406,18 +420,12 @@ error:
 }
 
 static cairo_surface_t *
-unwrap_surface (const cairo_pattern_t *pattern)
+unwrap_source (const cairo_pattern_t *pattern)
 {
-    cairo_surface_t *surface;
+    cairo_rectangle_int_t limit;
 
-    surface = ((const cairo_surface_pattern_t *) pattern)->surface;
-    if (_cairo_surface_is_paginated (surface))
-       surface = _cairo_paginated_surface_get_recording (surface);
-    if (_cairo_surface_is_snapshot (surface))
-       surface = _cairo_surface_snapshot_get_target (surface);
-    if (_cairo_surface_is_observer (surface))
-       surface = _cairo_surface_observer_get_target (surface);
-    return surface;
+    return _cairo_pattern_get_source ((cairo_surface_pattern_t *)pattern,
+                                     &limit);
 }
 
 static cairo_bool_t
@@ -444,23 +452,16 @@ recording_pattern_contains_sample (const cairo_pattern_t *pattern,
     if (pattern->extend == CAIRO_EXTEND_NONE)
        return TRUE;
 
-    surface = (cairo_recording_surface_t *) unwrap_surface (pattern);
+    surface = (cairo_recording_surface_t *) unwrap_source (pattern);
     if (surface->unbounded)
        return TRUE;
 
-    if (sample->x >= surface->extents.x &&
-       sample->y >= surface->extents.y &&
-       sample->x + sample->width <= surface->extents.x + surface->extents.width &&
-       sample->y + sample->height <= surface->extents.y + surface->extents.height)
-    {
-       return TRUE;
-    }
-
-    return FALSE;
+    return _cairo_rectangle_contains_rectangle (&surface->extents, sample);
 }
 
 static cairo_bool_t
-op_reduces_to_source (const cairo_composite_rectangles_t *extents)
+op_reduces_to_source (const cairo_composite_rectangles_t *extents,
+                     cairo_bool_t no_mask)
 {
     if (extents->op == CAIRO_OPERATOR_SOURCE)
        return TRUE;
@@ -468,9 +469,76 @@ op_reduces_to_source (const cairo_composite_rectangles_t *extents)
     if (extents->surface->is_clear)
        return extents->op == CAIRO_OPERATOR_OVER || extents->op == CAIRO_OPERATOR_ADD;
 
+    if (no_mask && extents->op == CAIRO_OPERATOR_OVER)
+       return _cairo_pattern_is_opaque (&extents->source_pattern.base,
+                                        &extents->source_sample_area);
+
     return FALSE;
 }
 
+static cairo_status_t
+upload_boxes (const cairo_spans_compositor_t *compositor,
+             const cairo_composite_rectangles_t *extents,
+             cairo_boxes_t *boxes)
+{
+    cairo_surface_t *dst = extents->surface;
+    const cairo_surface_pattern_t *source = &extents->source_pattern.surface;
+    cairo_surface_t *src;
+    cairo_rectangle_int_t limit;
+    cairo_int_status_t status;
+    int tx, ty;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    src = _cairo_pattern_get_source(source, &limit);
+    if (!(src->type == CAIRO_SURFACE_TYPE_IMAGE || src->type == dst->type))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (! _cairo_matrix_is_integer_translation (&source->base.matrix, &tx, &ty))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* Check that the data is entirely within the image */
+    if (extents->bounded.x + tx < limit.x || extents->bounded.y + ty < limit.y)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (extents->bounded.x + extents->bounded.width  + tx > limit.x + limit.width ||
+       extents->bounded.y + extents->bounded.height + ty > limit.y + limit.height)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    tx += limit.x;
+    ty += limit.y;
+
+    if (src->type == CAIRO_SURFACE_TYPE_IMAGE)
+       status = compositor->draw_image_boxes (dst,
+                                              (cairo_image_surface_t *)src,
+                                              boxes, tx, ty);
+    else
+       status = compositor->copy_boxes (dst, src, boxes, &extents->bounded,
+                                        tx, ty);
+
+    return status;
+}
+
+static cairo_bool_t
+_clip_is_region (const cairo_clip_t *clip)
+{
+    int i;
+
+    if (clip->is_region)
+       return TRUE;
+
+    if (clip->path)
+       return FALSE;
+
+    for (i = 0; i < clip->num_boxes; i++) {
+       const cairo_box_t *b = &clip->boxes[i];
+       if (!_cairo_fixed_is_integer (b->p1.x | b->p1.y |  b->p2.x | b->p2.y))
+           return FALSE;
+    }
+
+    return TRUE;
+}
+
 static cairo_int_status_t
 composite_aligned_boxes (const cairo_spans_compositor_t                *compositor,
                         const cairo_composite_rectangles_t     *extents,
@@ -480,19 +548,24 @@ composite_aligned_boxes (const cairo_spans_compositor_t           *compositor,
     cairo_operator_t op = extents->op;
     const cairo_pattern_t *source = &extents->source_pattern.base;
     cairo_int_status_t status;
-    cairo_bool_t need_clip_mask = extents->clip->path != NULL;
+    cairo_bool_t need_clip_mask = ! _clip_is_region (extents->clip);
     cairo_bool_t op_is_source;
     cairo_bool_t no_mask;
     cairo_bool_t inplace;
 
+    TRACE ((stderr, "%s: need_clip_mask=%d, is-bounded=%d\n",
+           __FUNCTION__, need_clip_mask, extents->is_bounded));
     if (need_clip_mask && ! extents->is_bounded)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    op_is_source = op_reduces_to_source (extents);
     no_mask = extents->mask_pattern.base.type == CAIRO_PATTERN_TYPE_SOLID &&
-       CAIRO_ALPHA_IS_OPAQUE (extents->mask_pattern.solid.color.alpha);
+       CAIRO_COLOR_IS_OPAQUE (&extents->mask_pattern.solid.color);
+    op_is_source = op_reduces_to_source (extents, no_mask);
     inplace = ! need_clip_mask && op_is_source && no_mask;
 
+    TRACE ((stderr, "%s: op-is-source=%d [op=%d], no-mask=%d, inplace=%d\n",
+           __FUNCTION__, op_is_source, op, no_mask, inplace));
+
     if (op == CAIRO_OPERATOR_SOURCE && (need_clip_mask || ! no_mask)) {
        /* SOURCE with a mask is actually a LERP in cairo semantics */
        if ((compositor->flags & CAIRO_SPANS_COMPOSITOR_HAS_LERP) == 0)
@@ -517,7 +590,7 @@ composite_aligned_boxes (const cairo_spans_compositor_t             *compositor,
                                             boxes);
 
        recording_clip = _cairo_clip_from_boxes (boxes);
-       status = _cairo_recording_surface_replay_with_clip (unwrap_surface (source),
+       status = _cairo_recording_surface_replay_with_clip (unwrap_source (source),
                                                            &source->matrix,
                                                            dst, recording_clip);
        _cairo_clip_destroy (recording_clip);
@@ -525,6 +598,7 @@ composite_aligned_boxes (const cairo_spans_compositor_t             *compositor,
        return status;
     }
 
+    status = CAIRO_INT_STATUS_UNSUPPORTED;
     if (! need_clip_mask && no_mask && source->type == CAIRO_PATTERN_TYPE_SOLID) {
        const cairo_color_t *color;
 
@@ -532,11 +606,10 @@ composite_aligned_boxes (const cairo_spans_compositor_t           *compositor,
        if (op_is_source)
            op = CAIRO_OPERATOR_SOURCE;
        status = compositor->fill_boxes (dst, op, color, boxes);
-#if 0
     } else if (inplace && source->type == CAIRO_PATTERN_TYPE_SURFACE) {
-       status = upload_inplace (compositor, extents, boxes);
-#endif
-    } else {
+       status = upload_boxes (compositor, extents, boxes);
+    }
+    if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
        cairo_surface_t *src;
        cairo_surface_t *mask = NULL;
        int src_x, src_y;
@@ -546,12 +619,8 @@ composite_aligned_boxes (const cairo_spans_compositor_t            *compositor,
        if (need_clip_mask) {
            mask = get_clip_surface (compositor, dst, extents->clip,
                                     &extents->bounded);
-           if (unlikely (mask->status)) {
-               if ((cairo_int_status_t)mask->status == CAIRO_INT_STATUS_NOTHING_TO_DO)
-                   return CAIRO_STATUS_SUCCESS;
-
+           if (unlikely (mask->status))
                return mask->status;
-           }
 
            mask_x = -extents->bounded.x;
            mask_y = -extents->bounded.y;
@@ -610,19 +679,10 @@ composite_aligned_boxes (const cairo_spans_compositor_t           *compositor,
 }
 
 static cairo_bool_t
-composite_needs_clip (const cairo_composite_rectangles_t *composit,
+composite_needs_clip (const cairo_composite_rectangles_t *composite,
                      const cairo_box_t *extents)
 {
-    cairo_bool_t needs_clip;
-
-    if (composit->clip && composit->clip->path != NULL)
-       return TRUE;
-
-    needs_clip = ! composit->is_bounded;
-    if (needs_clip)
-       needs_clip = ! _cairo_clip_contains_box (composit->clip, extents);
-
-    return needs_clip;
+    return !_cairo_clip_contains_box (composite->clip, extents);
 }
 
 static cairo_int_status_t
@@ -636,11 +696,12 @@ composite_boxes (const cairo_spans_compositor_t *compositor,
     cairo_int_status_t status;
     cairo_box_t box;
 
-    _cairo_box_from_rectangle (&box, &extents->bounded);
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    _cairo_box_from_rectangle (&box, &extents->unbounded);
     if (composite_needs_clip (extents, &box))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    _cairo_rectangular_scan_converter_init (&converter, &extents->bounded);
+    _cairo_rectangular_scan_converter_init (&converter, &extents->unbounded);
     for (chunk = &boxes->chunks; chunk != NULL; chunk = chunk->next) {
        const cairo_box_t *box = chunk->base;
        int i;
@@ -652,7 +713,8 @@ composite_boxes (const cairo_spans_compositor_t *compositor,
        }
     }
 
-    status = compositor->renderer_init (&renderer, extents, FALSE);
+    status = compositor->renderer_init (&renderer, extents,
+                                       CAIRO_ANTIALIAS_DEFAULT, FALSE);
     if (likely (status == CAIRO_INT_STATUS_SUCCESS))
        status = converter.base.generate (&converter.base, &renderer.base);
     compositor->renderer_fini (&renderer, status);
@@ -674,14 +736,16 @@ composite_polygon (const cairo_spans_compositor_t *compositor,
     cairo_bool_t needs_clip;
     cairo_int_status_t status;
 
-    needs_clip = composite_needs_clip (extents, &polygon->extents);
+    needs_clip = ! extents->is_bounded &&
+       (! _clip_is_region (extents->clip) || extents->clip->num_boxes > 1);
+    TRACE ((stderr, "%s - needs_clip=%d\n", __FUNCTION__, needs_clip));
     if (needs_clip) {
        return CAIRO_INT_STATUS_UNSUPPORTED;
        converter = _cairo_clip_tor_scan_converter_create (extents->clip,
                                                           polygon,
                                                           fill_rule, antialias);
     } else {
-       const cairo_rectangle_int_t *r = &extents->bounded;
+       const cairo_rectangle_int_t *r = &extents->unbounded;
 
        if (antialias == CAIRO_ANTIALIAS_FAST) {
            converter = _cairo_tor22_scan_converter_create (r->x, r->y,
@@ -706,7 +770,8 @@ composite_polygon (const cairo_spans_compositor_t   *compositor,
     if (unlikely (status))
        goto cleanup_converter;
 
-    status = compositor->renderer_init (&renderer, extents, needs_clip);
+    status = compositor->renderer_init (&renderer, extents,
+                                       antialias, needs_clip);
     if (likely (status == CAIRO_INT_STATUS_SUCCESS))
        status = converter->generate (converter, &renderer.base);
     compositor->renderer_fini (&renderer, status);
@@ -741,9 +806,8 @@ clip_and_composite_boxes (const cairo_spans_compositor_t    *compositor,
 {
     cairo_int_status_t status;
     cairo_polygon_t polygon;
-    struct _cairo_boxes_chunk *chunk;
-    int i;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     status = trim_extents_to_boxes (extents, boxes);
     if (unlikely (status))
        return status;
@@ -764,6 +828,9 @@ clip_and_composite_boxes (const cairo_spans_compositor_t    *compositor,
 
        clip = _cairo_clip_copy (extents->clip);
        clip = _cairo_clip_intersect_boxes (clip, boxes);
+       if (_cairo_clip_is_all_clipped (clip))
+           return CAIRO_INT_STATUS_NOTHING_TO_DO;
+
        status = _cairo_clip_get_polygon (clip, &polygon,
                                          &fill_rule, &antialias);
        _cairo_clip_path_destroy (clip->path);
@@ -817,6 +884,8 @@ clip_and_composite_polygon (const cairo_spans_compositor_t  *compositor,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     /* XXX simply uses polygon limits.point extemities, tessellation? */
     status = trim_extents_to_polygon (extents, polygon);
     if (unlikely (status))
@@ -838,6 +907,9 @@ clip_and_composite_polygon (const cairo_spans_compositor_t  *compositor,
        cairo_antialias_t clip_antialias;
        cairo_fill_rule_t clip_fill_rule;
 
+       TRACE((stderr, "%s - combining shape with clip polygon\n",
+              __FUNCTION__));
+
        status = _cairo_clip_get_polygon (extents->clip,
                                          &clipper,
                                          &clip_fill_rule,
@@ -858,6 +930,10 @@ clip_and_composite_polygon (const cairo_spans_compositor_t *compositor,
                old_clip = extents->clip;
                extents->clip = _cairo_clip_copy_region (extents->clip);
                _cairo_clip_destroy (old_clip);
+
+               status = trim_extents_to_polygon (extents, polygon);
+               if (unlikely (status))
+                   return status;
            } else {
                _cairo_polygon_fini (&clipper);
            }
@@ -878,6 +954,7 @@ _cairo_spans_compositor_paint (const cairo_compositor_t             *_compositor,
     cairo_boxes_t boxes;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     _cairo_clip_steal_boxes (extents->clip, &boxes);
     status = clip_and_composite_boxes (compositor, extents, &boxes);
     _cairo_clip_unsteal_boxes (extents->clip, &boxes);
@@ -893,6 +970,7 @@ _cairo_spans_compositor_mask (const cairo_compositor_t              *_compositor,
     cairo_int_status_t status;
     cairo_boxes_t boxes;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     _cairo_clip_steal_boxes (extents->clip, &boxes);
     status = clip_and_composite_boxes (compositor, extents, &boxes);
     _cairo_clip_unsteal_boxes (extents->clip, &boxes);
@@ -913,6 +991,8 @@ _cairo_spans_compositor_stroke (const cairo_compositor_t    *_compositor,
     const cairo_spans_compositor_t *compositor = (cairo_spans_compositor_t*)_compositor;
     cairo_int_status_t status;
 
+    TRACE_ (_cairo_debug_print_path (stderr, path));
+
     status = CAIRO_INT_STATUS_UNSUPPORTED;
     if (_cairo_path_fixed_stroke_is_rectilinear (path)) {
        cairo_boxes_t boxes;
@@ -935,25 +1015,46 @@ _cairo_spans_compositor_stroke (const cairo_compositor_t *_compositor,
 
     if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
        cairo_polygon_t polygon;
+       cairo_fill_rule_t fill_rule = CAIRO_FILL_RULE_WINDING;
 
        if (extents->mask.width  > extents->unbounded.width ||
            extents->mask.height > extents->unbounded.height)
        {
-           _cairo_polygon_init_with_clip (&polygon, extents->clip);
+           cairo_box_t limits;
+           _cairo_box_from_rectangle (&limits, &extents->unbounded);
+           _cairo_polygon_init (&polygon, &limits, 1);
        }
        else
        {
-           _cairo_polygon_init_with_clip (&polygon, NULL);
+           _cairo_polygon_init (&polygon, NULL, 0);
        }
        status = _cairo_path_fixed_stroke_to_polygon (path,
                                                      style,
                                                      ctm, ctm_inverse,
                                                      tolerance,
                                                      &polygon);
+       TRACE_ (_cairo_debug_print_polygon (stderr, &polygon));
+       if (status == CAIRO_INT_STATUS_SUCCESS && extents->clip->num_boxes > 1) {
+           status = _cairo_polygon_intersect_with_boxes (&polygon, &fill_rule,
+                                                         extents->clip->boxes,
+                                                         extents->clip->num_boxes);
+       }
        if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
+           cairo_clip_t *saved_clip = extents->clip;
+
+           if (extents->is_bounded) {
+               extents->clip = _cairo_clip_copy_path (extents->clip);
+               extents->clip = _cairo_clip_intersect_box(extents->clip,
+                                                         &polygon.extents);
+           }
+
            status = clip_and_composite_polygon (compositor, extents, &polygon,
-                                                CAIRO_FILL_RULE_WINDING,
-                                                antialias);
+                                                fill_rule, antialias);
+
+           if (extents->is_bounded) {
+               _cairo_clip_destroy (extents->clip);
+               extents->clip = saved_clip;
+           }
        }
        _cairo_polygon_fini (&polygon);
     }
@@ -972,10 +1073,14 @@ _cairo_spans_compositor_fill (const cairo_compositor_t           *_compositor,
     const cairo_spans_compositor_t *compositor = (cairo_spans_compositor_t*)_compositor;
     cairo_int_status_t status;
 
+    TRACE((stderr, "%s op=%d, antialias=%d\n", __FUNCTION__, extents->op, antialias));
+
     status = CAIRO_INT_STATUS_UNSUPPORTED;
     if (_cairo_path_fixed_fill_is_rectilinear (path)) {
        cairo_boxes_t boxes;
 
+       TRACE((stderr, "%s - rectilinear\n", __FUNCTION__));
+
        _cairo_boxes_init (&boxes);
        if (! _cairo_clip_contains_rectangle (extents->clip, &extents->mask))
            _cairo_boxes_limit (&boxes,
@@ -992,10 +1097,13 @@ _cairo_spans_compositor_fill (const cairo_compositor_t           *_compositor,
     if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
        cairo_polygon_t polygon;
 
+       TRACE((stderr, "%s - polygon\n", __FUNCTION__));
+
        if (extents->mask.width  > extents->unbounded.width ||
            extents->mask.height > extents->unbounded.height)
        {
            cairo_box_t limits;
+           TRACE((stderr, "%s - clipping to bounds\n", __FUNCTION__));
            _cairo_box_from_rectangle (&limits, &extents->unbounded);
            _cairo_polygon_init (&polygon, &limits, 1);
        }
@@ -1005,24 +1113,35 @@ _cairo_spans_compositor_fill (const cairo_compositor_t          *_compositor,
        }
 
        status = _cairo_path_fixed_fill_to_polygon (path, tolerance, &polygon);
-       if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
+       if (status == CAIRO_INT_STATUS_SUCCESS && extents->clip->num_boxes > 1) {
+           TRACE((stderr, "%s - polygon intersect with %d clip boxes\n",
+                  __FUNCTION__, extents->clip->num_boxes));
            status = _cairo_polygon_intersect_with_boxes (&polygon, &fill_rule,
                                                          extents->clip->boxes,
                                                          extents->clip->num_boxes);
        }
        if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
-           if (extents->is_bounded) {
-               if (extents->clip->boxes != &extents->clip->embedded_box)
-                   free (extents->clip->boxes);
+           cairo_clip_t *saved_clip = extents->clip;
 
-               extents->clip->num_boxes = 1;
-               extents->clip->boxes = &extents->clip->embedded_box;
-               extents->clip->boxes[0] = polygon.extents;
+           if (extents->is_bounded) {
+               TRACE((stderr, "%s - polygon discard clip boxes\n",
+                      __FUNCTION__));
+               extents->clip = _cairo_clip_copy_path (extents->clip);
+               extents->clip = _cairo_clip_intersect_box(extents->clip,
+                                                         &polygon.extents);
            }
+
            status = clip_and_composite_polygon (compositor, extents, &polygon,
                                                 fill_rule, antialias);
+
+           if (extents->is_bounded) {
+               _cairo_clip_destroy (extents->clip);
+               extents->clip = saved_clip;
+           }
        }
        _cairo_polygon_fini (&polygon);
+
+       TRACE((stderr, "%s - polygon status=%d\n", __FUNCTION__, status));
     }
 
     return status;
index 34ad585..44634fa 100644 (file)
@@ -36,7 +36,7 @@
 
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-slope-private.h"
 
 cairo_bool_t
index d581bdc..9494010 100644 (file)
@@ -71,12 +71,12 @@ void
 _cairo_stroker_dash_step (cairo_stroker_dash_t *dash, double step)
 {
     dash->dash_remain -= step;
-    if (dash->dash_remain <= 0.) {
+    if (dash->dash_remain < CAIRO_FIXED_ERROR_DOUBLE) {
        if (++dash->dash_index == dash->num_dashes)
            dash->dash_index = 0;
 
        dash->dash_on = ! dash->dash_on;
-       dash->dash_remain = dash->dashes[dash->dash_index];
+       dash->dash_remain += dash->dashes[dash->dash_index];
     }
 }
 
index 9b7e407..3ebaf01 100644 (file)
@@ -196,7 +196,7 @@ _cairo_stroke_style_dash_stroked (const cairo_stroke_style_t *style)
     } else {
         /* Even (0, 2, ...) dashes are on and simply counted for the coverage, odd dashes are off, thus
         * their coverage is approximated based on the area covered by the caps of adjacent on dases. */
-       for (i = 0; i < style->num_dashes; i+=2)
+       for (i = 0; i + 1 < style->num_dashes; i += 2)
            stroked += style->dash[i] + cap_scale * MIN (style->dash[i+1], style->line_width);
     }
 
index 03468cc..fbaa912 100644 (file)
@@ -70,6 +70,10 @@ struct _cairo_surface_backend {
     (*unmap_image)             (void                   *surface,
                                 cairo_image_surface_t  *image);
 
+    cairo_surface_t *
+    (*source)                  (void                    *abstract_surface,
+                                cairo_rectangle_int_t  *extents);
+
     cairo_warn cairo_status_t
     (*acquire_source_image)    (void                    *abstract_surface,
                                 cairo_image_surface_t  **image_out,
@@ -192,8 +196,25 @@ struct _cairo_surface_backend {
                                 cairo_text_cluster_flags_t  cluster_flags,
                                 cairo_scaled_font_t        *scaled_font,
                                 const cairo_clip_t               *clip);
+
+    const char **
+    (*get_supported_mime_types)        (void                       *surface);
 };
 
+cairo_private cairo_status_t
+_cairo_surface_default_acquire_source_image (void                    *surface,
+                                            cairo_image_surface_t  **image_out,
+                                            void                   **image_extra);
+
+cairo_private void
+_cairo_surface_default_release_source_image (void                   *surface,
+                                            cairo_image_surface_t  *image,
+                                            void                   *image_extra);
+
+cairo_private cairo_surface_t *
+_cairo_surface_default_source (void *surface,
+                              cairo_rectangle_int_t *extents);
+
 CAIRO_END_DECLS
 
 #endif /* CAIRO_SURFACE_BACKEND_PRIVATE_H */
index 0d2890c..5309362 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "cairoint.h"
 
+#include "cairo-clip-inline.h"
 #include "cairo-surface-clipper-private.h"
 
 /* A collection of routines to facilitate vector surface clipping */
diff --git a/src/cairo-surface-inline.h b/src/cairo-surface-inline.h
new file mode 100644 (file)
index 0000000..27ea8f0
--- /dev/null
@@ -0,0 +1,60 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2002 University of Southern California
+ * Copyright Â© 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is University of Southern
+ * California.
+ *
+ * Contributor(s):
+ *     Carl D. Worth <cworth@cworth.org>
+ */
+
+#ifndef CAIRO_SURFACE_INLINE_H
+#define CAIRO_SURFACE_INLINE_H
+
+#include "cairo-surface-private.h"
+
+static inline cairo_status_t
+_cairo_surface_flush (cairo_surface_t *surface)
+{
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
+    if (surface->backend->flush)
+       status = surface->backend->flush (surface);
+    return status;
+}
+
+static inline cairo_surface_t *
+_cairo_surface_reference (cairo_surface_t *surface)
+{
+    if (!CAIRO_REFERENCE_COUNT_IS_INVALID (&surface->ref_count))
+       _cairo_reference_count_inc (&surface->ref_count);
+    return surface;
+}
+
+#endif /* CAIRO_SURFACE_INLINE_H */
diff --git a/src/cairo-surface-observer-inline.h b/src/cairo-surface-observer-inline.h
new file mode 100644 (file)
index 0000000..07b9477
--- /dev/null
@@ -0,0 +1,59 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Intel Corporation.
+ *
+ * Contributor(s):
+ *      Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#ifndef CAIRO_SURFACE_OBSERVER_INLINE_H
+#define CAIRO_SURFACE_OBSERVER_INLINE_H
+
+#include "cairo-surface-observer-private.h"
+
+static inline cairo_surface_t *
+_cairo_surface_observer_get_target (cairo_surface_t *surface)
+{
+    return ((cairo_surface_observer_t *) surface)->target;
+}
+
+static inline cairo_bool_t
+_cairo_surface_is_observer (cairo_surface_t *surface)
+{
+    return surface->backend->type == (cairo_surface_type_t)CAIRO_INTERNAL_SURFACE_TYPE_OBSERVER;
+}
+
+static inline cairo_bool_t
+_cairo_device_is_observer (cairo_device_t *device)
+{
+    return device->backend->type == (cairo_device_type_t)CAIRO_INTERNAL_DEVICE_TYPE_OBSERVER;
+}
+
+#endif /* CAIRO_SURFACE_OBSERVER_INLINE_H */
index 1b5d6d9..70c87db 100644 (file)
@@ -205,23 +205,4 @@ struct _cairo_surface_observer {
     cairo_list_t finish_callbacks;
 };
 
-static inline cairo_surface_t *
-_cairo_surface_observer_get_target (cairo_surface_t *surface)
-{
-    return ((cairo_surface_observer_t *) surface)->target;
-}
-
-static inline cairo_bool_t
-_cairo_surface_is_observer (cairo_surface_t *surface)
-{
-    return surface->backend->type == (cairo_surface_type_t)CAIRO_INTERNAL_SURFACE_TYPE_OBSERVER;
-}
-
-static inline cairo_bool_t
-_cairo_device_is_observer (cairo_device_t *device)
-{
-    return device->backend->type == (cairo_device_type_t)CAIRO_INTERNAL_DEVICE_TYPE_OBSERVER;
-}
-
-
-#endif /* CAIRO_SURFACE_SNAPSHOT_PRIVATE_H */
+#endif /* CAIRO_SURFACE_OBSERVER_PRIVATE_H */
index ebb38b9..9247bc4 100644 (file)
 #include "cairoint.h"
 
 #include "cairo-surface-observer-private.h"
+#include "cairo-surface-observer-inline.h"
 
 #include "cairo-array-private.h"
-#include "cairo-combsort-private.h"
+#include "cairo-combsort-inline.h"
 #include "cairo-composite-rectangles-private.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-pattern-private.h"
 #include "cairo-output-stream-private.h"
 #include "cairo-recording-surface-private.h"
-#include "cairo-surface-subsurface-private.h"
+#include "cairo-surface-subsurface-inline.h"
 #include "cairo-reference-count-private.h"
 
 #if CAIRO_HAS_SCRIPT_SURFACE
@@ -184,6 +186,9 @@ classify_pattern (const cairo_pattern_t *pattern,
     case CAIRO_PATTERN_TYPE_MESH:
        classify = 6;
        break;
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
+       classify = 7;
+       break;
     }
     return classify;
 }
@@ -283,7 +288,11 @@ static void
 _cairo_device_observer_lock (void *_device)
 {
     cairo_device_observer_t *device = (cairo_device_observer_t *) _device;
-    cairo_device_acquire (device->target);
+    cairo_status_t ignored;
+
+    /* cairo_device_acquire() can fail for nil and finished
+     * devices. We don't care about observing them. */
+    ignored = cairo_device_acquire (device->target);
 }
 
 static void
@@ -1273,6 +1282,14 @@ _cairo_surface_observer_get_font_options (void *abstract_surface,
        surface->target->backend->get_font_options (surface->target, options);
 }
 
+static cairo_surface_t *
+_cairo_surface_observer_source (void                    *abstract_surface,
+                               cairo_rectangle_int_t   *extents)
+{
+    cairo_surface_observer_t *surface = abstract_surface;
+    return _cairo_surface_get_source (surface->target, extents);
+}
+
 static cairo_status_t
 _cairo_surface_observer_acquire_source_image (void                    *abstract_surface,
                                                cairo_image_surface_t  **image_out,
@@ -1336,6 +1353,7 @@ static const cairo_surface_backend_t _cairo_surface_observer_backend = {
     _cairo_surface_observer_map_to_image,
     _cairo_surface_observer_unmap_image,
 
+    _cairo_surface_observer_source,
     _cairo_surface_observer_acquire_source_image,
     _cairo_surface_observer_release_source_image,
     _cairo_surface_observer_snapshot,
@@ -1687,7 +1705,8 @@ static const char *pattern_names[] = {
     "solid",
     "linear",
     "radial",
-    "mesh"
+    "mesh",
+    "raster"
 };
 static void
 print_pattern (cairo_output_stream_t *stream,
@@ -1944,7 +1963,7 @@ _cairo_observation_print (cairo_output_stream_t *stream,
     cairo_device_destroy (script);
 }
 
-void
+cairo_status_t
 cairo_surface_observer_print (cairo_surface_t *abstract_surface,
                              cairo_write_func_t write_func,
                              void *closure)
@@ -1952,17 +1971,17 @@ cairo_surface_observer_print (cairo_surface_t *abstract_surface,
     cairo_output_stream_t *stream;
     cairo_surface_observer_t *surface;
 
-    if (unlikely (CAIRO_REFERENCE_COUNT_IS_INVALID (&abstract_surface->ref_count)))
-       return;
+    if (unlikely (abstract_surface->status))
+       return abstract_surface->status;
 
-    if (! _cairo_surface_is_observer (abstract_surface))
-       return;
+    if (unlikely (! _cairo_surface_is_observer (abstract_surface)))
+       return _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
 
     surface = (cairo_surface_observer_t *) abstract_surface;
 
     stream = _cairo_output_stream_create (write_func, NULL, closure);
     _cairo_observation_print (stream, &surface->log);
-    _cairo_output_stream_destroy (stream);
+    return _cairo_output_stream_destroy (stream);
 }
 
 double
@@ -1980,7 +1999,7 @@ cairo_surface_observer_elapsed (cairo_surface_t *abstract_surface)
     return _cairo_time_to_ns (_cairo_observation_total_elapsed (&surface->log));
 }
 
-void
+cairo_status_t
 cairo_device_observer_print (cairo_device_t *abstract_device,
                             cairo_write_func_t write_func,
                             void *closure)
@@ -1988,17 +2007,17 @@ cairo_device_observer_print (cairo_device_t *abstract_device,
     cairo_output_stream_t *stream;
     cairo_device_observer_t *device;
 
-    if (unlikely (CAIRO_REFERENCE_COUNT_IS_INVALID (&abstract_device->ref_count)))
-       return;
+    if (unlikely (abstract_device->status))
+       return abstract_device->status;
 
-    if (! _cairo_device_is_observer (abstract_device))
-       return;
+    if (unlikely (! _cairo_device_is_observer (abstract_device)))
+       return _cairo_error (CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
 
     device = (cairo_device_observer_t *) abstract_device;
 
     stream = _cairo_output_stream_create (write_func, NULL, closure);
     _cairo_observation_print (stream, &device->log);
-    _cairo_output_stream_destroy (stream);
+    return _cairo_output_stream_destroy (stream);
 }
 
 double
index d2cc030..98f57f2 100644 (file)
@@ -37,6 +37,7 @@
 
 #include "cairoint.h"
 
+#include "cairo-clip-inline.h"
 #include "cairo-error-private.h"
 #include "cairo-pattern-private.h"
 #include "cairo-surface-offset-private.h"
index 5a66480..d23fc05 100644 (file)
@@ -44,6 +44,7 @@
 #include "cairo-list-private.h"
 #include "cairo-reference-count-private.h"
 #include "cairo-clip-private.h"
+#include "cairo-surface-backend-private.h"
 
 typedef void (*cairo_surface_func_t) (cairo_surface_t *);
 
@@ -62,7 +63,9 @@ struct _cairo_surface {
     cairo_status_t status;
     unsigned int unique_id;
     unsigned int serial;
+    cairo_damage_t *damage;
 
+    unsigned _finishing : 1;
     unsigned finished : 1;
     unsigned is_clear : 1;
     unsigned has_font_options : 1;
@@ -105,4 +108,8 @@ struct _cairo_surface {
 cairo_private cairo_surface_t *
 _cairo_int_surface_create_in_error (cairo_int_status_t status);
 
+cairo_private cairo_surface_t *
+_cairo_surface_get_source (cairo_surface_t *surface,
+                          cairo_rectangle_int_t *extents);
+
 #endif /* CAIRO_SURFACE_PRIVATE_H */
diff --git a/src/cairo-surface-snapshot-inline.h b/src/cairo-surface-snapshot-inline.h
new file mode 100644 (file)
index 0000000..bf89c77
--- /dev/null
@@ -0,0 +1,67 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2009 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Intel Corporation.
+ *
+ * Contributor(s):
+ *      Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#ifndef CAIRO_SURFACE_SNAPSHOT_INLINE_H
+#define CAIRO_SURFACE_SNAPSHOT_INLINE_H
+
+#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-inline.h"
+
+static inline cairo_bool_t
+_cairo_surface_snapshot_is_reused (cairo_surface_t *surface)
+{
+    return CAIRO_REFERENCE_COUNT_GET_VALUE (&surface->ref_count) > 2;
+}
+
+static inline cairo_surface_t *
+_cairo_surface_snapshot_get_target (cairo_surface_t *surface)
+{
+    cairo_surface_snapshot_t *snapshot = (cairo_surface_snapshot_t *) surface;
+    cairo_surface_t *target;
+
+    CAIRO_MUTEX_LOCK (snapshot->mutex);
+    target = _cairo_surface_reference (snapshot->target);
+    CAIRO_MUTEX_UNLOCK (snapshot->mutex);
+
+    return target;
+}
+
+static inline cairo_bool_t
+_cairo_surface_is_snapshot (cairo_surface_t *surface)
+{
+    return surface->backend->type == (cairo_surface_type_t)CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT;
+}
+
+#endif /* CAIRO_SURFACE_SNAPSHOT_INLINE_H */
index b7a4d05..58bee7b 100644 (file)
 #ifndef CAIRO_SURFACE_SNAPSHOT_PRIVATE_H
 #define CAIRO_SURFACE_SNAPSHOT_PRIVATE_H
 
+#include "cairo-mutex-private.h"
 #include "cairo-surface-private.h"
 #include "cairo-surface-backend-private.h"
 
 struct _cairo_surface_snapshot {
     cairo_surface_t base;
 
+    cairo_mutex_t mutex;
     cairo_surface_t *target;
     cairo_surface_t *clone;
 };
 
-static inline cairo_bool_t
-_cairo_surface_snapshot_is_reused (cairo_surface_t *surface)
-{
-    return CAIRO_REFERENCE_COUNT_GET_VALUE (&surface->ref_count) > 2;
-}
-
-static inline cairo_surface_t *
-_cairo_surface_snapshot_get_target (cairo_surface_t *surface)
-{
-    return ((cairo_surface_snapshot_t *) surface)->target;
-}
-
-static inline cairo_bool_t
-_cairo_surface_is_snapshot (cairo_surface_t *surface)
-{
-    return surface->backend->type == (cairo_surface_type_t)CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT;
-}
-
 #endif /* CAIRO_SURFACE_SNAPSHOT_PRIVATE_H */
index 4bc40e7..9471e47 100644 (file)
@@ -41,7 +41,7 @@
 
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
 
 static cairo_status_t
 _cairo_surface_snapshot_finish (void *abstract_surface)
@@ -49,6 +49,8 @@ _cairo_surface_snapshot_finish (void *abstract_surface)
     cairo_surface_snapshot_t *surface = abstract_surface;
     cairo_status_t status = CAIRO_STATUS_SUCCESS;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (surface->clone != NULL) {
        cairo_surface_finish (surface->clone);
        status = surface->clone->status;
@@ -56,6 +58,8 @@ _cairo_surface_snapshot_finish (void *abstract_surface)
        cairo_surface_destroy (surface->clone);
     }
 
+    CAIRO_MUTEX_FINI (surface->mutex);
+
     return status;
 }
 
@@ -63,29 +67,64 @@ static cairo_status_t
 _cairo_surface_snapshot_flush (void *abstract_surface)
 {
     cairo_surface_snapshot_t *surface = abstract_surface;
+    cairo_surface_t *target;
+    cairo_status_t status;
+
+    target = _cairo_surface_snapshot_get_target (&surface->base);
+    cairo_surface_flush (target);
+    status = target->status;
+    cairo_surface_destroy (target);
+
+    return status;
+}
 
-    cairo_surface_flush (surface->target);
-    return surface->target->status;
+static cairo_surface_t *
+_cairo_surface_snapshot_source (void                    *abstract_surface,
+                               cairo_rectangle_int_t *extents)
+{
+    cairo_surface_snapshot_t *surface = abstract_surface;
+    return _cairo_surface_get_source (surface->target, extents); /* XXX racy */
 }
 
+struct snapshot_extra {
+    cairo_surface_t *target;
+    void *extra;
+};
+
 static cairo_status_t
 _cairo_surface_snapshot_acquire_source_image (void                    *abstract_surface,
                                              cairo_image_surface_t  **image_out,
                                              void                   **extra_out)
 {
     cairo_surface_snapshot_t *surface = abstract_surface;
+    struct snapshot_extra *extra;
+    cairo_status_t status;
+
+    extra = malloc (sizeof (*extra));
+    if (unlikely (extra == NULL))
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+    extra->target = _cairo_surface_snapshot_get_target (&surface->base);
+    status =  _cairo_surface_acquire_source_image (extra->target, image_out, &extra->extra);
+    if (unlikely (status)) {
+       cairo_surface_destroy (extra->target);
+       free (extra);
+    }
 
-    return _cairo_surface_acquire_source_image (surface->target, image_out, extra_out);
+    *extra_out = extra;
+    return status;
 }
 
 static void
 _cairo_surface_snapshot_release_source_image (void                   *abstract_surface,
                                              cairo_image_surface_t  *image,
-                                             void                   *extra)
+                                             void                   *_extra)
 {
-    cairo_surface_snapshot_t *surface = abstract_surface;
+    struct snapshot_extra *extra = _extra;
 
-    _cairo_surface_release_source_image (surface->target, image, extra);
+    _cairo_surface_release_source_image (extra->target, image, extra->extra);
+    cairo_surface_destroy (extra->target);
+    free (extra);
 }
 
 static cairo_bool_t
@@ -93,8 +132,14 @@ _cairo_surface_snapshot_get_extents (void                  *abstract_surface,
                                     cairo_rectangle_int_t *extents)
 {
     cairo_surface_snapshot_t *surface = abstract_surface;
+    cairo_surface_t *target;
+    cairo_bool_t bounded;
+
+    target = _cairo_surface_snapshot_get_target (&surface->base);
+    bounded = _cairo_surface_get_extents (target, extents);
+    cairo_surface_destroy (target);
 
-    return _cairo_surface_get_extents (surface->target, extents);
+    return bounded;
 }
 
 static const cairo_surface_backend_t _cairo_surface_snapshot_backend = {
@@ -107,6 +152,7 @@ static const cairo_surface_backend_t _cairo_surface_snapshot_backend = {
     NULL, /* map to image */
     NULL, /* unmap image  */
 
+    _cairo_surface_snapshot_source,
     _cairo_surface_snapshot_acquire_source_image,
     _cairo_surface_snapshot_release_source_image,
     NULL, /* snapshot */
@@ -129,12 +175,17 @@ _cairo_surface_snapshot_copy_on_write (cairo_surface_t *surface)
     void *extra;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s: target=%d\n",
+           __FUNCTION__, snapshot->target->unique_id));
+
     /* We need to make an image copy of the original surface since the
      * snapshot may exceed the lifetime of the original device, i.e.
      * when we later need to use the snapshot the data may have already
      * been lost.
      */
 
+    CAIRO_MUTEX_LOCK (snapshot->mutex);
+
     if (snapshot->target->backend->snapshot != NULL) {
        clone = snapshot->target->backend->snapshot (snapshot->target);
        if (clone != NULL) {
@@ -151,7 +202,7 @@ _cairo_surface_snapshot_copy_on_write (cairo_surface_t *surface)
     if (unlikely (status)) {
        snapshot->target = _cairo_surface_create_in_error (status);
        status = _cairo_surface_set_error (surface, status);
-       return;
+       goto unlock;
     }
     clone = image->base.backend->snapshot (&image->base);
     _cairo_surface_release_source_image (snapshot->target, image, extra);
@@ -160,10 +211,12 @@ done:
     status = _cairo_surface_set_error (surface, clone->status);
     snapshot->target = snapshot->clone = clone;
     snapshot->base.type = clone->type;
+unlock:
+    CAIRO_MUTEX_UNLOCK (snapshot->mutex);
 }
 
 /**
- * _cairo_surface_snapshot
+ * _cairo_surface_snapshot:
  * @surface: a #cairo_surface_t
  *
  * Make an immutable reference to @surface. It is an error to call a
@@ -187,6 +240,8 @@ _cairo_surface_snapshot (cairo_surface_t *surface)
     cairo_surface_snapshot_t *snapshot;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s: target=%d\n", __FUNCTION__, surface->unique_id));
+
     if (unlikely (surface->status))
        return _cairo_surface_create_in_error (surface->status);
 
@@ -214,6 +269,7 @@ _cairo_surface_snapshot (cairo_surface_t *surface)
                         surface->content);
     snapshot->base.type = surface->type;
 
+    CAIRO_MUTEX_INIT (snapshot->mutex);
     snapshot->target = surface;
     snapshot->clone = NULL;
 
diff --git a/src/cairo-surface-subsurface-inline.h b/src/cairo-surface-subsurface-inline.h
new file mode 100644 (file)
index 0000000..0cd09e6
--- /dev/null
@@ -0,0 +1,72 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2009 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Intel Corporation.
+ *
+ * Contributor(s):
+ *      Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#ifndef CAIRO_SURFACE_SUBSURFACE_INLINE_H
+#define CAIRO_SURFACE_SUBSURFACE_INLINE_H
+
+#include "cairo-surface-subsurface-private.h"
+
+static inline cairo_surface_t *
+_cairo_surface_subsurface_get_target (cairo_surface_t *surface)
+{
+    return ((cairo_surface_subsurface_t *) surface)->target;
+}
+
+static inline void
+_cairo_surface_subsurface_offset (cairo_surface_t *surface,
+                                 int *x, int *y)
+{
+    cairo_surface_subsurface_t *ss = (cairo_surface_subsurface_t *) surface;
+    *x += ss->extents.x;
+    *y += ss->extents.y;
+}
+
+static inline cairo_surface_t *
+_cairo_surface_subsurface_get_target_with_offset (cairo_surface_t *surface,
+                                                 int *x, int *y)
+{
+    cairo_surface_subsurface_t *ss = (cairo_surface_subsurface_t *) surface;
+    *x += ss->extents.x;
+    *y += ss->extents.y;
+    return ss->target;
+}
+
+static inline cairo_bool_t
+_cairo_surface_is_subsurface (cairo_surface_t *surface)
+{
+    return surface->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE;
+}
+
+#endif /* CAIRO_SURFACE_SUBSURFACE_INLINE_H */
index 6a43c8f..89c5cc0 100644 (file)
@@ -45,37 +45,11 @@ struct _cairo_surface_subsurface {
     cairo_rectangle_int_t extents;
 
     cairo_surface_t *target;
+    cairo_surface_t *snapshot;
 };
 
-static inline cairo_surface_t *
-_cairo_surface_subsurface_get_target (cairo_surface_t *surface)
-{
-    return ((cairo_surface_subsurface_t *) surface)->target;
-}
-
-static inline void
-_cairo_surface_subsurface_offset (cairo_surface_t *surface,
-                                 int *x, int *y)
-{
-    cairo_surface_subsurface_t *ss = (cairo_surface_subsurface_t *) surface;
-    *x += ss->extents.x;
-    *y += ss->extents.y;
-}
-
-static inline cairo_surface_t *
-_cairo_surface_subsurface_get_target_with_offset (cairo_surface_t *surface,
-                                                 int *x, int *y)
-{
-    cairo_surface_subsurface_t *ss = (cairo_surface_subsurface_t *) surface;
-    *x += ss->extents.x;
-    *y += ss->extents.y;
-    return ss->target;
-}
-
-static inline cairo_bool_t
-_cairo_surface_is_subsurface (cairo_surface_t *surface)
-{
-    return surface->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE;
-}
+cairo_private void
+_cairo_surface_subsurface_set_snapshot (cairo_surface_t *surface,
+                                       cairo_surface_t *snapshot);
 
 #endif /* CAIRO_SURFACE_SUBSURFACE_PRIVATE_H */
index 9ed483c..2bae01d 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "cairoint.h"
 
+#include "cairo-clip-inline.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
 #include "cairo-recording-surface-private.h"
@@ -50,6 +51,7 @@ _cairo_surface_subsurface_finish (void *abstract_surface)
     cairo_surface_subsurface_t *surface = abstract_surface;
 
     cairo_surface_destroy (surface->target);
+    cairo_surface_destroy (surface->snapshot);
 
     return CAIRO_STATUS_SUCCESS;
 }
@@ -60,6 +62,10 @@ _cairo_surface_subsurface_create_similar (void *other,
                                          int width, int height)
 {
     cairo_surface_subsurface_t *surface = other;
+
+    if (surface->target->backend->create_similar == NULL)
+       return NULL;
+
     return surface->target->backend->create_similar (surface->target, content, width, height);
 }
 
@@ -69,6 +75,10 @@ _cairo_surface_subsurface_create_similar_image (void *other,
                                                int width, int height)
 {
     cairo_surface_subsurface_t *surface = other;
+
+    if (surface->target->backend->create_similar_image == NULL)
+       return NULL;
+
     return surface->target->backend->create_similar_image (surface->target,
                                                           format,
                                                           width, height);
@@ -284,138 +294,53 @@ _cairo_surface_subsurface_get_font_options (void *abstract_surface,
        surface->target->backend->get_font_options (surface->target, options);
 }
 
-struct extra {
-    cairo_image_surface_t *image;
-    void *image_extra;
-};
+static cairo_surface_t *
+_cairo_surface_subsurface_source (void *abstract_surface,
+                                 cairo_rectangle_int_t *extents)
+{
+    cairo_surface_subsurface_t *surface = abstract_surface;
+    cairo_surface_t *source;
+
+    source = _cairo_surface_get_source (surface->target, extents);
+    if (extents)
+       *extents = surface->extents;
+
+    return source;
+}
 
 static cairo_status_t
 _cairo_surface_subsurface_acquire_source_image (void                    *abstract_surface,
                                                cairo_image_surface_t  **image_out,
                                                void                   **extra_out)
 {
-    cairo_rectangle_int_t target_extents;
     cairo_surface_subsurface_t *surface = abstract_surface;
-    cairo_image_surface_t *image;
+    cairo_surface_pattern_t pattern;
+    cairo_surface_t *image;
     cairo_status_t status;
-    struct extra *extra;
-    uint8_t *data;
-    cairo_bool_t ret;
-
-    if (surface->target->type == CAIRO_SURFACE_TYPE_RECORDING) {
-       cairo_surface_t *meta, *snapshot;
-
-       snapshot = _cairo_surface_has_snapshot (&surface->base,
-                                               &_cairo_image_surface_backend);
-       if (snapshot != NULL) {
-           *image_out = (cairo_image_surface_t *) cairo_surface_reference (snapshot);
-           *extra_out = NULL;
-           return CAIRO_STATUS_SUCCESS;
-       }
 
-       meta = surface->target;
-       if (_cairo_surface_is_snapshot (meta))
-           meta = _cairo_surface_snapshot_get_target (meta);
-
-       if (! _cairo_surface_has_snapshot (meta, &_cairo_image_surface_backend)) {
-           cairo_surface_pattern_t pattern;
-
-           image = (cairo_image_surface_t *)
-               _cairo_image_surface_create_with_content (meta->content,
-                                                         surface->extents.width,
-                                                         surface->extents.height);
-           if (unlikely (image->base.status))
-               return image->base.status;
-
-           _cairo_pattern_init_for_surface (&pattern, &image->base);
-           cairo_matrix_init_translate (&pattern.base.matrix,
-                                        -surface->extents.x, -surface->extents.y);
-           pattern.base.filter = CAIRO_FILTER_NEAREST;
-           status = _cairo_surface_paint (&image->base,
-                                          CAIRO_OPERATOR_SOURCE,
-                                          &pattern.base, NULL);
-           _cairo_pattern_fini (&pattern.base);
-           if (unlikely (status)) {
-               cairo_surface_destroy (&image->base);
-               return status;
-           }
-
-           _cairo_surface_attach_snapshot (&surface->base, &image->base, NULL);
-
-           *image_out = image;
-           *extra_out = NULL;
-           return CAIRO_STATUS_SUCCESS;
-       }
-    }
+    image = _cairo_image_surface_create_with_content (surface->base.content,
+                                                     surface->extents.width,
+                                                     surface->extents.height);
+    if (unlikely (image->status))
+       return image->status;
 
-    extra = malloc (sizeof (struct extra));
-    if (unlikely (extra == NULL))
-       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-
-    status = _cairo_surface_acquire_source_image (surface->target, &extra->image, &extra->image_extra);
-    if (unlikely (status))
-       goto CLEANUP;
-
-    ret = _cairo_surface_get_extents (&extra->image->base, &target_extents);
-    assert (ret);
-
-    /* only copy if we need to perform sub-byte manipulation */
-    if (PIXMAN_FORMAT_BPP (extra->image->pixman_format) >= 8 &&
-       target_extents.x <= surface->extents.x &&
-       target_extents.y <= surface->extents.y &&
-       surface->extents.x + surface->extents.width <= target_extents.x + target_extents.width &&
-       surface->extents.y + surface->extents.height <= target_extents.y + target_extents.height) {
-
-       assert ((PIXMAN_FORMAT_BPP (extra->image->pixman_format) % 8) == 0);
-
-       data = extra->image->data + surface->extents.y * extra->image->stride;
-       data += PIXMAN_FORMAT_BPP (extra->image->pixman_format) / 8 * surface->extents.x;
-
-       image = (cairo_image_surface_t *)
-           _cairo_image_surface_create_with_pixman_format (data,
-                                                           extra->image->pixman_format,
-                                                           surface->extents.width,
-                                                           surface->extents.height,
-                                                           extra->image->stride);
-       if (unlikely ((status = image->base.status)))
-           goto CLEANUP_IMAGE;
-
-        image->base.is_clear = FALSE;
-    } else {
-       cairo_surface_pattern_t pattern;
-
-       image = (cairo_image_surface_t *)
-           _cairo_image_surface_create_with_pixman_format (NULL,
-                                                           extra->image->pixman_format,
-                                                           surface->extents.width,
-                                                           surface->extents.height,
-                                                           0);
-       if (unlikely ((status = image->base.status)))
-           goto CLEANUP_IMAGE;
-
-       _cairo_pattern_init_for_surface (&pattern, &image->base);
-       cairo_matrix_init_translate (&pattern.base.matrix,
-                                    -surface->extents.x, -surface->extents.y);
-       pattern.base.filter = CAIRO_FILTER_NEAREST;
-       status = _cairo_surface_paint (&image->base,
-                                      CAIRO_OPERATOR_SOURCE,
-                                      &pattern.base, NULL);
-       _cairo_pattern_fini (&pattern.base);
-       if (unlikely (status)) {
-           cairo_surface_destroy (&image->base);
-           return status;
-       }
+    _cairo_pattern_init_for_surface (&pattern, surface->target);
+    cairo_matrix_init_translate (&pattern.base.matrix,
+                                surface->extents.x,
+                                surface->extents.y);
+    pattern.base.filter = CAIRO_FILTER_NEAREST;
+    status = _cairo_surface_paint (image,
+                                  CAIRO_OPERATOR_SOURCE,
+                                  &pattern.base, NULL);
+    _cairo_pattern_fini (&pattern.base);
+    if (unlikely (status)) {
+       cairo_surface_destroy (image);
+       return status;
     }
 
-    *image_out = image;
-    *extra_out = extra;
+    *image_out = (cairo_image_surface_t *)image;
+    *extra_out = NULL;
     return CAIRO_STATUS_SUCCESS;
-
-CLEANUP_IMAGE:
-    _cairo_surface_release_source_image (surface->target, extra->image, extra->image_extra);
-CLEANUP:
-    free (extra);
-    return status;
 }
 
 static void
@@ -423,15 +348,6 @@ _cairo_surface_subsurface_release_source_image (void                   *abstract
                                                cairo_image_surface_t  *image,
                                                void                   *abstract_extra)
 {
-    cairo_surface_subsurface_t *surface = abstract_surface;
-
-    if (abstract_extra != NULL) {
-       struct extra *extra = abstract_extra;
-
-       _cairo_surface_release_source_image (surface->target, extra->image, extra->image_extra);
-       free (extra);
-    }
-
     cairo_surface_destroy (&image->base);
 }
 
@@ -443,6 +359,8 @@ _cairo_surface_subsurface_snapshot (void *abstract_surface)
     cairo_surface_t *clone;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s: target=%d\n", __FUNCTION__, surface->target->unique_id));
+
     clone = _cairo_surface_create_similar_scratch (surface->target,
                                                   surface->target->content,
                                                   surface->extents.width,
@@ -485,6 +403,7 @@ static const cairo_surface_backend_t _cairo_surface_subsurface_backend = {
     _cairo_surface_subsurface_map_to_image,
     _cairo_surface_subsurface_unmap_image,
 
+    _cairo_surface_subsurface_source,
     _cairo_surface_subsurface_acquire_source_image,
     _cairo_surface_subsurface_release_source_image,
     _cairo_surface_subsurface_snapshot,
@@ -544,6 +463,9 @@ cairo_surface_create_for_rectangle (cairo_surface_t *target,
 {
     cairo_surface_subsurface_t *surface;
 
+    if (unlikely (width < 0 || height < 0))
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
+
     if (unlikely (target->status))
        return _cairo_surface_create_in_error (target->status);
     if (unlikely (target->finished))
@@ -567,6 +489,8 @@ cairo_surface_create_for_rectangle (cairo_surface_t *target,
     surface->extents.y = ceil (y);
     surface->extents.width = floor (x + width) - surface->extents.x;
     surface->extents.height = floor (y + height) - surface->extents.y;
+    if ((surface->extents.width | surface->extents.height) < 0)
+       surface->extents.width = surface->extents.height = 0;
 
     if (target->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
        /* Maintain subsurfaces as 1-depth */
@@ -577,6 +501,9 @@ cairo_surface_create_for_rectangle (cairo_surface_t *target,
     }
 
     surface->target = cairo_surface_reference (target);
+    surface->base.type = surface->target->type;
+
+    surface->snapshot = NULL;
 
     return &surface->base;
 }
@@ -608,8 +535,47 @@ _cairo_surface_create_for_rectangle_int (cairo_surface_t *target,
     surface->extents = *extents;
     surface->extents.x += target->device_transform.x0;
     surface->extents.y += target->device_transform.y0;
+
     surface->target = cairo_surface_reference (target);
+    surface->base.type = surface->target->type;
+
+    surface->snapshot = NULL;
 
     return &surface->base;
 }
 /* XXX observe mark-dirty */
+
+static void
+_cairo_surface_subsurface_detach_snapshot (cairo_surface_t *surface)
+{
+    cairo_surface_subsurface_t *ss = (cairo_surface_subsurface_t *) surface;
+
+    TRACE ((stderr, "%s: target=%d\n", __FUNCTION__, ss->target->unique_id));
+
+    cairo_surface_destroy (ss->snapshot);
+    ss->snapshot = NULL;
+}
+
+void
+_cairo_surface_subsurface_set_snapshot (cairo_surface_t *surface,
+                                       cairo_surface_t *snapshot)
+{
+    cairo_surface_subsurface_t *ss = (cairo_surface_subsurface_t *) surface;
+
+    TRACE ((stderr, "%s: target=%d, snapshot=%d\n", __FUNCTION__,
+           ss->target->unique_id, snapshot->unique_id));
+
+    /* FIXME: attaching the subsurface as a snapshot to its target creates
+     * a reference cycle.  Let's make this call as a no-op until that bug
+     * is fixed.
+     */
+    return;
+
+    if (ss->snapshot)
+       _cairo_surface_detach_snapshot (ss->snapshot);
+
+    ss->snapshot = cairo_surface_reference (snapshot);
+
+    _cairo_surface_attach_snapshot (ss->target, &ss->base,
+                                   _cairo_surface_subsurface_detach_snapshot);
+}
index 00d9aa3..578e8e2 100644 (file)
@@ -37,6 +37,7 @@
 
 #include "cairoint.h"
 
+#include "cairo-clip-inline.h"
 #include "cairo-error-private.h"
 #include "cairo-pattern-private.h"
 #include "cairo-surface-wrapper-private.h"
@@ -122,18 +123,10 @@ _cairo_surface_wrapper_get_clip (cairo_surface_wrapper_t *wrapper,
     copy = _cairo_clip_copy (clip);
     if (wrapper->has_extents) {
        copy = _cairo_clip_intersect_rectangle (copy, &wrapper->extents);
-       if (wrapper->extents.x | wrapper->extents.y)
-           copy = _cairo_clip_translate (copy,
-                                         -wrapper->extents.x,
-                                         -wrapper->extents.y);
     }
     copy = _cairo_clip_transform (copy, &wrapper->transform);
-    if (! _cairo_matrix_is_identity (&wrapper->target->device_transform)) {
-       /* XXX */
-       copy = _cairo_clip_translate (copy,
-                                     wrapper->target->device_transform.x0,
-                                     wrapper->target->device_transform.y0);
-    }
+    if (! _cairo_matrix_is_identity (&wrapper->target->device_transform))
+       copy = _cairo_clip_transform (copy, &wrapper->target->device_transform);
     if (wrapper->clip)
        copy = _cairo_clip_intersect_clip (copy, wrapper->clip);
 
@@ -424,7 +417,9 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper,
     cairo_clip_t *dev_clip;
     cairo_glyph_t stack_glyphs [CAIRO_STACK_ARRAY_LENGTH(cairo_glyph_t)];
     cairo_glyph_t *dev_glyphs = stack_glyphs;
+    cairo_scaled_font_t *dev_scaled_font = scaled_font;
     cairo_pattern_union_t source_copy;
+    cairo_font_options_t options;
 
     if (unlikely (wrapper->target->status))
        return wrapper->target->status;
@@ -433,12 +428,27 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper,
     if (_cairo_clip_is_all_clipped (dev_clip))
        return CAIRO_INT_STATUS_NOTHING_TO_DO;
 
+    cairo_surface_get_font_options (wrapper->target, &options);
+    cairo_font_options_merge (&options, &scaled_font->options);
+
     if (wrapper->needs_transform) {
        cairo_matrix_t m;
        int i;
 
        _cairo_surface_wrapper_get_transform (wrapper, &m);
 
+       if (! _cairo_matrix_is_translation (&wrapper->transform)) {
+           cairo_matrix_t ctm;
+
+           /* XXX No device-transform? A bug in the tangle of layers? */
+           _cairo_matrix_multiply (&ctm,
+                                   &wrapper->transform,
+                                   &scaled_font->ctm);
+           dev_scaled_font = cairo_scaled_font_create (scaled_font->font_face,
+                                                       &scaled_font->font_matrix,
+                                                       &ctm, &options);
+       }
+
        if (num_glyphs > ARRAY_LENGTH (stack_glyphs)) {
            dev_glyphs = _cairo_malloc_ab (num_glyphs, sizeof (cairo_glyph_t));
            if (unlikely (dev_glyphs == NULL)) {
@@ -460,6 +470,13 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper,
        _copy_transformed_pattern (&source_copy.base, source, &m);
        source = &source_copy.base;
     } else {
+       if (! cairo_font_options_equal (&options, &scaled_font->options)) {
+           dev_scaled_font = cairo_scaled_font_create (scaled_font->font_face,
+                                                       &scaled_font->font_matrix,
+                                                       &scaled_font->ctm,
+                                                       &options);
+       }
+
        /* show_text_glyphs is special because _cairo_surface_show_text_glyphs is allowed
         * to modify the glyph array that's passed in.  We must always
         * copy the array before handing it to the backend.
@@ -480,12 +497,14 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper,
                                              dev_glyphs, num_glyphs,
                                              clusters, num_clusters,
                                              cluster_flags,
-                                             scaled_font,
+                                             dev_scaled_font,
                                              dev_clip);
  FINISH:
     _cairo_clip_destroy (dev_clip);
     if (dev_glyphs != stack_glyphs)
        free (dev_glyphs);
+    if (dev_scaled_font != scaled_font)
+       cairo_scaled_font_destroy (dev_scaled_font);
     return status;
 }
 
index c026a3d..35ac391 100644 (file)
 #include "cairoint.h"
 
 #include "cairo-array-private.h"
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
+#include "cairo-damage-private.h"
 #include "cairo-device-private.h"
 #include "cairo-error-private.h"
-#include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
+#include "cairo-image-surface-inline.h"
 #include "cairo-recording-surface-private.h"
 #include "cairo-region-private.h"
 #include "cairo-tee-surface-private.h"
@@ -92,7 +95,7 @@
  * Note that for other surface types it might be necessary to acquire the
  * surface's device first. See cairo_device_acquire() for a discussion of
  * devices.
- */
+ **/
 
 #define DEFINE_NIL_SURFACE(status, name)                       \
 const cairo_surface_t name = {                                 \
@@ -104,6 +107,8 @@ const cairo_surface_t name = {                                      \
     status,                            /* status */            \
     0,                                 /* unique id */         \
     0,                                 /* serial */            \
+    NULL,                              /* damage */            \
+    FALSE,                             /* _finishing */        \
     FALSE,                             /* finished */          \
     TRUE,                              /* is_clear */          \
     FALSE,                             /* has_font_options */  \
@@ -150,6 +155,9 @@ static DEFINE_NIL_SURFACE(CAIRO_STATUS_DEVICE_ERROR, _cairo_surface_nil_device_e
 static DEFINE_NIL_SURFACE(CAIRO_INT_STATUS_UNSUPPORTED, _cairo_surface_nil_unsupported);
 static DEFINE_NIL_SURFACE(CAIRO_INT_STATUS_NOTHING_TO_DO, _cairo_surface_nil_nothing_to_do);
 
+static void _cairo_surface_finish_snapshots (cairo_surface_t *surface);
+static void _cairo_surface_finish (cairo_surface_t *surface);
+
 /**
  * _cairo_surface_set_error:
  * @surface: a surface
@@ -243,6 +251,8 @@ slim_hidden_def(cairo_surface_get_content);
  * %CAIRO_STATUS_NO_MEMORY, %CAIRO_STATUS_READ_ERROR,
  * %CAIRO_STATUS_INVALID_CONTENT, %CAIRO_STATUS_INVALID_FORMAT, or
  * %CAIRO_STATUS_INVALID_VISUAL.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_surface_status (cairo_surface_t *surface)
@@ -378,14 +388,16 @@ _cairo_surface_has_snapshot (cairo_surface_t *surface,
     return NULL;
 }
 
-static void
+void
 _cairo_surface_begin_modification (cairo_surface_t *surface)
 {
     assert (surface->status == CAIRO_STATUS_SUCCESS);
     assert (! surface->finished);
-    assert (surface->snapshot_of == NULL);
 
     _cairo_surface_detach_snapshots (surface);
+    if (surface->snapshot_of != NULL)
+       _cairo_surface_detach_snapshot (surface);
+
     _cairo_surface_detach_mime_data (surface);
 }
 
@@ -408,6 +420,7 @@ _cairo_surface_init (cairo_surface_t                        *surface,
     surface->finished = FALSE;
     surface->is_clear = FALSE;
     surface->serial = 0;
+    surface->damage = NULL;
     surface->owns_device = (device != NULL);
 
     _cairo_user_data_array_init (&surface->user_data);
@@ -499,6 +512,8 @@ _cairo_surface_create_similar_scratch (cairo_surface_t *other,
  * This function always returns a valid pointer, but it will return a
  * pointer to a "nil" surface if @other is already in an error state
  * or any other error occurs.
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_surface_create_similar (cairo_surface_t  *other,
@@ -629,10 +644,7 @@ cairo_surface_map_to_image (cairo_surface_t  *surface,
        /* If this surface is bounded, we can't map parts
         * that are outside of it. */
        if (likely (surface->backend->get_extents (surface, &surface_extents))) {
-           if (unlikely (extents->x < surface_extents.x ||
-                         extents->y < surface_extents.y ||
-                         extents->x + extents->width > surface_extents.x + surface_extents.width ||
-                         extents->y + extents->height > surface_extents.y + surface_extents.height))
+           if (unlikely (! _cairo_rectangle_contains_rectangle (&surface_extents, extents)))
                return _cairo_surface_create_in_error (CAIRO_STATUS_INVALID_SIZE);
        }
     }
@@ -649,7 +661,7 @@ cairo_surface_map_to_image (cairo_surface_t  *surface,
                                                    _cairo_format_from_content (surface->content),
                                                    extents->width,
                                                    extents->height);
-       cairo_surface_set_device_offset (image, -extents->y, -extents->y);
+       cairo_surface_set_device_offset (image, -extents->x, -extents->y);
 
        _cairo_pattern_init_for_surface (&pattern, surface);
        pattern.base.filter = CAIRO_FILTER_NEAREST;
@@ -802,6 +814,8 @@ _cairo_surface_create_similar_solid (cairo_surface_t         *other,
  * cairo_surface_get_reference_count().
  *
  * Return value: the referenced #cairo_surface_t.
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_surface_reference (cairo_surface_t *surface)
@@ -825,6 +839,8 @@ slim_hidden_def (cairo_surface_reference);
  * Decreases the reference count on @surface by one. If the result is
  * zero, then @surface and all associated resources are freed.  See
  * cairo_surface_reference().
+ *
+ * Since: 1.0
  **/
 void
 cairo_surface_destroy (cairo_surface_t *surface)
@@ -840,11 +856,21 @@ cairo_surface_destroy (cairo_surface_t *surface)
 
     assert (surface->snapshot_of == NULL);
 
-    if (! surface->finished)
-       cairo_surface_finish (surface);
+    if (! surface->finished) {
+       _cairo_surface_finish_snapshots (surface);
+       /* We may have been referenced by a snapshot prior to have
+        * detaching it with the copy-on-write.
+        */
+       if (CAIRO_REFERENCE_COUNT_GET_VALUE (&surface->ref_count))
+           return;
+
+       _cairo_surface_finish (surface);
+       /* paranoid check that nobody took a reference whilst finishing */
+       assert (! CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&surface->ref_count));
+    }
 
-    /* paranoid check that nobody took a reference whilst finishing */
-    assert (! CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&surface->ref_count));
+    if (surface->damage)
+       _cairo_damage_destroy (surface->damage);
 
     _cairo_user_data_array_fini (&surface->user_data);
     _cairo_user_data_array_fini (&surface->mime_data);
@@ -880,6 +906,37 @@ cairo_surface_get_reference_count (cairo_surface_t *surface)
     return CAIRO_REFERENCE_COUNT_GET_VALUE (&surface->ref_count);
 }
 
+static void
+_cairo_surface_finish_snapshots (cairo_surface_t *surface)
+{
+    cairo_surface_flush (surface);
+
+    /* update the snapshots *before* we declare the surface as finished */
+    surface->_finishing = TRUE;
+
+    _cairo_surface_detach_snapshots (surface);
+    if (surface->snapshot_of != NULL)
+       _cairo_surface_detach_snapshot (surface);
+}
+
+static void
+_cairo_surface_finish (cairo_surface_t *surface)
+{
+    cairo_status_t status;
+
+    surface->finished = TRUE;
+
+    /* call finish even if in error mode */
+    if (surface->backend->finish) {
+       status = surface->backend->finish (surface);
+       if (unlikely (status))
+           _cairo_surface_set_error (surface, status);
+    }
+
+    assert (surface->snapshot_of == NULL);
+    assert (!_cairo_surface_has_snapshots (surface));
+}
+
 /**
  * cairo_surface_finish:
  * @surface: the #cairo_surface_t to finish
@@ -898,12 +955,12 @@ cairo_surface_get_reference_count (cairo_surface_t *surface)
  * reference count to zero, cairo will call cairo_surface_finish() if
  * it hasn't been called already, before freeing the resources
  * associated with the surface.
+ *
+ * Since: 1.0
  **/
 void
 cairo_surface_finish (cairo_surface_t *surface)
 {
-    cairo_status_t status;
-
     if (surface == NULL)
        return;
 
@@ -913,24 +970,14 @@ cairo_surface_finish (cairo_surface_t *surface)
     if (surface->finished)
        return;
 
-    cairo_surface_flush (surface);
-
-    /* update the snapshots *before* we declare the surface as finished */
-    _cairo_surface_detach_snapshots (surface);
-    if (surface->snapshot_of != NULL)
-       _cairo_surface_detach_snapshot (surface);
-
-    surface->finished = TRUE;
+    /* We have to be careful when decoupling potential reference cycles */
+    cairo_surface_reference (surface);
 
-    /* call finish even if in error mode */
-    if (surface->backend->finish) {
-       status = surface->backend->finish (surface);
-       if (unlikely (status))
-           _cairo_surface_set_error (surface, status);
-    }
+    _cairo_surface_finish_snapshots (surface);
+    /* XXX need to block and wait for snapshot references */
+    _cairo_surface_finish (surface);
 
-    assert (surface->snapshot_of == NULL);
-    assert (!_cairo_surface_has_snapshots (surface));
+    cairo_surface_destroy (surface);
 }
 slim_hidden_def (cairo_surface_finish);
 
@@ -966,6 +1013,8 @@ _cairo_surface_release_device_reference (cairo_surface_t *surface)
  * function returns %NULL.
  *
  * Return value: the user data previously attached or %NULL.
+ *
+ * Since: 1.0
  **/
 void *
 cairo_surface_get_user_data (cairo_surface_t            *surface,
@@ -989,6 +1038,8 @@ cairo_surface_get_user_data (cairo_surface_t                *surface,
  *
  * Return value: %CAIRO_STATUS_SUCCESS or %CAIRO_STATUS_NO_MEMORY if a
  * slot could not be allocated for the user data.
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_surface_set_user_data (cairo_surface_t            *surface,
@@ -1068,40 +1119,40 @@ _cairo_mime_data_destroy (void *ptr)
  *
  * The Joint Photographic Experts Group (JPEG) 2000 image coding standard (ISO/IEC 15444-1).
  *
- * @Since: 1.10
- */
+ * Since: 1.10
+ **/
 
 /**
  * CAIRO_MIME_TYPE_JPEG:
  *
  * The Joint Photographic Experts Group (JPEG) image coding standard (ISO/IEC 10918-1).
  *
- * @Since: 1.10
- */
+ * Since: 1.10
+ **/
 
 /**
  * CAIRO_MIME_TYPE_PNG:
  *
  * The Portable Network Graphics image file format (ISO/IEC 15948).
  *
- * @Since: 1.10
- */
+ * Since: 1.10
+ **/
 
 /**
  * CAIRO_MIME_TYPE_URI:
  *
  * URI for an image file (unofficial MIME type).
  *
- * @Since: 1.10
- */
+ * Since: 1.10
+ **/
 
 /**
  * CAIRO_MIME_TYPE_UNIQUE_ID:
  *
  * Unique identifier for a surface (cairo specific MIME type).
  *
- * @Since: 1.12
- */
+ * Since: 1.12
+ **/
 
 /**
  * cairo_surface_set_mime_data:
@@ -1132,10 +1183,10 @@ _cairo_mime_data_destroy (void *ptr)
  * discarded if you draw on the surface afterwards. Use this function
  * with care.
  *
- * Since: 1.10
- *
  * Return value: %CAIRO_STATUS_SUCCESS or %CAIRO_STATUS_NO_MEMORY if a
  * slot could not be allocated for the user data.
+ *
+ * Since: 1.10
  **/
 cairo_status_t
 cairo_surface_set_mime_data (cairo_surface_t           *surface,
@@ -1185,6 +1236,39 @@ cairo_surface_set_mime_data (cairo_surface_t             *surface,
 }
 slim_hidden_def (cairo_surface_set_mime_data);
 
+/**
+ * cairo_surface_supports_mime_type:
+ * @surface: a #cairo_surface_t
+ * @mime_type: the mime type
+ *
+ * Return whether @surface supports @mime_type.
+ *
+ * Return value: %TRUE if @surface supports
+ *               @mime_type, %FALSE otherwise
+ *
+ * Since: 1.12
+ **/
+cairo_bool_t
+cairo_surface_supports_mime_type (cairo_surface_t              *surface,
+                                 const char                    *mime_type)
+{
+    const char **types;
+
+    if (surface->backend->get_supported_mime_types) {
+       types = surface->backend->get_supported_mime_types (surface);
+       if (types) {
+           while (*types) {
+               if (strcmp (*types, mime_type) == 0)
+                   return TRUE;
+               types++;
+           }
+       }
+    }
+
+    return FALSE;
+}
+slim_hidden_def (cairo_surface_supports_mime_type);
+
 static void
 _cairo_mime_data_reference (const void *key, void *elt, void *closure)
 {
@@ -1266,6 +1350,8 @@ _cairo_surface_set_font_options (cairo_surface_t       *surface,
  * for rendering on them, print surfaces to disable hinting of
  * metrics and so forth. The result can then be used with
  * cairo_scaled_font_create().
+ *
+ * Since: 1.0
  **/
 void
 cairo_surface_get_font_options (cairo_surface_t       *surface,
@@ -1303,6 +1389,8 @@ slim_hidden_def (cairo_surface_get_font_options);
  * drawing on the surface with cairo to drawing on it directly
  * with native APIs. If the surface doesn't support direct access,
  * then this function does nothing.
+ *
+ * Since: 1.0
  **/
 void
 cairo_surface_flush (cairo_surface_t *surface)
@@ -1334,7 +1422,9 @@ slim_hidden_def (cairo_surface_flush);
  * Tells cairo that drawing has been done to surface using means other
  * than cairo, and that cairo should reread any cached areas. Note
  * that you must call cairo_surface_flush() before doing such drawing.
- */
+ *
+ * Since: 1.0
+ **/
 void
 cairo_surface_mark_dirty (cairo_surface_t *surface)
 {
@@ -1357,7 +1447,9 @@ slim_hidden_def (cairo_surface_mark_dirty);
  * Any cached clip set on the surface will be reset by this function,
  * to make sure that future cairo calls have the clip set that they
  * expect.
- */
+ *
+ * Since: 1.0
+ **/
 void
 cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
                                    int              x,
@@ -1386,6 +1478,17 @@ cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
     surface->is_clear = FALSE;
     surface->serial++;
 
+    if (surface->damage) {
+       cairo_box_t box;
+
+       box.p1.x = x;
+       box.p1.y = y;
+       box.p2.x = x + width;
+       box.p2.y = y + height;
+
+       surface->damage = _cairo_damage_add_box (surface->damage, &box);
+    }
+
     if (surface->backend->mark_dirty_rectangle != NULL) {
        /* XXX: FRAGILE: We're ignoring the scaling component of
         * device_transform here. I don't know what the right thing to
@@ -1469,6 +1572,8 @@ _cairo_surface_set_device_scale (cairo_surface_t *surface,
  *
  * Note that the offset affects drawing to the surface as well as
  * using the surface in a source pattern.
+ *
+ * Since: 1.0
  **/
 void
 cairo_surface_set_device_offset (cairo_surface_t *surface,
@@ -1658,6 +1763,17 @@ _cairo_surface_acquire_source_image (cairo_surface_t         *surface,
     return CAIRO_STATUS_SUCCESS;
 }
 
+cairo_status_t
+_cairo_surface_default_acquire_source_image (void                    *surface,
+                                            cairo_image_surface_t  **image_out,
+                                            void                   **image_extra)
+{
+    *image_out = (cairo_image_surface_t *)
+       cairo_surface_map_to_image (surface, NULL);
+    *image_extra = NULL;
+    return (*image_out)->base.status;
+}
+
 /**
  * _cairo_surface_release_source_image:
  * @surface: a #cairo_surface_t
@@ -1676,6 +1792,32 @@ _cairo_surface_release_source_image (cairo_surface_t        *surface,
        surface->backend->release_source_image (surface, image, image_extra);
 }
 
+void
+_cairo_surface_default_release_source_image (void                   *surface,
+                                            cairo_image_surface_t  *image,
+                                            void                   *image_extra)
+{
+    cairo_surface_unmap_image (surface, &image->base);
+}
+
+
+cairo_surface_t *
+_cairo_surface_get_source (cairo_surface_t *surface,
+                          cairo_rectangle_int_t *extents)
+{
+    assert (surface->backend->source);
+    return surface->backend->source (surface, extents);
+}
+
+cairo_surface_t *
+_cairo_surface_default_source (void *surface,
+                              cairo_rectangle_int_t *extents)
+{
+    if (extents)
+       _cairo_surface_get_extents(surface, extents);
+    return surface;
+}
+
 static cairo_status_t
 _pattern_has_error (const cairo_pattern_t *pattern)
 {
@@ -1727,6 +1869,7 @@ _cairo_surface_paint (cairo_surface_t             *surface,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     if (unlikely (surface->status))
        return surface->status;
 
@@ -1760,6 +1903,7 @@ _cairo_surface_mask (cairo_surface_t              *surface,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     if (unlikely (surface->status))
        return surface->status;
 
@@ -1814,6 +1958,7 @@ _cairo_surface_fill_stroke (cairo_surface_t           *surface,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     if (unlikely (surface->status))
        return surface->status;
 
@@ -1891,6 +2036,7 @@ _cairo_surface_stroke (cairo_surface_t                    *surface,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     if (unlikely (surface->status))
        return surface->status;
 
@@ -1931,6 +2077,7 @@ _cairo_surface_fill (cairo_surface_t              *surface,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     if (unlikely (surface->status))
        return surface->status;
 
@@ -1971,7 +2118,7 @@ _cairo_surface_fill (cairo_surface_t              *surface,
  * namely cairo_copy_page().
  *
  * Since: 1.6
- */
+ **/
 void
 cairo_surface_copy_page (cairo_surface_t *surface)
 {
@@ -2049,7 +2196,7 @@ slim_hidden_def (cairo_surface_show_page);
  *
  * This behavior would have to be changed is we ever exported a public
  * variant of this function.
- */
+ **/
 cairo_bool_t
 _cairo_surface_get_extents (cairo_surface_t         *surface,
                            cairo_rectangle_int_t   *extents)
@@ -2137,6 +2284,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t      *surface,
     cairo_int_status_t status;
     cairo_scaled_font_t *dev_scaled_font = scaled_font;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     if (unlikely (surface->status))
        return surface->status;
 
@@ -2238,7 +2386,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t      *surface,
 }
 
 /**
- * _cairo_surface_set_resolution
+ * _cairo_surface_set_resolution:
  * @surface: the surface
  * @x_res: x resolution, in dpi
  * @y_res: y resolution, in dpi
@@ -2246,7 +2394,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t      *surface,
  * Set the actual surface resolution of @surface to the given x and y DPI.
  * Mainly used for correctly computing the scale factor when fallback
  * rendering needs to take place in the paginated surface.
- */
+ **/
 void
 _cairo_surface_set_resolution (cairo_surface_t *surface,
                               double x_res,
index 6f607d3..824a27d 100644 (file)
@@ -50,7 +50,7 @@
 #include "cairo-error-private.h"
 #include "cairo-image-info-private.h"
 #include "cairo-image-surface-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
 #include "cairo-output-stream-private.h"
 #include "cairo-path-fixed-private.h"
 #include "cairo-paginated-private.h"
  *
  * The SVG surface is used to render cairo graphics to
  * SVG files and is a multi-page vector surface backend.
- */
+ **/
 
 /**
  * CAIRO_HAS_SVG_SURFACE:
  *
  * Defined if the SVG surface backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.2
+ **/
 
 typedef struct cairo_svg_page cairo_svg_page_t;
 
@@ -87,6 +89,14 @@ static const cairo_svg_version_t _cairo_svg_versions[] =
 
 #define CAIRO_SVG_VERSION_LAST ARRAY_LENGTH (_cairo_svg_versions)
 
+static const char *_cairo_svg_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    CAIRO_MIME_TYPE_PNG,
+    CAIRO_MIME_TYPE_URI,
+    NULL
+};
+
 static void
 _cairo_svg_surface_emit_path (cairo_output_stream_t    *output,
                              const cairo_path_fixed_t  *path,
@@ -197,7 +207,7 @@ static const cairo_paginated_surface_backend_t cairo_svg_surface_paginated_backe
  * occurs. You can use cairo_surface_status() to check for this.
  *
  * Since: 1.2
- */
+ **/
 cairo_surface_t *
 cairo_svg_surface_create_for_stream (cairo_write_func_t                 write_func,
                                     void                       *closure,
@@ -2035,6 +2045,7 @@ _cairo_svg_surface_emit_pattern (cairo_svg_surface_t   *surface,
                                                       output, is_stroke, parent_matrix);
 
     case CAIRO_PATTERN_TYPE_MESH:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        ASSERT_NOT_REACHED;
     }
     return _cairo_error (CAIRO_STATUS_PATTERN_TYPE_MISMATCH);
@@ -2576,6 +2587,13 @@ _cairo_svg_surface_get_font_options (void                  *abstract_surface,
     _cairo_font_options_set_round_glyph_positions (options, CAIRO_ROUND_GLYPH_POS_OFF);
 }
 
+
+static const char **
+_cairo_svg_surface_get_supported_mime_types (void         *abstract_surface)
+{
+    return _cairo_svg_supported_mime_types;
+}
+
 static const cairo_surface_backend_t cairo_svg_surface_backend = {
        CAIRO_SURFACE_TYPE_SVG,
        _cairo_svg_surface_finish,
@@ -2587,6 +2605,7 @@ static const cairo_surface_backend_t cairo_svg_surface_backend = {
        NULL, /* map to image */
        NULL, /* unmap image */
 
+       _cairo_surface_default_source,
        NULL, /* acquire_source_image */
        NULL, /* release_source_image */
        NULL, /* snapshot */
@@ -2606,6 +2625,9 @@ static const cairo_surface_backend_t cairo_svg_surface_backend = {
        _cairo_svg_surface_fill,
        _cairo_svg_surface_fill_stroke,
        _cairo_svg_surface_show_glyphs,
+       NULL, /* has_show_text_glyphs */
+       NULL, /* show_text_glyphs */
+       _cairo_svg_surface_get_supported_mime_types,
 };
 
 static cairo_status_t
index 0f739fc..592c645 100644 (file)
@@ -40,12 +40,14 @@ CAIRO_BEGIN_DECLS
 
 /**
  * cairo_svg_version_t:
- * @CAIRO_SVG_VERSION_1_1: The version 1.1 of the SVG specification.
- * @CAIRO_SVG_VERSION_1_2: The version 1.2 of the SVG specification.
+ * @CAIRO_SVG_VERSION_1_1: The version 1.1 of the SVG specification. (Since 1.2)
+ * @CAIRO_SVG_VERSION_1_2: The version 1.2 of the SVG specification. (Since 1.2)
  *
  * #cairo_svg_version_t is used to describe the version number of the SVG
  * specification that a generated SVG file will conform to.
- */
+ *
+ * Since: 1.2
+ **/
 typedef enum _cairo_svg_version {
     CAIRO_SVG_VERSION_1_1,
     CAIRO_SVG_VERSION_1_2
index 4930a0b..294e5f1 100644 (file)
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
 #include "cairo-tee-surface-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
 #include "cairo-surface-wrapper-private.h"
 #include "cairo-array-private.h"
-#include "cairo-image-surface-private.h"
+#include "cairo-image-surface-inline.h"
 
 typedef struct _cairo_tee_surface {
     cairo_surface_t base;
@@ -119,6 +119,14 @@ _cairo_tee_surface_finish (void *abstract_surface)
     return CAIRO_STATUS_SUCCESS;
 }
 
+static cairo_surface_t *
+_cairo_tee_surface_source (void             *abstract_surface,
+                          cairo_rectangle_int_t *extents)
+{
+    cairo_tee_surface_t *surface = abstract_surface;
+    return _cairo_surface_get_source (surface->master.target, extents);
+}
+
 static cairo_status_t
 _cairo_tee_surface_acquire_source_image (void       *abstract_surface,
                                         cairo_image_surface_t **image_out,
@@ -389,6 +397,7 @@ static const cairo_surface_backend_t cairo_tee_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_tee_surface_source,
     _cairo_tee_surface_acquire_source_image,
     _cairo_tee_surface_release_source_image,
     _cairo_tee_surface_snapshot,
index d6ea778..099b50b 100644 (file)
@@ -115,10 +115,8 @@ typedef cairo_status_t glitter_status_t;
 
 /* The input coordinate scale and the rasterisation grid scales. */
 #define GLITTER_INPUT_BITS CAIRO_FIXED_FRAC_BITS
-//#define GRID_X_BITS CAIRO_FIXED_FRAC_BITS
-//#define GRID_Y 15
-#define GRID_X_BITS 2
-#define GRID_Y_BITS 2
+#define GRID_X_BITS CAIRO_FIXED_FRAC_BITS
+#define GRID_Y 15
 
 /* Set glitter up to use a cairo span renderer to do the coverage
  * blitting. */
index 2f77ff8..eeee20c 100644 (file)
 
 #include "cairoint.h"
 
-#include "cairo-box-private.h"
+#include "cairo-box-inline.h"
 #include "cairo-boxes-private.h"
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
 #include "cairo-composite-rectangles-private.h"
 #include "cairo-compositor-private.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
-#include "cairo-pattern-private.h"
+#include "cairo-pattern-inline.h"
 #include "cairo-paginated-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
 #include "cairo-surface-subsurface-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
 #include "cairo-surface-observer-private.h"
 #include "cairo-region-private.h"
 #include "cairo-spans-private.h"
@@ -153,6 +154,21 @@ static void blt_in(void *closure,
                                  &info->boxes);
 }
 
+static void
+add_rect_with_offset (cairo_boxes_t *boxes, int x1, int y1, int x2, int y2, int dx, int dy)
+{
+    cairo_box_t box;
+    cairo_int_status_t status;
+
+    box.p1.x = _cairo_fixed_from_int (x1 - dx);
+    box.p1.y = _cairo_fixed_from_int (y1 - dy);
+    box.p2.x = _cairo_fixed_from_int (x2 - dx);
+    box.p2.y = _cairo_fixed_from_int (y2 - dy);
+
+    status = _cairo_boxes_add (boxes, CAIRO_ANTIALIAS_DEFAULT, &box);
+    assert (status == CAIRO_INT_STATUS_SUCCESS);
+}
+
 static cairo_int_status_t
 combine_clip_as_traps (const cairo_traps_compositor_t *compositor,
                       cairo_surface_t *mask,
@@ -164,9 +180,13 @@ combine_clip_as_traps (const cairo_traps_compositor_t *compositor,
     cairo_antialias_t antialias;
     cairo_traps_t traps;
     cairo_surface_t *src;
+    cairo_box_t box;
+    cairo_rectangle_int_t fixup;
     int src_x, src_y;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     status = _cairo_clip_get_polygon (clip, &polygon,
                                      &fill_rule, &antialias);
     if (status)
@@ -194,45 +214,208 @@ combine_clip_as_traps (const cairo_traps_compositor_t *compositor,
                                          extents,
                                          antialias, &traps);
 
-    cairo_surface_destroy (src);
+    _cairo_traps_extents (&traps, &box);
+    _cairo_box_round_to_rectangle (&box, &fixup);
     _cairo_traps_fini (&traps);
+    cairo_surface_destroy (src);
+
+    if (unlikely (status))
+       return status;
+
+    if (! _cairo_rectangle_intersect (&fixup, extents))
+       return CAIRO_STATUS_SUCCESS;
+
+    if (fixup.width < extents->width || fixup.height < extents->height) {
+       cairo_boxes_t clear;
+
+       _cairo_boxes_init (&clear);
+
+       /* top */
+       if (fixup.y != extents->y) {
+           add_rect_with_offset (&clear,
+                                 extents->x, extents->y,
+                                 extents->x + extents->width,
+                                 fixup.y,
+                                 extents->x, extents->y);
+       }
+       /* left */
+       if (fixup.x != extents->x) {
+           add_rect_with_offset (&clear,
+                                 extents->x, fixup.y,
+                                 fixup.x,
+                                 fixup.y + fixup.height,
+                                 extents->x, extents->y);
+       }
+       /* right */
+       if (fixup.x + fixup.width != extents->x + extents->width) {
+           add_rect_with_offset (&clear,
+                                 fixup.x + fixup.width,
+                                 fixup.y,
+                                 extents->x + extents->width,
+                                 fixup.y + fixup.height,
+                                 extents->x, extents->y);
+       }
+       /* bottom */
+       if (fixup.y + fixup.height != extents->y + extents->height) {
+           add_rect_with_offset (&clear,
+                                 extents->x,
+                                 fixup.y + fixup.height,
+                                 extents->x + extents->width,
+                                 extents->y + extents->height,
+                                 extents->x, extents->y);
+       }
+
+       status = compositor->fill_boxes (mask,
+                                        CAIRO_OPERATOR_CLEAR,
+                                        CAIRO_COLOR_TRANSPARENT,
+                                        &clear);
+
+       _cairo_boxes_fini (&clear);
+    }
+
+    return status;
+}
+
+static cairo_status_t
+__clip_to_surface (const cairo_traps_compositor_t *compositor,
+                  const cairo_composite_rectangles_t *composite,
+                  const cairo_rectangle_int_t *extents,
+                  cairo_surface_t **surface)
+{
+    cairo_surface_t *mask;
+    cairo_polygon_t polygon;
+    cairo_fill_rule_t fill_rule;
+    cairo_antialias_t antialias;
+    cairo_traps_t traps;
+    cairo_boxes_t clear;
+    cairo_surface_t *src;
+    int src_x, src_y;
+    cairo_int_status_t status;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    status = _cairo_clip_get_polygon (composite->clip, &polygon,
+                                     &fill_rule, &antialias);
+    if (status)
+       return status;
+
+    _cairo_traps_init (&traps);
+    status = _cairo_bentley_ottmann_tessellate_polygon (&traps,
+                                                       &polygon,
+                                                       fill_rule);
+    _cairo_polygon_fini (&polygon);
+    if (unlikely (status))
+       return status;
 
+    mask = _cairo_surface_create_similar_scratch (composite->surface,
+                                                 CAIRO_CONTENT_ALPHA,
+                                                 extents->width,
+                                                 extents->height);
+    if (unlikely (mask->status)) {
+       _cairo_traps_fini (&traps);
+       return status;
+    }
+
+    src = compositor->pattern_to_surface (mask, NULL, FALSE,
+                                         extents, NULL,
+                                         &src_x, &src_y);
+    if (unlikely (status = src->status))
+       goto error;
+
+    status = compositor->acquire (mask);
+    if (unlikely (status))
+       goto error;
+
+    _cairo_boxes_init_from_rectangle (&clear,
+                                     0, 0,
+                                     extents->width,
+                                     extents->height);
+    status = compositor->fill_boxes (mask,
+                                    CAIRO_OPERATOR_CLEAR,
+                                    CAIRO_COLOR_TRANSPARENT,
+                                    &clear);
+    if (unlikely (status))
+       goto error_release;
+
+    status = compositor->composite_traps (mask, CAIRO_OPERATOR_ADD, src,
+                                         src_x, src_y,
+                                         extents->x, extents->y,
+                                         extents,
+                                         antialias, &traps);
+    if (unlikely (status))
+       goto error_release;
+
+    compositor->release (mask);
+    *surface = mask;
+out:
+    cairo_surface_destroy (src);
+    _cairo_traps_fini (&traps);
     return status;
+
+error_release:
+    compositor->release (mask);
+error:
+    cairo_surface_destroy (mask);
+    goto out;
 }
 
 static cairo_surface_t *
 traps_get_clip_surface (const cairo_traps_compositor_t *compositor,
-                       cairo_surface_t *target,
-                       const cairo_clip_t *clip,
+                       const cairo_composite_rectangles_t *composite,
                        const cairo_rectangle_int_t *extents)
 {
-    cairo_surface_t *surface;
+    cairo_surface_t *surface = NULL;
     cairo_int_status_t status;
 
-    surface = _cairo_surface_create_similar_solid (target,
-                                                  CAIRO_CONTENT_ALPHA,
-                                                  extents->width,
-                                                  extents->height,
-                                                  CAIRO_COLOR_WHITE);
-    if (unlikely (surface->status))
-       return surface;
-
-    status = compositor->acquire (surface);
-    if (unlikely (status)) {
-       cairo_surface_destroy (surface);
-       return _cairo_surface_create_in_error (status);
-    }
+    TRACE ((stderr, "%s\n", __FUNCTION__));
 
-    status = combine_clip_as_traps (compositor, surface, clip, extents);
+    status = __clip_to_surface (compositor, composite, extents, &surface);
     if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
-       status = _cairo_clip_combine_with_surface (clip, surface,
+       surface = _cairo_surface_create_similar_solid (composite->surface,
+                                                      CAIRO_CONTENT_ALPHA,
+                                                      extents->width,
+                                                      extents->height,
+                                                      CAIRO_COLOR_WHITE);
+       if (unlikely (surface->status))
+           return surface;
+
+       status = _cairo_clip_combine_with_surface (composite->clip, surface,
                                                   extents->x, extents->y);
     }
-    compositor->release (surface);
+    if (unlikely (status)) {
+       cairo_surface_destroy (surface);
+       surface = _cairo_surface_create_in_error (status);
+    }
 
     return surface;
 }
 
+static void blt_unaligned_boxes(const cairo_traps_compositor_t *compositor,
+                               cairo_surface_t *surface,
+                               int dx, int dy,
+                               cairo_box_t *boxes,
+                               int num_boxes)
+{
+    struct blt_in info;
+    int i;
+
+    info.compositor = compositor;
+    info.dst = surface;
+    _cairo_boxes_init (&info.boxes);
+    info.boxes.num_boxes = 1;
+    for (i = 0; i < num_boxes; i++) {
+       cairo_box_t *b = &boxes[i];
+
+       if (! _cairo_fixed_is_integer (b->p1.x) ||
+           ! _cairo_fixed_is_integer (b->p1.y) ||
+           ! _cairo_fixed_is_integer (b->p2.x) ||
+           ! _cairo_fixed_is_integer (b->p2.y))
+       {
+           do_unaligned_box(blt_in, &info, b, dx, dy);
+       }
+    }
+}
+
 static cairo_surface_t *
 create_composite_mask (const cairo_traps_compositor_t *compositor,
                       cairo_surface_t          *dst,
@@ -243,15 +426,13 @@ create_composite_mask (const cairo_traps_compositor_t *compositor,
 {
     cairo_surface_t *surface, *src;
     cairo_int_status_t status;
-    struct blt_in info;
     int src_x, src_y;
-    int i;
 
-    surface = _cairo_surface_create_similar_solid (dst,
-                                                  CAIRO_CONTENT_ALPHA,
-                                                  extents->bounded.width,
-                                                  extents->bounded.height,
-                                                  CAIRO_COLOR_TRANSPARENT);
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    surface = _cairo_surface_create_similar_scratch (dst, CAIRO_CONTENT_ALPHA,
+                                                    extents->bounded.width,
+                                                    extents->bounded.height);
     if (unlikely (surface->status))
        return surface;
 
@@ -261,8 +442,10 @@ create_composite_mask (const cairo_traps_compositor_t *compositor,
                                          &extents->bounded,
                                          &extents->bounded,
                                          &src_x, &src_y);
-    if (unlikely (src->status))
+    if (unlikely (src->status)) {
+       cairo_surface_destroy (surface);
        return src;
+    }
 
     status = compositor->acquire (surface);
     if (unlikely (status)) {
@@ -271,15 +454,34 @@ create_composite_mask (const cairo_traps_compositor_t *compositor,
        return _cairo_surface_create_in_error (status);
     }
 
-    if (mask_func && extents->clip->path == NULL) {
+    if (!surface->is_clear) {
+       cairo_boxes_t clear;
+
+       _cairo_boxes_init_from_rectangle (&clear,
+                                         0, 0,
+                                         extents->bounded.width,
+                                         extents->bounded.height);
+       status = compositor->fill_boxes (surface,
+                                        CAIRO_OPERATOR_CLEAR,
+                                        CAIRO_COLOR_TRANSPARENT,
+                                        &clear);
+       if (unlikely (status))
+           goto error;
+
+       surface->is_clear = TRUE;
+    }
+
+    if (mask_func) {
        status = mask_func (compositor, surface, draw_closure,
                            CAIRO_OPERATOR_SOURCE, src, src_x, src_y,
                            extents->bounded.x, extents->bounded.y,
                            &extents->bounded, extents->clip);
-       if (likely (status != CAIRO_INT_STATUS_UNSUPPORTED)) {
-           cairo_surface_destroy (src);
+       if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
+           surface->is_clear = FALSE;
            goto out;
        }
+       if (unlikely (status != CAIRO_INT_STATUS_UNSUPPORTED))
+           goto error;
     }
 
     /* Is it worth setting the clip region here? */
@@ -287,28 +489,10 @@ create_composite_mask (const cairo_traps_compositor_t *compositor,
                        CAIRO_OPERATOR_ADD, src, src_x, src_y,
                        extents->bounded.x, extents->bounded.y,
                        &extents->bounded, NULL);
-    cairo_surface_destroy (src);
     if (unlikely (status))
        goto error;
 
-    info.compositor = compositor;
-    info.dst = surface;
-    _cairo_boxes_init (&info.boxes);
-    info.boxes.num_boxes = 1;
-    for (i = 0; i < extents->clip->num_boxes; i++) {
-       cairo_box_t *b = &extents->clip->boxes[i];
-
-       if (! _cairo_fixed_is_integer (b->p1.x) ||
-           ! _cairo_fixed_is_integer (b->p1.y) ||
-           ! _cairo_fixed_is_integer (b->p2.x) ||
-           ! _cairo_fixed_is_integer (b->p2.y))
-       {
-           do_unaligned_box(blt_in, &info, b,
-                            extents->bounded.x,
-                            extents->bounded.y);
-       }
-    }
-
+    surface->is_clear = FALSE;
     if (extents->clip->path != NULL) {
        status = combine_clip_as_traps (compositor, surface,
                                        extents->clip, &extents->bounded);
@@ -319,19 +503,25 @@ create_composite_mask (const cairo_traps_compositor_t *compositor,
        }
        if (unlikely (status))
            goto error;
+    } else if (extents->clip->boxes) {
+       blt_unaligned_boxes(compositor, surface,
+                           extents->bounded.x, extents->bounded.y,
+                           extents->clip->boxes, extents->clip->num_boxes);
+
     }
 
 out:
     compositor->release (surface);
-    surface->is_clear = FALSE;
+    cairo_surface_destroy (src);
     return surface;
 
 error:
+    compositor->release (surface);
     if (status != CAIRO_INT_STATUS_NOTHING_TO_DO) {
        cairo_surface_destroy (surface);
        surface = _cairo_surface_create_in_error (status);
     }
-    compositor->release (surface);
+    cairo_surface_destroy (src);
     return surface;
 }
 
@@ -351,6 +541,8 @@ clip_and_composite_with_mask (const cairo_traps_compositor_t *compositor,
     cairo_surface_t *dst = extents->surface;
     cairo_surface_t *mask;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     mask = create_composite_mask (compositor, dst, draw_closure,
                                  draw_func, mask_func,
                                  extents);
@@ -396,6 +588,8 @@ clip_and_composite_combine (const cairo_traps_compositor_t *compositor,
     cairo_surface_t *tmp, *clip;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     tmp = _cairo_surface_create_similar_scratch (dst, dst->content,
                                                 extents->bounded.width,
                                                 extents->bounded.height);
@@ -424,8 +618,7 @@ clip_and_composite_combine (const cairo_traps_compositor_t *compositor,
     if (unlikely (status))
        goto cleanup;
 
-    clip = traps_get_clip_surface (compositor, dst, extents->clip,
-                                  &extents->bounded);
+    clip = traps_get_clip_surface (compositor, extents, &extents->bounded);
     if (unlikely ((status = clip->status)))
        goto cleanup;
 
@@ -467,6 +660,8 @@ clip_and_composite_source (const cairo_traps_compositor_t   *compositor,
 {
     cairo_surface_t *mask;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     /* Create a surface that is mask IN clip */
     mask = create_composite_mask (compositor, dst, draw_closure,
                                  draw_func, mask_func,
@@ -528,11 +723,12 @@ fixup_unbounded_with_mask (const cairo_traps_compositor_t *compositor,
                           const cairo_composite_rectangles_t *extents)
 {
     cairo_surface_t *dst = extents->surface;
-    cairo_clip_t *clip = extents->clip;
     cairo_surface_t *mask;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     /* XXX can we avoid querying the clip surface again? */
-    mask = traps_get_clip_surface (compositor, dst, clip, &extents->unbounded);
+    mask = traps_get_clip_surface (compositor, extents, &extents->unbounded);
     if (unlikely (mask->status))
        return mask->status;
 
@@ -622,6 +818,8 @@ fixup_unbounded (const cairo_traps_compositor_t *compositor,
     cairo_box_t box;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (extents->bounded.width  == extents->unbounded.width &&
        extents->bounded.height == extents->unbounded.height)
     {
@@ -772,6 +970,8 @@ clip_and_composite (const cairo_traps_compositor_t *compositor,
     cairo_region_t *clip_region = NULL;
     cairo_status_t status = CAIRO_STATUS_SUCCESS;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (reduce_alpha_op (extents)) {
        op = CAIRO_OPERATOR_ADD;
        source = NULL;
@@ -882,6 +1082,8 @@ composite_traps (const cairo_traps_compositor_t *compositor,
 {
     composite_traps_info_t *info = closure;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     return compositor->composite_traps (dst, op, src,
                                        src_x - dst_x, src_y - dst_y,
                                        dst_x, dst_y,
@@ -907,6 +1109,8 @@ composite_tristrip (const cairo_traps_compositor_t *compositor,
 {
     composite_tristrip_info_t *info = closure;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     return compositor->composite_tristrip (dst, op, src,
                                           src_x - dst_x, src_y - dst_y,
                                           dst_x, dst_y,
@@ -923,10 +1127,7 @@ is_recording_pattern (const cairo_pattern_t *pattern)
        return FALSE;
 
     surface = ((const cairo_surface_pattern_t *) pattern)->surface;
-    if (_cairo_surface_is_paginated (surface))
-       surface = _cairo_paginated_surface_get_recording (surface);
-    if (_cairo_surface_is_snapshot (surface))
-       surface = _cairo_surface_snapshot_get_target (surface);
+    surface = _cairo_surface_get_source (surface, NULL);
     return _cairo_surface_is_recording (surface);
 }
 
@@ -936,11 +1137,7 @@ recording_pattern_get_surface (const cairo_pattern_t *pattern)
     cairo_surface_t *surface;
 
     surface = ((const cairo_surface_pattern_t *) pattern)->surface;
-    if (_cairo_surface_is_paginated (surface))
-       surface = _cairo_paginated_surface_get_recording (surface);
-    if (_cairo_surface_is_snapshot (surface))
-       surface = _cairo_surface_snapshot_get_target (surface);
-    return surface;
+    return _cairo_surface_get_source (surface, NULL);
 }
 
 static cairo_bool_t
@@ -959,15 +1156,7 @@ recording_pattern_contains_sample (const cairo_pattern_t *pattern,
     if (surface->unbounded)
        return TRUE;
 
-    if (sample->x >= surface->extents.x &&
-       sample->y >= surface->extents.y &&
-       sample->x + sample->width <= surface->extents.x + surface->extents.width &&
-       sample->y + sample->height <= surface->extents.y + surface->extents.height)
-    {
-       return TRUE;
-    }
-
-    return FALSE;
+    return _cairo_rectangle_contains_rectangle (&surface->extents, sample);
 }
 
 static cairo_bool_t
@@ -989,10 +1178,12 @@ composite_aligned_boxes (const cairo_traps_compositor_t *compositor,
 {
     cairo_surface_t *dst = extents->surface;
     cairo_operator_t op = extents->op;
-    cairo_bool_t need_clip_mask = extents->clip->path != NULL;
+    cairo_bool_t need_clip_mask = ! _cairo_clip_is_region (extents->clip);
     cairo_bool_t op_is_source;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (need_clip_mask &&
        (! extents->is_bounded || extents->op == CAIRO_OPERATOR_SOURCE))
     {
@@ -1063,8 +1254,8 @@ composite_aligned_boxes (const cairo_traps_compositor_t *compositor,
        int mask_x = 0, mask_y = 0;
 
        if (need_clip_mask) {
-           mask = traps_get_clip_surface (compositor, dst, extents->clip,
-                                          &extents->bounded);
+           mask = traps_get_clip_surface (compositor,
+                                          extents, &extents->bounded);
            if (unlikely (mask->status))
                return mask->status;
 
@@ -1110,39 +1301,33 @@ upload_boxes (const cairo_traps_compositor_t *compositor,
 {
     cairo_surface_t *dst = extents->surface;
     const cairo_pattern_t *source = &extents->source_pattern.base;
-    const cairo_surface_pattern_t *pattern;
     cairo_surface_t *src;
     cairo_rectangle_int_t limit;
     cairo_int_status_t status;
     int tx, ty;
 
-    pattern = (const cairo_surface_pattern_t *) source;
-    src = pattern->surface;
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    src = _cairo_pattern_get_source((cairo_surface_pattern_t *)source,
+                                   &limit);
     if (!(src->type == CAIRO_SURFACE_TYPE_IMAGE || src->type == dst->type))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
     if (! _cairo_matrix_is_integer_translation (&source->matrix, &tx, &ty))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    if (_cairo_surface_is_snapshot (src))
-       src = _cairo_surface_snapshot_get_target (src);
-    if (_cairo_surface_is_observer (src))
-       src = _cairo_surface_observer_get_target (src);
-    if (_cairo_surface_is_subsurface (src)) {
-       _cairo_surface_subsurface_offset (src, &tx, &ty);
-       src = _cairo_surface_subsurface_get_target (src);
-    }
-
     /* Check that the data is entirely within the image */
-    if (extents->bounded.x + tx < 0 || extents->bounded.y + ty < 0)
+    if (extents->bounded.x + tx < limit.x || extents->bounded.y + ty < limit.y)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    _cairo_surface_get_extents (pattern->surface, &limit);
-    if (extents->bounded.x + extents->bounded.width  + tx > limit.width ||
-       extents->bounded.y + extents->bounded.height + ty > limit.height)
+    if (extents->bounded.x + extents->bounded.width  + tx > limit.x + limit.width ||
+       extents->bounded.y + extents->bounded.height + ty > limit.y + limit.height)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    if (pattern->surface->type == CAIRO_SURFACE_TYPE_IMAGE)
+    tx += limit.x;
+    ty += limit.y;
+
+    if (src->type == CAIRO_SURFACE_TYPE_IMAGE)
        status = compositor->draw_image_boxes (dst,
                                               (cairo_image_surface_t *)src,
                                               boxes, tx, ty);
@@ -1267,13 +1452,16 @@ clip_and_composite_polygon (const cairo_traps_compositor_t *compositor,
                            cairo_composite_rectangles_t *extents,
                            cairo_polygon_t *polygon,
                            cairo_antialias_t antialias,
-                           cairo_fill_rule_t fill_rule)
+                           cairo_fill_rule_t fill_rule,
+                           cairo_bool_t curvy)
 {
     composite_traps_info_t traps;
     cairo_surface_t *dst = extents->surface;
     cairo_bool_t clip_surface = ! _cairo_clip_is_region (extents->clip);
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (polygon->num_edges == 0) {
        status = CAIRO_INT_STATUS_SUCCESS;
 
@@ -1328,9 +1516,27 @@ clip_and_composite_polygon (const cairo_traps_compositor_t *compositor,
        }
     }
 
+    if (antialias == CAIRO_ANTIALIAS_NONE && curvy) {
+       cairo_boxes_t boxes;
+
+       _cairo_boxes_init (&boxes);
+       status = _cairo_rasterise_polygon_to_boxes (polygon, fill_rule, &boxes);
+       if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
+           assert (boxes.is_pixel_aligned);
+           status = clip_and_composite_boxes (compositor, extents, &boxes);
+       }
+       _cairo_boxes_fini (&boxes);
+       if ((status != CAIRO_INT_STATUS_UNSUPPORTED))
+           return status;
+    }
+
     _cairo_traps_init (&traps.traps);
 
-    status = _cairo_bentley_ottmann_tessellate_polygon (&traps.traps, polygon, fill_rule);
+    if (antialias == CAIRO_ANTIALIAS_NONE && curvy) {
+       status = _cairo_rasterise_polygon_to_traps (polygon, fill_rule, antialias, &traps.traps);
+    } else {
+       status = _cairo_bentley_ottmann_tessellate_polygon (&traps.traps, polygon, fill_rule);
+    }
     if (unlikely (status))
        goto CLEANUP_TRAPS;
 
@@ -1442,6 +1648,8 @@ composite_opacity_boxes (const cairo_traps_compositor_t *compositor,
     struct composite_opacity_info info;
     int i;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     info.compositor = compositor;
     info.op = op;
     info.dst = dst;
@@ -1476,6 +1684,8 @@ composite_boxes (const cairo_traps_compositor_t *compositor,
     cairo_traps_t traps;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     status = _cairo_traps_init_boxes (&traps, closure);
     if (unlikely (status))
        return status;
@@ -1497,6 +1707,8 @@ clip_and_composite_boxes (const cairo_traps_compositor_t *compositor,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (boxes->num_boxes == 0 && extents->is_bounded)
        return CAIRO_STATUS_SUCCESS;
 
@@ -1524,17 +1736,19 @@ clip_and_composite_boxes (const cairo_traps_compositor_t *compositor,
 
        clip = _cairo_clip_copy (extents->clip);
        clip = _cairo_clip_intersect_boxes (clip, boxes);
+       if (_cairo_clip_is_all_clipped (clip))
+           return CAIRO_INT_STATUS_NOTHING_TO_DO;
+
        status = _cairo_clip_get_polygon (clip, &polygon,
                                          &fill_rule, &antialias);
-       if (clip->path)
-           _cairo_clip_path_destroy (clip->path);
+       _cairo_clip_path_destroy (clip->path);
        clip->path = NULL;
        if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
            cairo_clip_t *saved_clip = extents->clip;
            extents->clip = clip;
 
            status = clip_and_composite_polygon (compositor, extents, &polygon,
-                                                antialias, fill_rule);
+                                                antialias, fill_rule, FALSE);
 
            clip = extents->clip;
            extents->clip = saved_clip;
@@ -1555,7 +1769,7 @@ clip_and_composite_boxes (const cairo_traps_compositor_t *compositor,
     }
 
     return clip_and_composite (compositor, extents,
-                              composite_boxes, composite_boxes, boxes,
+                              composite_boxes, NULL, boxes,
                               need_unbounded_clip (extents));
 }
 
@@ -1566,6 +1780,8 @@ composite_traps_as_boxes (const cairo_traps_compositor_t *compositor,
 {
     cairo_boxes_t boxes;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (! _cairo_traps_to_boxes (&info->traps, info->antialias, &boxes))
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
@@ -1579,6 +1795,8 @@ clip_and_composite_traps (const cairo_traps_compositor_t *compositor,
 {
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     status = trim_extents_to_traps (extents, &info->traps);
     if (unlikely (status != CAIRO_INT_STATUS_SUCCESS))
        return status;
@@ -1613,6 +1831,8 @@ clip_and_composite_tristrip (const cairo_traps_compositor_t *compositor,
     cairo_int_status_t status;
     unsigned int flags = 0;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     status = trim_extents_to_tristrip (extents, &info->strip);
     if (unlikely (status != CAIRO_INT_STATUS_SUCCESS))
        return status;
@@ -1647,6 +1867,8 @@ composite_mask (const cairo_traps_compositor_t *compositor,
 {
     struct composite_mask *data = closure;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (src != NULL) {
        compositor->composite (dst, op, src, data->mask,
                               extents->x + src_x, extents->y + src_y,
@@ -1680,6 +1902,8 @@ static void composite_box(void *closure,
     struct composite_box_info *info = closure;
     const cairo_traps_compositor_t *compositor = info->compositor;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (! CAIRO_ALPHA_SHORT_IS_OPAQUE (coverage)) {
        cairo_surface_t *mask;
        cairo_color_t color;
@@ -1729,6 +1953,8 @@ composite_mask_clip_boxes (const cairo_traps_compositor_t *compositor,
     struct composite_box_info info;
     int i;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     info.compositor = compositor;
     info.op = CAIRO_OPERATOR_SOURCE;
     info.dst = dst;
@@ -1764,6 +1990,8 @@ composite_mask_clip (const cairo_traps_compositor_t *compositor,
     composite_traps_info_t info;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     status = _cairo_clip_get_polygon (clip, &polygon,
                                      &fill_rule, &info.antialias);
     if (unlikely (status))
@@ -1798,6 +2026,12 @@ _cairo_traps_compositor_paint (const cairo_compositor_t *_compositor,
     cairo_boxes_t boxes;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    status = compositor->check_composite (extents);
+    if (unlikely (status))
+       return status;
+
      _cairo_clip_steal_boxes (extents->clip, &boxes);
      status = clip_and_composite_boxes (compositor, extents, &boxes);
      _cairo_clip_unsteal_boxes (extents->clip, &boxes);
@@ -1812,6 +2046,12 @@ _cairo_traps_compositor_mask (const cairo_compositor_t *_compositor,
     const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t*)_compositor;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    status = compositor->check_composite (extents);
+    if (unlikely (status))
+       return status;
+
     if (extents->mask_pattern.base.type == CAIRO_PATTERN_TYPE_SOLID &&
        extents->clip->path == NULL) {
        status = clip_and_composite (compositor, extents,
@@ -1829,6 +2069,8 @@ _cairo_traps_compositor_mask (const cairo_compositor_t *_compositor,
                                                    &extents->mask_sample_area,
                                                    &data.mask_x,
                                                    &data.mask_y);
+       if (unlikely (data.mask->status))
+           return data.mask->status;
 
        status = clip_and_composite (compositor, extents,
                                     composite_mask,
@@ -1854,6 +2096,12 @@ _cairo_traps_compositor_stroke (const cairo_compositor_t *_compositor,
     const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    status = compositor->check_composite (extents);
+    if (unlikely (status))
+       return status;
+
     status = CAIRO_INT_STATUS_UNSUPPORTED;
     if (_cairo_path_fixed_stroke_is_rectilinear (path)) {
        cairo_boxes_t boxes;
@@ -1885,6 +2133,24 @@ _cairo_traps_compositor_stroke (const cairo_compositor_t *_compositor,
        _cairo_tristrip_fini (&info.strip);
     }
 
+    if (status == CAIRO_INT_STATUS_UNSUPPORTED &&
+       path->has_curve_to && antialias == CAIRO_ANTIALIAS_NONE) {
+       cairo_polygon_t polygon;
+
+       _cairo_polygon_init_with_clip (&polygon, extents->clip);
+       status = _cairo_path_fixed_stroke_to_polygon (path, style,
+                                                     ctm, ctm_inverse,
+                                                     tolerance,
+                                                     &polygon);
+       if (likely (status == CAIRO_INT_STATUS_SUCCESS))
+           status = clip_and_composite_polygon (compositor,
+                                                extents, &polygon,
+                                                CAIRO_ANTIALIAS_NONE,
+                                                CAIRO_FILL_RULE_WINDING,
+                                                TRUE);
+       _cairo_polygon_fini (&polygon);
+    }
+
     if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
        composite_traps_info_t info;
 
@@ -1913,6 +2179,12 @@ _cairo_traps_compositor_fill (const cairo_compositor_t *_compositor,
     const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    status = compositor->check_composite (extents);
+    if (unlikely (status))
+       return status;
+
     status = CAIRO_INT_STATUS_UNSUPPORTED;
     if (_cairo_path_fixed_fill_is_rectilinear (path)) {
        cairo_boxes_t boxes;
@@ -1955,7 +2227,7 @@ _cairo_traps_compositor_fill (const cairo_compositor_t *_compositor,
 #endif
        if (likely (status == CAIRO_INT_STATUS_SUCCESS)) {
            status = clip_and_composite_polygon (compositor, extents, &polygon,
-                                                antialias, fill_rule);
+                                                antialias, fill_rule, path->has_curve_to);
        }
        _cairo_polygon_fini (&polygon);
     }
@@ -1976,6 +2248,8 @@ composite_glyphs (const cairo_traps_compositor_t *compositor,
 {
     cairo_composite_glyphs_info_t *info = closure;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (op == CAIRO_OPERATOR_ADD && (dst->content & CAIRO_CONTENT_COLOR) == 0)
        info->use_mask = 0;
 
@@ -1996,6 +2270,12 @@ _cairo_traps_compositor_glyphs (const cairo_compositor_t *_compositor,
     const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    status = compositor->check_composite (extents);
+    if (unlikely (status))
+       return status;
+
     _cairo_scaled_font_freeze_cache (scaled_font);
     status = compositor->check_composite_glyphs (extents,
                                                 scaled_font, glyphs,
index 5b17719..62c0fe7 100644 (file)
@@ -121,6 +121,12 @@ cairo_private cairo_status_t
 _cairo_traps_path (const cairo_traps_t *traps,
                   cairo_path_fixed_t  *path);
 
+cairo_private cairo_int_status_t
+_cairo_rasterise_polygon_to_traps (cairo_polygon_t                     *polygon,
+                                  cairo_fill_rule_t                     fill_rule,
+                                  cairo_antialias_t                     antialias,
+                                  cairo_traps_t *traps);
+
 CAIRO_END_DECLS
 
 #endif /* CAIRO_TRAPS_PRIVATE_H */
index a6e7f94..48eaf98 100644 (file)
@@ -44,6 +44,7 @@
 #include "cairo-region-private.h"
 #include "cairo-slope-private.h"
 #include "cairo-traps-private.h"
+#include "cairo-spans-private.h"
 
 /* private functions */
 
@@ -158,7 +159,7 @@ _cairo_traps_add_trap (cairo_traps_t *traps,
 }
 
 /**
- * _cairo_traps_init_box:
+ * _cairo_traps_init_boxes:
  * @traps: a #cairo_traps_t
  * @box: an array box that will each be converted to a single trapezoid
  *       to store in @traps.
@@ -715,3 +716,99 @@ _cairo_traps_path (const cairo_traps_t *traps,
 
     return CAIRO_STATUS_SUCCESS;
 }
+
+void
+_cairo_debug_print_traps (FILE *file, const cairo_traps_t *traps)
+{
+    cairo_box_t extents;
+    int n;
+
+#if 0
+    if (traps->has_limits) {
+       printf ("%s: limits=(%d, %d, %d, %d)\n",
+               filename,
+               traps->limits.p1.x, traps->limits.p1.y,
+               traps->limits.p2.x, traps->limits.p2.y);
+    }
+#endif
+
+    _cairo_traps_extents (traps, &extents);
+    fprintf (file, "extents=(%d, %d, %d, %d)\n",
+            extents.p1.x, extents.p1.y,
+            extents.p2.x, extents.p2.y);
+
+    for (n = 0; n < traps->num_traps; n++) {
+       fprintf (file, "%d %d L:(%d, %d), (%d, %d) R:(%d, %d), (%d, %d)\n",
+                traps->traps[n].top,
+                traps->traps[n].bottom,
+                traps->traps[n].left.p1.x,
+                traps->traps[n].left.p1.y,
+                traps->traps[n].left.p2.x,
+                traps->traps[n].left.p2.y,
+                traps->traps[n].right.p1.x,
+                traps->traps[n].right.p1.y,
+                traps->traps[n].right.p2.x,
+                traps->traps[n].right.p2.y);
+    }
+}
+
+struct cairo_trap_renderer {
+    cairo_span_renderer_t base;
+    cairo_traps_t *traps;
+};
+
+static cairo_status_t
+span_to_traps (void *abstract_renderer, int y, int h,
+              const cairo_half_open_span_t *spans, unsigned num_spans)
+{
+    struct cairo_trap_renderer *r = abstract_renderer;
+    cairo_fixed_t top, bot;
+
+    if (num_spans == 0)
+       return CAIRO_STATUS_SUCCESS;
+
+    top = _cairo_fixed_from_int (y);
+    bot = _cairo_fixed_from_int (y + h);
+    do {
+       if (spans[0].coverage) {
+           cairo_fixed_t x0 = _cairo_fixed_from_int(spans[0].x);
+           cairo_fixed_t x1 = _cairo_fixed_from_int(spans[1].x);
+           cairo_line_t left = { { x0, top }, { x0, bot } },
+                        right = { { x1, top }, { x1, bot } };
+           _cairo_traps_add_trap (r->traps, top, bot, &left, &right);
+       }
+       spans++;
+    } while (--num_spans > 1);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_int_status_t
+_cairo_rasterise_polygon_to_traps (cairo_polygon_t                     *polygon,
+                                  cairo_fill_rule_t                     fill_rule,
+                                  cairo_antialias_t                     antialias,
+                                  cairo_traps_t *traps)
+{
+    struct cairo_trap_renderer renderer;
+    cairo_scan_converter_t *converter;
+    cairo_int_status_t status;
+    cairo_rectangle_int_t r;
+
+    TRACE ((stderr, "%s: fill_rule=%d, antialias=%d\n",
+           __FUNCTION__, fill_rule, antialias));
+    assert(antialias == CAIRO_ANTIALIAS_NONE);
+
+    renderer.traps = traps;
+    renderer.base.render_rows = span_to_traps;
+
+    _cairo_box_round_to_rectangle (&polygon->extents, &r);
+    converter = _cairo_mono_scan_converter_create (r.x, r.y,
+                                                  r.x + r.width,
+                                                  r.y + r.height,
+                                                  fill_rule);
+    status = _cairo_mono_scan_converter_add_polygon (converter, polygon);
+    if (likely (status == CAIRO_INT_STATUS_SUCCESS))
+       status = converter->generate (converter, &renderer.base);
+    converter->destroy (converter);
+    return status;
+}
index 1afdf3a..18ee685 100644 (file)
@@ -1250,7 +1250,6 @@ _cairo_truetype_reverse_cmap (cairo_scaled_font_t *scaled_font,
     uint16_t *end_code;
     uint16_t *delta;
     uint16_t *range_offset;
-    uint16_t *glyph_array;
     uint16_t  c;
 
     backend = scaled_font->backend;
@@ -1290,7 +1289,6 @@ _cairo_truetype_reverse_cmap (cairo_scaled_font_t *scaled_font,
     start_code = &(end_code[num_segments + 1]);
     delta = &(start_code[num_segments]);
     range_offset = &(delta[num_segments]);
-    glyph_array = &(range_offset[num_segments]);
 
     /* search for glyph in segments with rangeOffset=0 */
     for (i = 0; i < num_segments; i++) {
index efe3028..e507abe 100644 (file)
@@ -1,3 +1,4 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
 /* cairo - a vector graphics library with display and print output
  *
  * Copyright Â© 2006 Red Hat, Inc
@@ -98,6 +99,8 @@ typedef struct _cairo_type1_font_subset {
     struct {
        const char *subr_string;
        int subr_length;
+       const char *np;
+       int np_length;
        cairo_bool_t used;
     } *subrs;
 
@@ -378,6 +381,7 @@ cairo_type1_font_subset_get_fontname (cairo_type1_font_subset_t *font)
 {
     const char *start, *end, *segment_end;
     char *s;
+    int i;
 
     segment_end = font->header_segment + font->header_segment_size;
     start = find_token (font->header_segment, segment_end, "/FontName");
@@ -403,6 +407,16 @@ cairo_type1_font_subset_get_fontname (cairo_type1_font_subset_t *font)
        return CAIRO_INT_STATUS_UNSUPPORTED;
     }
 
+    /* If font name is prefixed with a subset tag, strip it off. */
+    if (strlen(start) > 7 && start[6] == '+') {
+       for (i = 0; i < 6; i++) {
+           if (start[i] < 'A' || start[i] > 'Z')
+               break;
+       }
+       if (i == 6)
+           start += 7;
+    }
+
     font->base.base_font = strdup (start);
     free (s);
     if (unlikely (font->base.base_font == NULL))
@@ -748,80 +762,79 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font,
         if (*p < 32) {
            command = *p++;
            switch (command) {
-               case TYPE1_CHARSTRING_COMMAND_HSBW:
-                   font->glyphs[glyph].width = font->build_stack.stack[1]/font->base.units_per_em;
+           case TYPE1_CHARSTRING_COMMAND_HSBW:
+               if (! last_op_was_integer)
+                   return CAIRO_INT_STATUS_UNSUPPORTED;
+
+               font->glyphs[glyph].width = font->build_stack.stack[1]/font->base.units_per_em;
+               font->build_stack.sp = 0;
+               last_op_was_integer = FALSE;
+               break;
+
+           case TYPE1_CHARSTRING_COMMAND_CALLSUBR:
+               if (font->subset_subrs  &&
+                   last_op_was_integer &&
+                   font->build_stack.top_value >= 0    &&
+                   font->build_stack.top_value < font->num_subrs)
+               {
+                   subr_num = font->build_stack.top_value;
+                   font->subrs[subr_num].used = TRUE;
+                   last_op_was_integer = FALSE;
+                   status = cairo_type1_font_subset_parse_charstring (font,
+                                                                      glyph,
+                                                                      font->subrs[subr_num].subr_string,
+                                                                      font->subrs[subr_num].subr_length);
+               } else {
+                   font->subset_subrs = FALSE;
+               }
+               break;
+
+           case TYPE1_CHARSTRING_COMMAND_ESCAPE:
+               command = command << 8 | *p++;
+               switch (command) {
+               case TYPE1_CHARSTRING_COMMAND_SEAC:
+                   /* The seac command takes five integer arguments.  The
+                    * last two are glyph indices into the PS standard
+                    * encoding give the names of the glyphs that this
+                    * glyph is composed from.  All we need to do is to
+                    * make sure those glyphs are present in the subset
+                    * under their standard names. */
+                   status = use_standard_encoding_glyph (font, font->build_stack.stack[3]);
+                   if (unlikely (status))
+                       return status;
+
+                   status = use_standard_encoding_glyph (font, font->build_stack.stack[4]);
+                   if (unlikely (status))
+                       return status;
+
                    font->build_stack.sp = 0;
                    last_op_was_integer = FALSE;
                    break;
 
-               case TYPE1_CHARSTRING_COMMAND_CALLSUBR:
-                   if (font->subset_subrs  &&
-                       last_op_was_integer &&
-                       font->build_stack.top_value >= 0    &&
-                       font->build_stack.top_value < font->num_subrs)
-                   {
-                       subr_num = font->build_stack.top_value;
-                       font->subrs[subr_num].used = TRUE;
-                       last_op_was_integer = FALSE;
-                       status = cairo_type1_font_subset_parse_charstring (font,
-                                                                          glyph,
-                                                                          font->subrs[subr_num].subr_string,
-                                                                          font->subrs[subr_num].subr_length);
-                   } else {
-                       font->subset_subrs = FALSE;
-                   }
+               case TYPE1_CHARSTRING_COMMAND_SBW:
+                   if (! last_op_was_integer)
+                       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+                   font->glyphs[glyph].width = font->build_stack.stack[2]/font->base.units_per_em;
+                   font->build_stack.sp = 0;
+                   last_op_was_integer = FALSE;
+                   break;
+
+               case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR:
+                   for (i = 0; i < font->build_stack.sp; i++)
+                       font->ps_stack.other_subr_args[i] = font->build_stack.stack[i];
+                   font->ps_stack.num_other_subr_args = font->build_stack.sp;
+                   font->ps_stack.cur_other_subr_arg = 0;
+                   font->build_stack.sp = 0;
+                   last_op_was_integer = FALSE;
                    break;
 
-               case TYPE1_CHARSTRING_COMMAND_ESCAPE:
-                   command = command << 8 | *p++;
-                   switch (command) {
-                       case TYPE1_CHARSTRING_COMMAND_SEAC:
-                           /* The seac command takes five integer arguments.  The
-                            * last two are glyph indices into the PS standard
-                            * encoding give the names of the glyphs that this
-                            * glyph is composed from.  All we need to do is to
-                            * make sure those glyphs are present in the subset
-                            * under their standard names. */
-                           status = use_standard_encoding_glyph (font, font->build_stack.stack[3]);
-                           if (unlikely (status))
-                               return status;
-
-                           status = use_standard_encoding_glyph (font, font->build_stack.stack[4]);
-                           if (unlikely (status))
-                               return status;
-
-                           font->build_stack.sp = 0;
-                           last_op_was_integer = FALSE;
-                           break;
-
-                       case TYPE1_CHARSTRING_COMMAND_SBW:
-                           font->glyphs[glyph].width = font->build_stack.stack[2]/font->base.units_per_em;
-                           font->build_stack.sp = 0;
-                           last_op_was_integer = FALSE;
-                           break;
-
-                       case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR:
-                           for (i = 0; i < font->build_stack.sp; i++)
-                               font->ps_stack.other_subr_args[i] = font->build_stack.stack[i];
-                           font->ps_stack.num_other_subr_args = font->build_stack.sp;
-                           font->ps_stack.cur_other_subr_arg = 0;
-                           font->build_stack.sp = 0;
-                           last_op_was_integer = FALSE;
-                           break;
-
-                       case TYPE1_CHARSTRING_COMMAND_POP:
-                           if (font->ps_stack.num_other_subr_args > font->ps_stack.cur_other_subr_arg) {
-                               font->build_stack.top_value = font->ps_stack.other_subr_args[font->ps_stack.cur_other_subr_arg++];
-                               last_op_was_integer = TRUE;
-                           } else {
-                               font->subset_subrs = FALSE;
-                           }
-                           break;
-
-                       default:
-                           font->build_stack.sp = 0;
-                           last_op_was_integer = FALSE;
-                           break;
+               case TYPE1_CHARSTRING_COMMAND_POP:
+                   if (font->ps_stack.num_other_subr_args > font->ps_stack.cur_other_subr_arg) {
+                       font->build_stack.top_value = font->ps_stack.other_subr_args[font->ps_stack.cur_other_subr_arg++];
+                       last_op_was_integer = TRUE;
+                   } else {
+                       font->subset_subrs = FALSE;
                    }
                    break;
 
@@ -829,6 +842,13 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font,
                    font->build_stack.sp = 0;
                    last_op_was_integer = FALSE;
                    break;
+               }
+               break;
+
+           default:
+               font->build_stack.sp = 0;
+               last_op_was_integer = FALSE;
+               break;
            }
         } else {
             /* integer argument */
@@ -847,11 +867,14 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font,
 static cairo_status_t
 cairo_type1_font_subset_build_subr_list (cairo_type1_font_subset_t *font,
                                         int subr_number,
-                                        const char *encrypted_charstring, int encrypted_charstring_length)
+                                        const char *encrypted_charstring, int encrypted_charstring_length,
+                                        const char *np, int np_length)
 {
 
     font->subrs[subr_number].subr_string = encrypted_charstring;
     font->subrs[subr_number].subr_length = encrypted_charstring_length;
+    font->subrs[subr_number].np = np;
+    font->subrs[subr_number].np_length = np_length;
 
     return CAIRO_STATUS_SUCCESS;
 }
@@ -859,7 +882,8 @@ cairo_type1_font_subset_build_subr_list (cairo_type1_font_subset_t *font,
 static cairo_status_t
 write_used_subrs (cairo_type1_font_subset_t *font,
                  int subr_number,
-                 const char *subr_string, int subr_string_length)
+                 const char *subr_string, int subr_string_length,
+                 const char *np, int np_length)
 {
     cairo_status_t status;
     char buffer[256];
@@ -881,8 +905,12 @@ write_used_subrs (cairo_type1_font_subset_t *font,
     if (unlikely (status))
        return status;
 
-    length = snprintf (buffer, sizeof buffer, "%s\n", font->np);
-    status = cairo_type1_font_subset_write_encrypted (font, buffer, length);
+    if (np) {
+       status = cairo_type1_font_subset_write_encrypted (font, np, np_length);
+    } else {
+       length = snprintf (buffer, sizeof buffer, "%s\n", font->np);
+       status = cairo_type1_font_subset_write_encrypted (font, buffer, length);
+    }
     if (unlikely (status))
        return status;
 
@@ -890,8 +918,9 @@ write_used_subrs (cairo_type1_font_subset_t *font,
 }
 
 typedef cairo_status_t (*subr_func_t) (cairo_type1_font_subset_t *font,
-                                       int subr_number,
-                                       const char *subr_string, int subr_string_length);
+                                      int subr_number,
+                                      const char *subr_string, int subr_string_length,
+                                      const char *np, int np_length);
 
 static cairo_status_t
 cairo_type1_font_for_each_subr (cairo_type1_font_subset_t  *font,
@@ -903,6 +932,8 @@ cairo_type1_font_for_each_subr (cairo_type1_font_subset_t  *font,
     const char *p, *subr_string;
     char *end;
     int subr_num, subr_length;
+    const char *np;
+    int np_length;
     cairo_status_t status;
 
     /* We're looking at "dup" at the start of the first subroutine. The subroutines
@@ -936,15 +967,29 @@ cairo_type1_font_for_each_subr (cairo_type1_font_subset_t  *font,
         * between the -| or RD token and the encrypted data, thus '+ 1'. */
        subr_string = skip_token (end, cleartext_end) + 1;
 
-       status = func (font, subr_num,
-                      subr_string, subr_length);
-       if (unlikely (status))
-           return status;
+       np = NULL;
+       np_length = 0;
 
        /* Skip binary data and | or NP token. */
        p = skip_token (subr_string + subr_length, cleartext_end);
        while (p < cleartext_end && _cairo_isspace(*p))
            p++;
+
+       /* Some fonts have "noaccess put" instead of "NP" */
+       if (p + 3 < cleartext_end && strncmp (p, "put", 3) == 0) {
+           p = skip_token (p, cleartext_end);
+           while (p < cleartext_end && _cairo_isspace(*p))
+               p++;
+
+           np = subr_string + subr_length;
+           np_length = p - np;
+       }
+
+       status = func (font, subr_num,
+                      subr_string, subr_length, np, np_length);
+       if (unlikely (status))
+           return status;
+
     }
 
     *array_end = (char *) p;
@@ -1094,9 +1139,10 @@ cairo_type1_font_subset_write_private_dict (cairo_type1_font_subset_t *font,
     const char *p, *subrs, *charstrings, *array_start, *array_end, *dict_start, *dict_end;
     const char *closefile_token;
     char buffer[32], *subr_count_end, *glyph_count_end;
-    int num_charstrings, length;
+    int length;
     const cairo_scaled_font_backend_t *backend;
     unsigned int i;
+    int glyph, j;
 
     /* The private dict holds hint information, common subroutines and
      * the actual glyph definitions (charstrings).
@@ -1160,7 +1206,7 @@ skip_subrs:
 
     /* Scan past /CharStrings and the integer following it. */
     p = charstrings + strlen ("/CharStrings");
-    num_charstrings = strtol (p, &glyph_count_end, 10);
+    strtol (p, &glyph_count_end, 10);
     if (p == glyph_count_end)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
@@ -1214,18 +1260,18 @@ skip_subrs:
 
     /* Go through the charstring of each glyph in use, get the glyph
      * width and figure out which extra glyphs may be required by the
-     * seac operator. Also subset the Subrs. */
-    for (i = 0; i < font->base.num_glyphs; i++) {
-       if (font->glyphs[i].subset_index >= 0) {
-           font->build_stack.sp = 0;
-           font->ps_stack.num_other_subr_args = 0;
-           status = cairo_type1_font_subset_parse_charstring (font,
-                                                              i,
-                                                              font->glyphs[i].encrypted_charstring,
-                                                              font->glyphs[i].encrypted_charstring_length);
-           if (unlikely (status))
-               return status;
-       }
+     * seac operator (which may cause font->num_glyphs to increase
+     * while this loop is executing). Also subset the Subrs. */
+    for (j = 0; j < font->num_glyphs; j++) {
+       glyph = font->subset_index_to_glyphs[j];
+       font->build_stack.sp = 0;
+       font->ps_stack.num_other_subr_args = 0;
+       status = cairo_type1_font_subset_parse_charstring (font,
+                                                          glyph,
+                                                          font->glyphs[glyph].encrypted_charstring,
+                                                          font->glyphs[glyph].encrypted_charstring_length);
+       if (unlikely (status))
+           return status;
     }
 
     closefile_token = find_token (dict_end, font->cleartext_end, "closefile");
@@ -1513,7 +1559,7 @@ _cairo_type1_subset_init (cairo_type1_subset_t            *type1_subset,
                           cairo_bool_t                   hex_encode)
 {
     cairo_type1_font_subset_t font;
-    cairo_status_t status, status_ignored;
+    cairo_status_t status;
     unsigned long length;
     unsigned int i;
     char buf[30];
@@ -1579,7 +1625,7 @@ _cairo_type1_subset_init (cairo_type1_subset_t            *type1_subset,
  fail2:
     free (type1_subset->base_font);
  fail1:
-    status_ignored = _cairo_type1_font_subset_fini (&font);
+    _cairo_type1_font_subset_fini (&font);
 
     return status;
 }
index ee2d0e3..5bb6bfc 100644 (file)
@@ -331,6 +331,7 @@ static const cairo_surface_backend_t cairo_type3_glyph_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    NULL, /* source */
     NULL, /* acquire_source_image */
     NULL, /* release_source_image */
     NULL, /* snapshot */
index 2fdd0a1..3c2d21a 100644 (file)
@@ -52,7 +52,7 @@ CAIRO_BEGIN_DECLS
  * @Short_Description: Generic data types
  *
  * This section lists generic data types used in the cairo API.
- */
+ **/
 
 typedef struct _cairo_array cairo_array_t;
 typedef struct _cairo_backend cairo_backend_t;
@@ -66,6 +66,7 @@ typedef struct _cairo_color_stop cairo_color_stop_t;
 typedef struct _cairo_contour cairo_contour_t;
 typedef struct _cairo_contour_chain cairo_contour_chain_t;
 typedef struct _cairo_contour_iter cairo_contour_iter_t;
+typedef struct _cairo_damage cairo_damage_t;
 typedef struct _cairo_device_backend cairo_device_backend_t;
 typedef struct _cairo_font_face_backend     cairo_font_face_backend_t;
 typedef struct _cairo_gstate cairo_gstate_t;
@@ -130,7 +131,7 @@ struct _cairo_observer {
  *
  *     _cairo_hash_table_insert (hash_table, &my_entry->base);
  *
- * IMPORTANT: The caller is reponsible for initializing
+ * IMPORTANT: The caller is responsible for initializing
  * my_entry->base.hash with a hash code derived from the key. The
  * essential property of the hash code is that keys_equal must never
  * return %TRUE for two keys that have different hashes. The best hash
index 1b507fc..297f21c 100644 (file)
@@ -49,7 +49,7 @@
  * in a font.  This is most useful in implementing fonts in non-standard
  * formats, like SVG fonts and Flash fonts, but can also be used by games and
  * other application to draw "funky" fonts.
- */
+ **/
 
 /**
  * CAIRO_HAS_USER_FONT:
@@ -59,8 +59,8 @@
  * The user font backend is always built in versions of cairo that support
  * this feature (1.8 and later).
  *
- * @Since: 1.8
- */
+ * Since: 1.8
+ **/
 
 typedef struct _cairo_user_scaled_font_methods {
     cairo_user_scaled_font_init_func_t                 init;
index 2f53e11..d9ad240 100644 (file)
  * vs. in-progress development, (such as from git instead of a tar file,
  * or as a "snapshot" tar file as opposed to a "release" tar file).
  *
- * <informalexample><programlisting>
+ * <informalexample><screen>
  *  _____ Major. Always 1, until we invent a new scheme.
  * /  ___ Minor. Even/Odd = Release/Snapshot (tar files) or Branch/Head (git)
  * | /  _ Micro. Even/Odd = Tar-file/git
  * | | /
  * 1.0.0
- * </programlisting></informalexample>
+ * </screen></informalexample>
  *
  * Here are a few examples of versions that one might see.
- * <informalexample><programlisting>
+ * <informalexample><screen>
  * Releases
  * --------
  * 1.0.0 - A major release
  * 1.0.2 - A subsequent maintenance release
  * 1.2.0 - Another major release
- *
+ * &nbsp;
  * Snapshots
  * ---------
  * 1.1.2 - A snapshot (working toward the 1.2.0 release)
- *
+ * &nbsp;
  * In-progress development (eg. from git)
  * --------------------------------------
  * 1.0.1 - Development on a maintenance branch (toward 1.0.2 release)
  * 1.1.1 - Development on head (toward 1.1.2 snapshot and 1.2.0 release)
- * </programlisting></informalexample>
+ * </screen></informalexample>
  * </para>
  * <refsect2>
  * <title>Compatibility</title>
  * an encoded form suitable for direct comparison. Cairo also provides the
  * macro CAIRO_VERSION_ENCODE() to perform the encoding.
  *
- * <informalexample><programlisting>
+ * <informalexample><screen>
  * Compile-time
  * ------------
  * CAIRO_VERSION_STRING    Human-readable
  * CAIRO_VERSION           Encoded, suitable for comparison
- *
+ * &nbsp;
  * Run-time
  * --------
  * cairo_version_string()  Human-readable
  * cairo_version()         Encoded, suitable for comparison
- * </programlisting></informalexample>
+ * </screen></informalexample>
  *
  * For example, checking that the cairo version is greater than or equal
  * to 1.0.0 could be achieved at compile-time or run-time as follows:
  * </programlisting></informalexample>
  * </para>
  * </refsect2>
- */
+ **/
 
 /**
  * CAIRO_VERSION:
  *
  * The version of cairo available at compile-time, encoded using
  * CAIRO_VERSION_ENCODE().
- */
+ *
+ * Since: 1.0
+ **/
 
 /**
  * CAIRO_VERSION_MAJOR:
  *
  * The major component of the version of cairo available at compile-time.
- */
+ *
+ * Since: 1.0
+ **/
 
 /**
  * CAIRO_VERSION_MINOR:
  *
  * The minor component of the version of cairo available at compile-time.
- */
+ *
+ * Since: 1.0
+ **/
 
 /**
  * CAIRO_VERSION_MICRO:
  *
  * The micro component of the version of cairo available at compile-time.
- */
+ *
+ * Since: 1.0
+ **/
 
 /**
  * CAIRO_VERSION_STRING:
  *
  * A human-readable string literal containing the version of cairo available
  * at compile-time, in the form of "X.Y.Z".
- */
+ *
+ * Since: 1.8
+ **/
 
 /**
  * CAIRO_VERSION_ENCODE:
  * @major: the major component of the version number
  * @minor: the minor component of the version number
  * @micro: the micro component of the version number
- * 
+ *
  * This macro encodes the given cairo version into an integer.  The numbers
  * returned by %CAIRO_VERSION and cairo_version() are encoded using this macro.
  * Two encoded version numbers can be compared as integers.  The encoding ensures
  * that later versions compare greater than earlier versions.
  *
- * @Returns: the encoded version.
- */
+ * Returns: the encoded version.
+ *
+ * Since: 1.0
+ **/
 
 /**
  * CAIRO_VERSION_STRINGIZE:
  * returned by %CAIRO_VERSION_STRING and cairo_version_string() are encoded using this macro.
  * The parameters to this macro must expand to numerical literals.
  *
- * @Returns: a string literal containing the version.
+ * Returns: a string literal containing the version.
  *
- * @Since: 1.8
- */
+ * Since: 1.8
+ **/
 
 /**
  * cairo_version:
  * equivalents %CAIRO_VERSION and %CAIRO_VERSION_STRING.
  *
  * Return value: the encoded version.
+ *
+ * Since: 1.0
  **/
 int
 cairo_version (void)
@@ -235,6 +249,8 @@ cairo_version (void)
  * %CAIRO_VERSION_STRING and %CAIRO_VERSION.
  *
  * Return value: a string containing the version.
+ *
+ * Since: 1.0
  **/
 const char*
 cairo_version_string (void)
index a2ea547..6e0d9a0 100644 (file)
@@ -41,8 +41,9 @@
 #include "cairo-cache-private.h"
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
+#include "cairo-image-surface-private.h"
 #include "cairo-path-fixed-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
 #include "cairo-surface-clipper-private.h"
 
 #include <pixman.h>
@@ -248,7 +249,7 @@ _vg_format_to_pixman (VGImageFormat format,
        /* RGB{A,X} channel ordering */
     case VG_sRGBX_8888: return PIXMAN_r8g8b8x8;
     case VG_sRGBA_8888: *needs_premult_fixup = TRUE; return PIXMAN_r8g8b8a8;
-    case VG_sRGBA_8888_PRE: return PIXMAN_r8b8g8a8;
+    case VG_sRGBA_8888_PRE: return PIXMAN_r8g8b8a8;
     case VG_sRGB_565: return PIXMAN_r5g6b5;
     case VG_sRGBA_5551: return 0;
     case VG_sRGBA_4444: return 0;
@@ -466,7 +467,7 @@ _vg_surface_get_extents (void                  *abstract_surface,
 
 typedef struct _vg_path {
     VGPath path;
-    cairo_matrix_t *ctm_inverse;
+    const cairo_matrix_t *ctm_inverse;
 
     VGubyte gseg[MAX_SEG];
     VGfloat gdata[MAX_SEG*3*2];
@@ -1057,16 +1058,16 @@ setup_source (cairo_vg_context_t *context,
 }
 
 static cairo_int_status_t
-_vg_surface_stroke (void                 *abstract_surface,
-                   cairo_operator_t      op,
-                   const cairo_pattern_t*source,
-                   cairo_path_fixed_t   *path,
-                   cairo_stroke_style_t *style,
-                   cairo_matrix_t       *ctm,
-                   cairo_matrix_t       *ctm_inverse,
-                   double                tolerance,
-                   cairo_antialias_t     antialias,
-                   cairo_clip_t         *clip)
+_vg_surface_stroke (void                       *abstract_surface,
+                   cairo_operator_t            op,
+                   const cairo_pattern_t      *source,
+                   const cairo_path_fixed_t   *path,
+                   const cairo_stroke_style_t *style,
+                   const cairo_matrix_t       *ctm,
+                   const cairo_matrix_t       *ctm_inverse,
+                   double                      tolerance,
+                   cairo_antialias_t           antialias,
+                   const cairo_clip_t         *clip)
 {
     cairo_vg_surface_t *surface = abstract_surface;
     cairo_vg_context_t *context;
@@ -1133,14 +1134,14 @@ _vg_surface_stroke (void                 *abstract_surface,
 }
 
 static cairo_int_status_t
-_vg_surface_fill (void                  *abstract_surface,
-                 cairo_operator_t       op,
-                 const cairo_pattern_t *source,
-                 cairo_path_fixed_t    *path,
-                 cairo_fill_rule_t      fill_rule,
-                 double                 tolerance,
-                 cairo_antialias_t      antialias,
-                 cairo_clip_t          *clip)
+_vg_surface_fill (void                     *abstract_surface,
+                 cairo_operator_t          op,
+                 const cairo_pattern_t    *source,
+                 const cairo_path_fixed_t *path,
+                 cairo_fill_rule_t         fill_rule,
+                 double                    tolerance,
+                 cairo_antialias_t         antialias,
+                 const cairo_clip_t       *clip)
 {
     cairo_vg_surface_t *surface = abstract_surface;
     cairo_vg_context_t *context;
@@ -1200,10 +1201,10 @@ _vg_surface_fill (void                  *abstract_surface,
 }
 
 static cairo_int_status_t
-_vg_surface_paint (void             *abstract_surface,
-                  cairo_operator_t  op,
-                  const cairo_pattern_t  *source,
-                  cairo_clip_t      *clip)
+_vg_surface_paint (void                  *abstract_surface,
+                  cairo_operator_t       op,
+                  const cairo_pattern_t *source,
+                  const cairo_clip_t    *clip)
 {
     cairo_vg_surface_t *surface = abstract_surface;
     cairo_vg_context_t *context;
@@ -1268,10 +1269,10 @@ _vg_surface_paint (void             *abstract_surface,
 
 static cairo_int_status_t
 _vg_surface_mask (void                   *abstract_surface,
-                 cairo_operator_t       op,
+                 cairo_operator_t        op,
                  const cairo_pattern_t  *source,
                  const cairo_pattern_t  *mask,
-                 cairo_clip_t           *clip)
+                 const cairo_clip_t     *clip)
 {
     cairo_vg_surface_t *surface = abstract_surface;
     cairo_status_t status;
@@ -1314,8 +1315,7 @@ _vg_surface_show_glyphs (void                     *abstract_surface,
                         cairo_glyph_t          *glyphs,
                         int                     num_glyphs,
                         cairo_scaled_font_t    *scaled_font,
-                        cairo_clip_t           *clip,
-                        int                    *remaining_glyphs)
+                        const cairo_clip_t     *clip)
 {
     cairo_status_t status = CAIRO_STATUS_SUCCESS;
     cairo_path_fixed_t path;
@@ -1450,79 +1450,6 @@ _vg_surface_release_source_image (void                    *abstract_surface,
 }
 
 static cairo_status_t
-_vg_surface_acquire_dest_image (void                    *abstract_surface,
-                               cairo_rectangle_int_t   *interest_rect,
-                               cairo_image_surface_t  **image_out,
-                               cairo_rectangle_int_t   *image_rect_out,
-                               void                   **image_extra)
-{
-    cairo_vg_surface_t *surface =  abstract_surface;
-
-    *image_rect_out = *interest_rect;
-    *image_extra = NULL;
-    return _vg_get_image (surface,
-                         interest_rect->x, interest_rect->y,
-                         interest_rect->width, interest_rect->height,
-                         image_out);
-}
-
-static void
-unpremultiply_argb (uint8_t *data,
-                   int      width,
-                   int      height,
-                   int      stride)
-{
-    int i;
-
-    while (height--) {
-       uint32_t *row = (uint32_t *) data;
-
-       for (i = 0; i < width; i ++) {
-           uint32_t p = row[i];
-           uint8_t  alpha;
-
-           alpha = p >> 24;
-           if (alpha == 0) {
-               row[i] = 0;
-           } else if (alpha != 0xff) {
-               uint8_t r = (((p >> 16) & 0xff) * 255 + alpha / 2) / alpha;
-               uint8_t g = (((p >>  8) & 0xff) * 255 + alpha / 2) / alpha;
-               uint8_t b = (((p >>  0) & 0xff) * 255 + alpha / 2) / alpha;
-               row[i] = (alpha << 24) | (r << 16) | (g << 8) | (b << 0);
-           }
-       }
-
-       data += stride;
-    }
-}
-
-static void
-_vg_surface_release_dest_image (void                    *abstract_surface,
-                               cairo_rectangle_int_t   *interest_rect,
-                               cairo_image_surface_t   *image,
-                               cairo_rectangle_int_t   *image_rect,
-                               void                    *image_extra)
-{
-    cairo_vg_surface_t *surface = abstract_surface;
-    cairo_bool_t needs_unpremultiply;
-
-    _vg_format_to_pixman (surface->format, &needs_unpremultiply);
-    if (needs_unpremultiply) {
-       unpremultiply_argb (image->data,
-                           image->width, image->height,
-                           image->stride);
-    }
-
-    vgImageSubData (surface->image,
-                   image->data, image->stride,
-                   surface->format,
-                   image_rect->x, image_rect->y,
-                   image_rect->width, image_rect->height);
-
-    cairo_surface_destroy (&image->base);
-}
-
-static cairo_status_t
 _vg_surface_finish (void *abstract_surface)
 {
     cairo_vg_surface_t *surface = abstract_surface;
@@ -1552,6 +1479,7 @@ _vg_surface_finish (void *abstract_surface)
 static const cairo_surface_backend_t cairo_vg_surface_backend = {
     CAIRO_SURFACE_TYPE_VG,
     _vg_surface_finish,
+
     _cairo_default_context_create, /* XXX */
 
     _vg_surface_create_similar,
@@ -1559,36 +1487,26 @@ static const cairo_surface_backend_t cairo_vg_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_surface_default_source,
     _vg_surface_acquire_source_image,
     _vg_surface_release_source_image,
-    _vg_surface_acquire_dest_image,
-    _vg_surface_release_dest_image,
-
-    NULL, /* clone_similar */
-    NULL, /* composite */
-    NULL, /* fill_rectangles */
-    NULL, /* composite_trapezoids */
-    NULL, /* create_span_renderer */
-    NULL, /* check_span_renderer */
+    NULL, /* snapshot */
 
     NULL, /* copy_page */
     NULL, /* show_page */
+
     _vg_surface_get_extents,
-    NULL, /* old_show_glyphs */
     _vg_surface_get_font_options, /* get_font_options */
+
     NULL, /* flush */
-    NULL, /* mark_dirty_rectangle */
-    NULL, /* scaled_font_fini */
-    NULL, /* scaled_glyph_fini */
+    NULL, /* mark dirty */
 
     _vg_surface_paint,
     _vg_surface_mask,
     _vg_surface_stroke,
     _vg_surface_fill,
+    NULL, /* fill-stroke */
     _vg_surface_show_glyphs,
-
-    NULL, /* snapshot */
-    NULL, /* is_similar */
 };
 
 static cairo_surface_t *
index 82f1211..4872374 100644 (file)
@@ -246,6 +246,9 @@ cairo_gl_surface_create_for_dc (cairo_device_t      *device,
     if (device->backend->type != CAIRO_DEVICE_TYPE_GL)
         return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
 
+    if (width <= 0 || height <= 0)
+        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
+
     surface = calloc (1, sizeof (cairo_wgl_surface_t));
     if (unlikely (surface == NULL))
         return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
index 24c506a..4051a1d 100644 (file)
@@ -161,7 +161,7 @@ static cairo_always_inline double I _cairo_int64_to_double (cairo_int64_t i) { r
 #endif
 
 /*
- * 64-bit comparisions derived from lt or eq
+ * 64-bit comparisons derived from lt or eq
  */
 #define                        _cairo_uint64_le(a,b)       (!_cairo_uint64_gt(a,b))
 #define                        _cairo_uint64_ne(a,b)       (!_cairo_uint64_eq(a,b))
index 59af2c8..bba266b 100644 (file)
@@ -704,7 +704,8 @@ _cairo_int128_divrem (cairo_int128_t num, cairo_int128_t den)
  * bits then the returned remainder is equal to the divisor, and the
  * quotient is the largest representable 64 bit integer.  It is an
  * error to call this function with the high 32 bits of @num being
- * non-zero. */
+ * non-zero.
+ **/
 cairo_uquorem64_t
 _cairo_uint_96by64_32x64_divrem (cairo_uint128_t num,
                                 cairo_uint64_t den)
index fe86876..0eb2b84 100644 (file)
@@ -168,7 +168,7 @@ _cairo_xcb_connection_put_subimage (cairo_xcb_connection_t *connection,
                                    uint16_t width,
                                    uint16_t height,
                                    uint16_t cpp,
-                                   uint16_t stride,
+                                   int stride,
                                    int16_t dst_x,
                                    int16_t dst_y,
                                    uint8_t depth,
index 2c63a93..b48add1 100644 (file)
@@ -35,7 +35,7 @@
 #include "cairo-xcb-private.h"
 #include "cairo-hash-private.h"
 #include "cairo-freelist-private.h"
-#include "cairo-list-private.h"
+#include "cairo-list-inline.h"
 
 #include <xcb/xcbext.h>
 #include <xcb/bigreq.h>
@@ -776,6 +776,16 @@ _cairo_xcb_connection_get_xid (cairo_xcb_connection_t *connection)
     return xid;
 }
 
+/**
+ * cairo_xcb_device_get_connection:
+ * @device: a #cairo_device_t for the XCB backend
+ *
+ * Get the connection for the XCB device.
+ *
+ * Returns: the #xcb_connection_t for the connection
+ *
+ * Since: 1.12
+ **/
 xcb_connection_t *
 cairo_xcb_device_get_connection (cairo_device_t *device)
 {
@@ -799,6 +809,8 @@ cairo_xcb_device_get_connection (cairo_device_t *device)
  * the SHM extension.
  *
  * Use the special values -1 and -1 for disabling the SHM extension.
+ *
+ * Since: 1.12
  **/
 void
 cairo_xcb_device_debug_cap_xshm_version (cairo_device_t *device,
@@ -808,7 +820,10 @@ cairo_xcb_device_debug_cap_xshm_version (cairo_device_t *device,
     cairo_xcb_connection_t *connection = (cairo_xcb_connection_t *) device;
 
     if (device->backend->type != CAIRO_DEVICE_TYPE_XCB) {
-       _cairo_device_set_error (device, CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
+       cairo_status_t status;
+
+       status = _cairo_device_set_error (device, CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
+       (void) status;
        return;
     }
 
@@ -835,6 +850,8 @@ cairo_xcb_device_debug_cap_xshm_version (cairo_device_t *device,
  * the RENDER extension.
  *
  * Use the special values -1 and -1 for disabling the RENDER extension.
+ *
+ * Since: 1.12
  **/
 void
 cairo_xcb_device_debug_cap_xrender_version (cairo_device_t *device,
@@ -844,7 +861,10 @@ cairo_xcb_device_debug_cap_xrender_version (cairo_device_t *device,
     cairo_xcb_connection_t *connection = (cairo_xcb_connection_t *) device;
 
     if (device->backend->type != CAIRO_DEVICE_TYPE_XCB) {
-       _cairo_device_set_error (device, CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
+       cairo_status_t status;
+
+       status = _cairo_device_set_error (device, CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
+       (void) status;
        return;
     }
 
@@ -893,8 +913,20 @@ cairo_xcb_device_debug_cap_xrender_version (cairo_device_t *device,
            connection->flags &= ~CAIRO_XCB_RENDER_HAS_GRADIENTS;
     }
 }
+#if CAIRO_HAS_XLIB_XCB_FUNCTIONS
+slim_hidden_def (cairo_xcb_device_debug_cap_xrender_version);
+#endif
 
-
+/**
+ * cairo_xcb_device_debug_set_precision:
+ * @device: a #cairo_device_t for the XCB backend
+ * @precision: the precision to use
+ *
+ * Render supports two modes of precision when rendering trapezoids. Set
+ * the precision to the desired mode.
+ *
+ * Since: 1.12
+ **/
 void
 cairo_xcb_device_debug_set_precision (cairo_device_t *device,
                                      int precision)
@@ -915,6 +947,16 @@ cairo_xcb_device_debug_set_precision (cairo_device_t *device,
 slim_hidden_def (cairo_xcb_device_debug_set_precision);
 #endif
 
+/**
+ * cairo_xcb_device_debug_get_precision:
+ * @device: a #cairo_device_t for the XCB backend
+ *
+ * Get the Xrender precision mode.
+ *
+ * Returns: the render precision mode
+ *
+ * Since: 1.12
+ **/
 int
 cairo_xcb_device_debug_get_precision (cairo_device_t *device)
 {
index 42a112c..1df5a11 100644 (file)
@@ -552,7 +552,7 @@ _cairo_xcb_connection_put_subimage (cairo_xcb_connection_t *connection,
                                    uint16_t width,
                                    uint16_t height,
                                    uint16_t cpp,
-                                   uint16_t stride,
+                                   int stride,
                                    int16_t dst_x,
                                    int16_t dst_y,
                                    uint8_t depth,
@@ -806,8 +806,10 @@ slim_hidden_proto (cairo_xcb_surface_create);
 slim_hidden_proto (cairo_xcb_surface_create_for_bitmap);
 slim_hidden_proto (cairo_xcb_surface_create_with_xrender_format);
 slim_hidden_proto (cairo_xcb_surface_set_size);
+slim_hidden_proto (cairo_xcb_surface_set_drawable);
 slim_hidden_proto (cairo_xcb_device_debug_get_precision);
 slim_hidden_proto_no_warn (cairo_xcb_device_debug_set_precision);
+slim_hidden_proto_no_warn (cairo_xcb_device_debug_cap_xrender_version);
 #endif
 
 #endif /* CAIRO_XCB_PRIVATE_H */
index 18e75a5..2858d23 100644 (file)
@@ -33,6 +33,7 @@
 #include "cairoint.h"
 
 #include "cairo-xcb-private.h"
+#include "cairo-list-inline.h"
 
 struct pattern_cache_entry {
     cairo_cache_entry_t key;
@@ -57,9 +58,7 @@ _cairo_xcb_screen_finish (cairo_xcb_screen_t *screen)
                                           cairo_xcb_surface_t,
                                           link)->base;
 
-       cairo_surface_reference (surface);
        cairo_surface_finish (surface);
-       cairo_surface_destroy (surface);
     }
 
     while (! cairo_list_is_empty (&screen->pictures)) {
@@ -69,9 +68,7 @@ _cairo_xcb_screen_finish (cairo_xcb_screen_t *screen)
                                           cairo_xcb_picture_t,
                                           link)->base;
 
-       cairo_surface_reference (surface);
        cairo_surface_finish (surface);
-       cairo_surface_destroy (surface);
     }
 
     for (i = 0; i < screen->solid_cache_size; i++)
index 6972720..d655e62 100644 (file)
@@ -39,6 +39,7 @@
 #if CAIRO_HAS_XCB_SHM_FUNCTIONS
 
 #include "cairo-xcb-private.h"
+#include "cairo-list-inline.h"
 
 #include <xcb/shm.h>
 #include <sys/ipc.h>
@@ -473,7 +474,7 @@ _cairo_xcb_shm_process_pending (cairo_xcb_connection_t *connection, shm_wait_typ
                                      info->sync.sequence,
                                      (void **) &reply, NULL))
                /* We cannot be sure the server finished with this image yet, so
-                * try again later. All other shm info are guranteed to have a
+                * try again later. All other shm info are guaranteed to have a
                 * larger sequence number and thus don't have to be checked. */
                return;
            break;
index 447529d..c608c9a 100644 (file)
@@ -485,6 +485,7 @@ _cairo_xcb_pixmap_for_pattern (cairo_xcb_surface_t *target,
     case CAIRO_PATTERN_TYPE_LINEAR:
     case CAIRO_PATTERN_TYPE_RADIAL:
     case CAIRO_PATTERN_TYPE_MESH:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        return _render_to_pixmap (target, pattern, extents);
 
     default:
index 033aef9..7736ed8 100644 (file)
 #include "cairo-xcb-private.h"
 
 #include "cairo-boxes-private.h"
+#include "cairo-clip-inline.h"
 #include "cairo-clip-private.h"
 #include "cairo-composite-rectangles-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-region-private.h"
 #include "cairo-surface-offset-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
 #include "cairo-surface-subsurface-private.h"
 #include "cairo-traps-private.h"
+#include "cairo-recording-surface-inline.h"
+#include "cairo-paginated-private.h"
 
 #define PIXMAN_MAX_INT ((pixman_fixed_1 >> 1) - pixman_fixed_e) /* need to ensure deltas also fit */
 
-/**
- * SECTION:cairo-xcb-xrender
- * @Title: XCB Surfaces
- * @Short_Description: X Window System rendering using the XCB library and the X Render extension
- * @See_Also: #cairo_surface_t
- *
- * The XCB surface is used to render cairo graphics to X Window System
- * windows and pixmaps using the XCB library and its X Render extension.
- *
- * Note that the XCB surface automatically takes advantage of the X Render
- * extension if it is available.
- */
-
 static cairo_status_t
 _clip_and_composite_boxes (cairo_xcb_surface_t *dst,
                           cairo_operator_t op,
@@ -468,6 +459,7 @@ _cairo_xcb_picture_set_matrix (cairo_xcb_picture_t *picture,
     ignored = _cairo_matrix_to_pixman_matrix_offset (matrix, filter, xc, yc,
                                                     pixman_transform,
                                                     &picture->x, &picture->y);
+    (void) ignored;
 
     if (memcmp (&picture->transform, &transform, sizeof (xcb_render_transform_t))) {
        _cairo_xcb_connection_render_set_picture_transform (_picture_to_connection (picture),
@@ -1031,6 +1023,93 @@ _copy_to_picture (cairo_xcb_surface_t *source)
     return picture;
 }
 
+static void
+_cairo_xcb_surface_setup_surface_picture(cairo_xcb_picture_t *picture,
+                                        const cairo_surface_pattern_t *pattern,
+                                        const cairo_rectangle_int_t *extents)
+{
+    cairo_filter_t filter;
+
+    filter = pattern->base.filter;
+    if (filter != CAIRO_FILTER_NEAREST &&
+       _cairo_matrix_has_unity_scale (&pattern->base.matrix) &&
+       _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.x0)) &&
+       _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.y0)))
+    {
+       filter = CAIRO_FILTER_NEAREST;
+    }
+    _cairo_xcb_picture_set_filter (picture, filter);
+
+    _cairo_xcb_picture_set_matrix (picture,
+                                  &pattern->base.matrix, filter,
+                                  extents->x + extents->width/2.,
+                                  extents->y + extents->height/2.);
+
+
+    _cairo_xcb_picture_set_extend (picture, pattern->base.extend);
+    _cairo_xcb_picture_set_component_alpha (picture, pattern->base.has_component_alpha);
+}
+
+static cairo_xcb_picture_t *
+record_to_picture (cairo_surface_t *target,
+                  const cairo_surface_pattern_t *pattern,
+                  const cairo_rectangle_int_t *extents)
+{
+    cairo_surface_pattern_t tmp_pattern;
+    cairo_xcb_picture_t *picture;
+    cairo_status_t status;
+    cairo_matrix_t matrix;
+    cairo_surface_t *tmp;
+    cairo_surface_t *source = pattern->surface;
+
+    /* XXX: The following is more or less copied from cairo-xlibs-ource.c,
+     * record_source() and recording_pattern_get_surface(), can we share a
+     * single version?
+     */
+
+    /* First get the 'real' recording surface */
+    if (_cairo_surface_is_paginated (source))
+       source = _cairo_paginated_surface_get_recording (source);
+    if (_cairo_surface_is_snapshot (source))
+       source = _cairo_surface_snapshot_get_target (source);
+    assert (_cairo_surface_is_recording (source));
+
+    /* Now draw the recording surface to an xcb surface */
+    tmp = _cairo_surface_create_similar_scratch (target,
+                                                source->content,
+                                                extents->width,
+                                                extents->height);
+    if (tmp->status != CAIRO_STATUS_SUCCESS) {
+       return (cairo_xcb_picture_t *) tmp;
+    }
+
+    cairo_matrix_init_translate (&matrix, extents->x, extents->y);
+    status = _cairo_recording_surface_replay_with_clip (source,
+                                                       &matrix, tmp,
+                                                       NULL);
+    if (unlikely (status)) {
+       cairo_surface_destroy (tmp);
+       return (cairo_xcb_picture_t *) _cairo_surface_create_in_error (status);
+    }
+
+    /* Now that we have drawn this to an xcb surface, try again with that */
+    _cairo_pattern_init_static_copy (&tmp_pattern.base, &pattern->base);
+    tmp_pattern.surface = tmp;
+
+    if (extents->x | extents->y) {
+       cairo_matrix_t *pmatrix = &tmp_pattern.base.matrix;
+
+       cairo_matrix_init_translate (&matrix, -extents->x, -extents->y);
+       cairo_matrix_multiply (pmatrix, pmatrix, &matrix);
+    }
+
+    picture = _copy_to_picture ((cairo_xcb_surface_t *) tmp);
+    if (picture->base.status == CAIRO_STATUS_SUCCESS)
+       _cairo_xcb_surface_setup_surface_picture (picture, &tmp_pattern, extents);
+    cairo_surface_destroy (tmp);
+    return picture;
+}
+
 static cairo_xcb_picture_t *
 _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
                            const cairo_surface_pattern_t *pattern,
@@ -1038,22 +1117,23 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
 {
     cairo_surface_t *source = pattern->surface;
     cairo_xcb_picture_t *picture;
-    cairo_filter_t filter;
 
     picture = (cairo_xcb_picture_t *)
        _cairo_surface_has_snapshot (source, &_cairo_xcb_picture_backend);
     if (picture != NULL) {
        if (picture->screen == target->screen) {
            picture = (cairo_xcb_picture_t *) cairo_surface_reference (&picture->base);
-           goto setup_picture;
+           _cairo_xcb_surface_setup_surface_picture (picture, pattern, extents);
+           return picture;
        }
        picture = NULL;
     }
 
-    if (source->type == CAIRO_SURFACE_TYPE_XCB && ((cairo_xcb_surface_t *) source)->fallback == NULL)
+    if (source->type == CAIRO_SURFACE_TYPE_XCB)
     {
        if (source->backend->type == CAIRO_SURFACE_TYPE_XCB) {
-           if (((cairo_xcb_surface_t *) source)->screen == target->screen) {
+           cairo_xcb_surface_t *xcb = (cairo_xcb_surface_t *) source;
+           if (xcb->screen == target->screen && xcb->fallback == NULL) {
                picture = _copy_to_picture ((cairo_xcb_surface_t *) source);
                if (unlikely (picture->base.status))
                    return picture;
@@ -1063,7 +1143,7 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
            cairo_xcb_surface_t *xcb = (cairo_xcb_surface_t *) sub->target;
 
            /* XXX repeat interval with source clipping? */
-           if (FALSE && xcb->screen == target->screen) {
+           if (FALSE && xcb->screen == target->screen && xcb->fallback == NULL) {
                xcb_rectangle_t rect;
 
                picture = _copy_to_picture (xcb);
@@ -1088,7 +1168,7 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
            cairo_surface_snapshot_t *snap = (cairo_surface_snapshot_t *) source;
            cairo_xcb_surface_t *xcb = (cairo_xcb_surface_t *) snap->target;
 
-           if (xcb->screen == target->screen) {
+           if (xcb->screen == target->screen && xcb->fallback == NULL) {
                picture = _copy_to_picture (xcb);
                if (unlikely (picture->base.status))
                    return picture;
@@ -1096,11 +1176,12 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
        }
     }
 #if CAIRO_HAS_XLIB_XCB_FUNCTIONS
-    else if (source->type == CAIRO_SURFACE_TYPE_XLIB && ((cairo_xlib_xcb_surface_t *) source)->xcb->fallback == NULL)
+    else if (source->type == CAIRO_SURFACE_TYPE_XLIB)
     {
        if (source->backend->type == CAIRO_SURFACE_TYPE_XLIB) {
-           if (((cairo_xlib_xcb_surface_t *) source)->xcb->screen == target->screen) {
-               picture = _copy_to_picture (((cairo_xlib_xcb_surface_t *) source)->xcb);
+           cairo_xcb_surface_t *xcb = ((cairo_xlib_xcb_surface_t *) source)->xcb;
+           if (xcb->screen == target->screen && xcb->fallback == NULL) {
+               picture = _copy_to_picture (xcb);
                if (unlikely (picture->base.status))
                    return picture;
            }
@@ -1108,7 +1189,7 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
            cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) source;
            cairo_xcb_surface_t *xcb = ((cairo_xlib_xcb_surface_t *) sub->target)->xcb;
 
-           if (FALSE && xcb->screen == target->screen) {
+           if (FALSE && xcb->screen == target->screen && xcb->fallback == NULL) {
                xcb_rectangle_t rect;
 
                picture = _copy_to_picture (xcb);
@@ -1129,11 +1210,11 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
                picture->width  = rect.width;
                picture->height = rect.height;
            }
-       } else if (source->backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) {
+       } else if (_cairo_surface_is_snapshot (source)) {
            cairo_surface_snapshot_t *snap = (cairo_surface_snapshot_t *) source;
            cairo_xcb_surface_t *xcb = ((cairo_xlib_xcb_surface_t *) snap->target)->xcb;
 
-           if (xcb->screen == target->screen) {
+           if (xcb->screen == target->screen && xcb->fallback == NULL) {
                picture = _copy_to_picture (xcb);
                if (unlikely (picture->base.status))
                    return picture;
@@ -1147,6 +1228,14 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
        /* pixmap from texture */
     }
 #endif
+    else if (source->type == CAIRO_SURFACE_TYPE_RECORDING)
+    {
+       /* We have to skip the call to attach_snapshot() because we possibly
+        * only drew part of the recording surface.
+        * TODO: When can we safely attach a snapshot?
+        */
+       return record_to_picture(&target->base, pattern, extents);
+    }
 
     if (picture == NULL) {
        cairo_image_surface_t *image;
@@ -1188,26 +1277,7 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target,
                                    &picture->base,
                                    NULL);
 
-setup_picture:
-    filter = pattern->base.filter;
-    if (filter != CAIRO_FILTER_NEAREST &&
-       _cairo_matrix_has_unity_scale (&pattern->base.matrix) &&
-       _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.x0)) &&
-       _cairo_fixed_is_integer (_cairo_fixed_from_double (pattern->base.matrix.y0)))
-    {
-       filter = CAIRO_FILTER_NEAREST;
-    }
-    _cairo_xcb_picture_set_filter (picture, filter);
-
-    _cairo_xcb_picture_set_matrix (picture,
-                                  &pattern->base.matrix, filter,
-                                  extents->x + extents->width/2.,
-                                  extents->y + extents->height/2.);
-
-
-    _cairo_xcb_picture_set_extend (picture, pattern->base.extend);
-    _cairo_xcb_picture_set_component_alpha (picture, pattern->base.has_component_alpha);
-
+    _cairo_xcb_surface_setup_surface_picture (picture, pattern, extents);
     return picture;
 }
 
@@ -1240,9 +1310,10 @@ _cairo_xcb_picture_for_pattern (cairo_xcb_surface_t *target,
        return _cairo_xcb_surface_picture (target,
                                           (cairo_surface_pattern_t *) pattern,
                                           extents);
-    case CAIRO_PATTERN_TYPE_MESH:
     default:
        ASSERT_NOT_REACHED;
+    case CAIRO_PATTERN_TYPE_MESH:
+    case CAIRO_PATTERN_TYPE_RASTER_SOURCE:
        return _render_to_picture (target, pattern, extents);
     }
 }
@@ -3543,7 +3614,7 @@ _cairo_xcb_surface_render_stroke_via_mask (cairo_xcb_surface_t            *dst,
 
     x = extents->bounded.x;
     y = extents->bounded.y;
-    image = _cairo_xcb_surface_create_similar_image (dst, CAIRO_CONTENT_ALPHA,
+    image = _cairo_xcb_surface_create_similar_image (dst, CAIRO_FORMAT_A8,
                                                     extents->bounded.width,
                                                     extents->bounded.height);
     if (unlikely (image->status))
@@ -3684,8 +3755,7 @@ _cairo_xcb_surface_render_fill_via_mask (cairo_xcb_surface_t      *dst,
 
     x = extents->bounded.x;
     y = extents->bounded.y;
-    image = _cairo_xcb_surface_create_similar_image (dst,
-                                                    CAIRO_CONTENT_ALPHA,
+    image = _cairo_xcb_surface_create_similar_image (dst, CAIRO_FORMAT_A8,
                                                     extents->bounded.width,
                                                     extents->bounded.height);
     if (unlikely (image->status))
@@ -3795,7 +3865,8 @@ _cairo_xcb_surface_render_glyphs_via_mask (cairo_xcb_surface_t            *dst,
 
     x = extents->bounded.x;
     y = extents->bounded.y;
-    image = _cairo_xcb_surface_create_similar_image (dst, content,
+    image = _cairo_xcb_surface_create_similar_image (dst,
+                                                    _cairo_format_from_content (content),
                                                     extents->bounded.width,
                                                     extents->bounded.height);
     if (unlikely (image->status))
index 75a1f87..c6a1d29 100644 (file)
@@ -45,6 +45,7 @@
 
 #include "cairo-composite-rectangles-private.h"
 #include "cairo-default-context-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-image-surface-private.h"
 #include "cairo-surface-backend-private.h"
 
@@ -65,14 +66,16 @@ slim_hidden_proto (cairo_xcb_surface_create_with_xrender_format);
  *
  * Note that the XCB surface automatically takes advantage of the X render
  * extension if it is available.
- */
+ **/
 
 /**
  * CAIRO_HAS_XCB_SURFACE:
  *
  * Defined if the xcb surface backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.12
+ **/
 
 cairo_surface_t *
 _cairo_xcb_surface_create_similar (void                        *abstract_other,
@@ -172,6 +175,12 @@ _cairo_xcb_surface_create_similar_image (void                      *abstract_other,
     cairo_status_t status;
     pixman_format_code_t pixman_format;
 
+    if (unlikely(width  > XLIB_COORD_MAX ||
+                height > XLIB_COORD_MAX ||
+                width  <= 0 ||
+                height <= 0))
+       return NULL;
+
     pixman_format = _cairo_format_to_pixman_format_code (format);
 
     status = _cairo_xcb_shm_image_create (connection, pixman_format,
@@ -179,6 +188,7 @@ _cairo_xcb_surface_create_similar_image (void                       *abstract_other,
                                          &shm_info);
     if (unlikely (status))
        return _cairo_surface_create_in_error (status);
+
     return &image->base;
 }
 
@@ -229,7 +239,7 @@ _cairo_xcb_surface_create_shm_image (cairo_xcb_connection_t *connection,
 {
     cairo_surface_t *image;
     cairo_xcb_shm_info_t *shm_info;
-    cairo_status_t status;
+    cairo_int_status_t status;
     size_t stride;
 
     *shm_info_out = NULL;
@@ -240,8 +250,12 @@ _cairo_xcb_surface_create_shm_image (cairo_xcb_connection_t *connection,
                                                      stride * height,
                                                      might_reuse,
                                                      &shm_info);
-    if (unlikely (status))
+    if (unlikely (status)) {
+       if (status == CAIRO_INT_STATUS_UNSUPPORTED)
+           return NULL;
+
        return _cairo_surface_create_in_error (status);
+    }
 
     image = _cairo_image_surface_create_with_pixman_format (shm_info->mem,
                                                            pixman_format,
@@ -354,9 +368,7 @@ _get_image (cairo_xcb_surface_t              *surface,
     if (use_shm) {
        image = _get_shm_image (surface, x, y, width, height);
        if (image) {
-           /* XXX This only wants to catch SHM exhaustion,
-            * not other allocation failures. */
-           if (image->status != CAIRO_STATUS_NO_MEMORY) {
+           if (image->status == CAIRO_STATUS_SUCCESS) {
                _cairo_xcb_connection_release (connection);
                return image;
            }
@@ -448,6 +460,21 @@ FAIL:
     return _cairo_surface_create_in_error (status);
 }
 
+static cairo_surface_t *
+_cairo_xcb_surface_source (void *abstract_surface,
+                          cairo_rectangle_int_t *extents)
+{
+    cairo_xcb_surface_t *surface = abstract_surface;
+
+    if (extents) {
+       extents->x = extents->y = 0;
+       extents->width  = surface->width;
+       extents->height = surface->height;
+    }
+
+    return &surface->base;
+}
+
 static cairo_status_t
 _cairo_xcb_surface_acquire_source_image (void *abstract_surface,
                                         cairo_image_surface_t **image_out,
@@ -1043,6 +1070,7 @@ const cairo_surface_backend_t _cairo_xcb_surface_backend = {
     _cairo_xcb_surface_map_to_image,
     _cairo_xcb_surface_unmap,
 
+    _cairo_xcb_surface_source,
     _cairo_xcb_surface_acquire_source_image,
     _cairo_xcb_surface_release_source_image,
     NULL, /* snapshot */
@@ -1147,7 +1175,7 @@ _cairo_xcb_screen_from_visual (xcb_connection_t *connection,
 
 /**
  * cairo_xcb_surface_create:
- * @xcb_connection: an XCB connection
+ * @connection: an XCB connection
  * @drawable: an XCB drawable
  * @visual: the visual to use for drawing to @drawable. The depth
  *          of the visual must match the depth of the drawable.
@@ -1175,9 +1203,11 @@ _cairo_xcb_screen_from_visual (xcb_connection_t *connection,
  * This function always returns a valid pointer, but it will return a
  * pointer to a "nil" surface if an error such as out of memory
  * occurs. You can use cairo_surface_status() to check for this.
+ *
+ * Since: 1.12
  **/
 cairo_surface_t *
-cairo_xcb_surface_create (xcb_connection_t  *xcb_connection,
+cairo_xcb_surface_create (xcb_connection_t  *connection,
                          xcb_drawable_t     drawable,
                          xcb_visualtype_t  *visual,
                          int                width,
@@ -1190,7 +1220,7 @@ cairo_xcb_surface_create (xcb_connection_t  *xcb_connection,
     xcb_render_pictformat_t xrender_format;
     int depth;
 
-    if (xcb_connection_has_error (xcb_connection))
+    if (xcb_connection_has_error (connection))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_WRITE_ERROR));
 
     if (unlikely (width > XLIB_COORD_MAX || height > XLIB_COORD_MAX))
@@ -1198,7 +1228,7 @@ cairo_xcb_surface_create (xcb_connection_t  *xcb_connection,
     if (unlikely (width <= 0 || height <= 0))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
 
-    xcb_screen = _cairo_xcb_screen_from_visual (xcb_connection, visual, &depth);
+    xcb_screen = _cairo_xcb_screen_from_visual (connection, visual, &depth);
     if (unlikely (xcb_screen == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_VISUAL));
 
@@ -1221,7 +1251,7 @@ cairo_xcb_surface_create (xcb_connection_t  *xcb_connection,
     if (! _pixman_format_from_masks (&image_masks, &pixman_format))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
 
-    screen = _cairo_xcb_screen_get (xcb_connection, xcb_screen);
+    screen = _cairo_xcb_screen_get (connection, xcb_screen);
     if (unlikely (screen == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
 
@@ -1240,11 +1270,11 @@ slim_hidden_def (cairo_xcb_surface_create);
 
 /**
  * cairo_xcb_surface_create_for_bitmap:
- * @xcb_connection: an XCB connection
- * @xcb_screen: the XCB screen associated with @bitmap
+ * @connection: an XCB connection
+ * @screen: the XCB screen associated with @bitmap
  * @bitmap: an XCB drawable (a Pixmap with depth 1)
- * @width: the current width of @drawable
- * @height: the current height of @drawable
+ * @width: the current width of @bitmap
+ * @height: the current height of @bitmap
  *
  * Creates an XCB surface that draws to the given bitmap.
  * This will be drawn to as a %CAIRO_FORMAT_A1 object.
@@ -1256,17 +1286,19 @@ slim_hidden_def (cairo_xcb_surface_create);
  * This function always returns a valid pointer, but it will return a
  * pointer to a "nil" surface if an error such as out of memory
  * occurs. You can use cairo_surface_status() to check for this.
+ *
+ * Since: 1.12
  **/
 cairo_surface_t *
-cairo_xcb_surface_create_for_bitmap (xcb_connection_t  *xcb_connection,
-                                    xcb_screen_t       *xcb_screen,
+cairo_xcb_surface_create_for_bitmap (xcb_connection_t  *connection,
+                                    xcb_screen_t       *screen,
                                     xcb_pixmap_t        bitmap,
                                     int                 width,
                                     int                 height)
 {
-    cairo_xcb_screen_t *screen;
+    cairo_xcb_screen_t *cairo_xcb_screen;
 
-    if (xcb_connection_has_error (xcb_connection))
+    if (xcb_connection_has_error (connection))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_WRITE_ERROR));
 
     if (width > XLIB_COORD_MAX || height > XLIB_COORD_MAX)
@@ -1274,13 +1306,13 @@ cairo_xcb_surface_create_for_bitmap (xcb_connection_t   *xcb_connection,
     if (unlikely (width <= 0 || height <= 0))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
 
-    screen = _cairo_xcb_screen_get (xcb_connection, xcb_screen);
-    if (unlikely (screen == NULL))
+    cairo_xcb_screen = _cairo_xcb_screen_get (connection, screen);
+    if (unlikely (cairo_xcb_screen == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
 
-    return _cairo_xcb_surface_create_internal (screen, bitmap, FALSE,
+    return _cairo_xcb_surface_create_internal (cairo_xcb_screen, bitmap, FALSE,
                                               PIXMAN_a1,
-                                              screen->connection->standard_formats[CAIRO_FORMAT_A1],
+                                              cairo_xcb_screen->connection->standard_formats[CAIRO_FORMAT_A1],
                                               width, height);
 }
 #if CAIRO_HAS_XLIB_XCB_FUNCTIONS
@@ -1317,20 +1349,22 @@ slim_hidden_def (cairo_xcb_surface_create_for_bitmap);
  * This function always returns a valid pointer, but it will return a
  * pointer to a "nil" surface if an error such as out of memory
  * occurs. You can use cairo_surface_status() to check for this.
+ *
+ * Since: 1.12
  **/
 cairo_surface_t *
-cairo_xcb_surface_create_with_xrender_format (xcb_connection_t     *xcb_connection,
-                                             xcb_screen_t          *xcb_screen,
+cairo_xcb_surface_create_with_xrender_format (xcb_connection_t     *connection,
+                                             xcb_screen_t          *screen,
                                              xcb_drawable_t         drawable,
                                              xcb_render_pictforminfo_t *format,
                                              int                    width,
                                              int                    height)
 {
-    cairo_xcb_screen_t *screen;
+    cairo_xcb_screen_t *cairo_xcb_screen;
     cairo_format_masks_t image_masks;
     pixman_format_code_t pixman_format;
 
-    if (xcb_connection_has_error (xcb_connection))
+    if (xcb_connection_has_error (connection))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_WRITE_ERROR));
 
     if (width > XLIB_COORD_MAX || height > XLIB_COORD_MAX)
@@ -1362,11 +1396,11 @@ cairo_xcb_surface_create_with_xrender_format (xcb_connection_t      *xcb_connecti
     if (! _pixman_format_from_masks (&image_masks, &pixman_format))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
 
-    screen = _cairo_xcb_screen_get (xcb_connection, xcb_screen);
-    if (unlikely (screen == NULL))
+    cairo_xcb_screen = _cairo_xcb_screen_get (connection, screen);
+    if (unlikely (cairo_xcb_screen == NULL))
        return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
 
-    return _cairo_xcb_surface_create_internal (screen,
+    return _cairo_xcb_surface_create_internal (cairo_xcb_screen,
                                               drawable,
                                               FALSE,
                                               pixman_format,
@@ -1377,6 +1411,18 @@ cairo_xcb_surface_create_with_xrender_format (xcb_connection_t       *xcb_connecti
 slim_hidden_def (cairo_xcb_surface_create_with_xrender_format);
 #endif
 
+/* This does the necessary fixup when a surface's drawable or size changed. */
+static void
+_drawable_changed (cairo_xcb_surface_t *surface)
+{
+    _cairo_surface_begin_modification (&surface->base);
+    _cairo_boxes_clear (&surface->fallback_damage);
+    cairo_surface_destroy (&surface->fallback->base);
+
+    surface->deferred_clear = FALSE;
+    surface->fallback = NULL;
+}
+
 /**
  * cairo_xcb_surface_set_size:
  * @surface: a #cairo_surface_t for the XCB backend
@@ -1392,6 +1438,11 @@ slim_hidden_def (cairo_xcb_surface_create_with_xrender_format);
  *
  * A pixmap can never change size, so it is never necessary to call
  * this function on a surface created for a pixmap.
+ *
+ * If cairo_surface_flush() wasn't called, some pending operations
+ * might be discarded.
+ *
+ * Since: 1.12
  **/
 void
 cairo_xcb_surface_set_size (cairo_surface_t *abstract_surface,
@@ -1422,9 +1473,86 @@ cairo_xcb_surface_set_size (cairo_surface_t *abstract_surface,
     }
 
     surface = (cairo_xcb_surface_t *) abstract_surface;
+
+    _drawable_changed(surface);
     surface->width  = width;
     surface->height = height;
 }
 #if CAIRO_HAS_XLIB_XCB_FUNCTIONS
 slim_hidden_def (cairo_xcb_surface_set_size);
 #endif
+
+/**
+ * cairo_xcb_surface_set_drawable:
+ * @surface: a #cairo_surface_t for the XCB backend
+ * @drawable: the new drawable of the surface
+ * @width: the new width of the surface
+ * @height: the new height of the surface
+ *
+ * Informs cairo of the new drawable and size of the XCB drawable underlying the
+ * surface.
+ *
+ * If cairo_surface_flush() wasn't called, some pending operations
+ * might be discarded.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_xcb_surface_set_drawable (cairo_surface_t *abstract_surface,
+                               xcb_drawable_t  drawable,
+                               int             width,
+                               int             height)
+{
+    cairo_xcb_surface_t *surface;
+
+    if (unlikely (abstract_surface->status))
+       return;
+    if (unlikely (abstract_surface->finished)) {
+       _cairo_surface_set_error (abstract_surface,
+                                 _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
+       return;
+    }
+
+
+    if (abstract_surface->type != CAIRO_SURFACE_TYPE_XCB) {
+       _cairo_surface_set_error (abstract_surface,
+                                 _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
+       return;
+    }
+
+    if (width > XLIB_COORD_MAX || height > XLIB_COORD_MAX || width <= 0 || height <= 0) {
+       _cairo_surface_set_error (abstract_surface,
+                                 _cairo_error (CAIRO_STATUS_INVALID_SIZE));
+       return;
+    }
+
+    surface = (cairo_xcb_surface_t *) abstract_surface;
+
+    /* XXX: and what about this case? */
+    if (surface->owns_pixmap)
+           return;
+
+    _drawable_changed (surface);
+
+    if (surface->drawable != drawable) {
+           cairo_status_t status;
+           status = _cairo_xcb_connection_acquire (surface->connection);
+           if (unlikely (status))
+                   return;
+
+           if (surface->picture != XCB_NONE) {
+                   _cairo_xcb_connection_render_free_picture (surface->connection,
+                                                              surface->picture);
+                   surface->picture = XCB_NONE;
+           }
+
+           _cairo_xcb_connection_release (surface->connection);
+
+           surface->drawable = drawable;
+    }
+    surface->width  = width;
+    surface->height = height;
+}
+#if CAIRO_HAS_XLIB_XCB_FUNCTIONS
+slim_hidden_def (cairo_xcb_surface_set_drawable);
+#endif
index 4bfb0b5..e321d84 100644 (file)
@@ -75,6 +75,12 @@ cairo_xcb_surface_set_size (cairo_surface_t *surface,
                            int              width,
                            int              height);
 
+cairo_public void
+cairo_xcb_surface_set_drawable (cairo_surface_t *surface,
+                               xcb_drawable_t  drawable,
+                               int             width,
+                               int             height);
+
 cairo_public xcb_connection_t *
 cairo_xcb_device_get_connection (cairo_device_t *device);
 
index fe871ab..aaa71d5 100644 (file)
@@ -52,6 +52,7 @@
 #include "cairo-xlib-surface-private.h"
 
 #include "cairo-boxes-private.h"
+#include "cairo-clip-inline.h"
 #include "cairo-compositor-private.h"
 #include "cairo-image-surface-private.h"
 #include "cairo-pattern-private.h"
@@ -96,6 +97,36 @@ static cairo_bool_t fill_box (cairo_box_t *box, void *closure)
     return TRUE;
 }
 
+static void
+_characterize_field (uint32_t mask, int *width, int *shift)
+{
+    *width = _cairo_popcount (mask);
+    /* The final '& 31' is to force a 0 mask to result in 0 shift. */
+    *shift = _cairo_popcount ((mask - 1) & ~mask) & 31;
+}
+
+static uint32_t
+color_to_pixel (cairo_xlib_surface_t    *dst,
+               const cairo_color_t     *color)
+{
+    uint32_t rgba = 0;
+    int width, shift;
+
+    _characterize_field (dst->a_mask, &width, &shift);
+    rgba |= color->alpha_short >> (16 - width) << shift;
+
+    _characterize_field (dst->r_mask, &width, &shift);
+    rgba |= color->red_short >> (16 - width) << shift;
+
+    _characterize_field (dst->g_mask, &width, &shift);
+    rgba |= color->green_short >> (16 - width) << shift;
+
+    _characterize_field (dst->b_mask, &width, &shift);
+    rgba |= color->blue_short >> (16 - width) << shift;
+
+    return rgba;
+}
+
 static cairo_int_status_t
 fill_boxes (cairo_xlib_surface_t    *dst,
            const cairo_color_t     *color,
@@ -112,7 +143,7 @@ fill_boxes (cairo_xlib_surface_t    *dst,
     fb.dpy = dst->display->display;
     fb.drawable = dst->drawable;
 
-    if (dst->visual && dst->visual->class != TrueColor) {
+    if (dst->visual && dst->visual->class != TrueColor && 0) {
        cairo_solid_pattern_t solid;
        cairo_surface_attributes_t attrs;
 
@@ -136,10 +167,16 @@ fill_boxes (cairo_xlib_surface_t    *dst,
                      - (dst->base.device_transform.y0 + attrs.y_offset));
        XSetTile (fb.dpy, fb.gc, ((cairo_xlib_surface_t *) dither)->drawable);
     } else {
-       //XChangeGC (fb.dpy, fb.gc, GCForeground, color_to_pixel (&color));
+       XGCValues gcv;
+
+       gcv.foreground = color_to_pixel (dst, color);
+       gcv.fill_style = FillSolid;
+
+       XChangeGC (fb.dpy, fb.gc, GCFillStyle | GCForeground, &gcv);
     }
 
     _cairo_boxes_for_each_box (boxes, fill_box, &fb);
+
     _cairo_xlib_surface_put_gc (dst->display, dst, fb.gc);
 
     cairo_surface_destroy (dither);
@@ -268,6 +305,19 @@ static cairo_bool_t image_upload_box (cairo_box_t *box, void *closure)
                                           x, y) == CAIRO_STATUS_SUCCESS;
 }
 
+static cairo_bool_t
+surface_matches_image_format (cairo_xlib_surface_t *surface,
+                             cairo_image_surface_t *image)
+{
+    cairo_format_masks_t format;
+
+    return (_pixman_format_to_masks (image->pixman_format, &format) &&
+           (format.alpha_mask == surface->a_mask || surface->a_mask == 0) &&
+           (format.red_mask   == surface->r_mask || surface->r_mask == 0) &&
+           (format.green_mask == surface->g_mask || surface->g_mask == 0) &&
+           (format.blue_mask  == surface->b_mask || surface->b_mask == 0));
+}
+
 static cairo_status_t
 upload_image_inplace (cairo_xlib_surface_t *dst,
                      const cairo_pattern_t *source,
@@ -291,6 +341,9 @@ upload_image_inplace (cairo_xlib_surface_t *dst,
     if (image->depth != dst->depth)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
+    if (! surface_matches_image_format (dst, image))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
     /* XXX subsurface */
 
     if (! _cairo_matrix_is_integer_translation (&source->matrix,
@@ -343,18 +396,30 @@ copy_boxes (cairo_xlib_surface_t *dst,
     if (source->type != CAIRO_PATTERN_TYPE_SURFACE)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
+    /* XXX subsurface */
+
     pattern = (const cairo_surface_pattern_t *) source;
-    if (pattern->surface->type != CAIRO_SURFACE_TYPE_XLIB)
+    if (pattern->surface->backend->type != CAIRO_SURFACE_TYPE_XLIB)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
     src = (cairo_xlib_surface_t *) pattern->surface;
     if (src->depth != dst->depth)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    if (! _cairo_xlib_surface_same_screen (dst, src))
+    /* We can only have a single control for subwindow_mode on the
+     * GC. If we have a Window destination, we need to set ClipByChildren,
+     * but if we have a Window source, we need IncludeInferiors. If we have
+     * both a Window destination and source, we must fallback. There is
+     * no convenient way to detect if a drawable is a Pixmap or Window,
+     * therefore we can only rely on those surfaces that we created
+     * ourselves to be Pixmaps, and treat everything else as a potential
+     * Window.
+     */
+    if (! src->owns_pixmap && ! dst->owns_pixmap)
        return CAIRO_INT_STATUS_UNSUPPORTED;
 
-    /* XXX subsurface */
+    if (! _cairo_xlib_surface_same_screen (dst, src))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
 
     if (! _cairo_matrix_is_integer_translation (&source->matrix,
                                                &cb.tx, &cb.ty))
@@ -374,12 +439,27 @@ copy_boxes (cairo_xlib_surface_t *dst,
     if (unlikely (status))
        return status;
 
+    if (! src->owns_pixmap) {
+       XGCValues gcv;
+
+       gcv.subwindow_mode = IncludeInferiors;
+       XChangeGC (dst->display->display, cb.gc, GCSubwindowMode, &gcv);
+    }
+
+    status = CAIRO_STATUS_SUCCESS;
     if (! _cairo_boxes_for_each_box (boxes, copy_box, &cb))
-       return CAIRO_INT_STATUS_UNSUPPORTED;
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (! src->owns_pixmap) {
+       XGCValues gcv;
+
+       gcv.subwindow_mode = ClipByChildren;
+       XChangeGC (dst->display->display, cb.gc, GCSubwindowMode, &gcv);
+    }
 
     _cairo_xlib_surface_put_gc (dst->display, dst, cb.gc);
 
-    return CAIRO_STATUS_SUCCESS;
+    return status;
 }
 
 static cairo_status_t
@@ -400,7 +480,8 @@ draw_boxes (cairo_composite_rectangles_t *extents,
     if (op == CAIRO_OPERATOR_CLEAR)
        op = CAIRO_OPERATOR_SOURCE;
 
-    if (_cairo_pattern_is_opaque (src, &extents->bounded))
+    if (op == CAIRO_OPERATOR_OVER &&
+       _cairo_pattern_is_opaque (src, &extents->bounded))
        op = CAIRO_OPERATOR_SOURCE;
 
     if (dst->base.is_clear && op == CAIRO_OPERATOR_OVER)
@@ -463,7 +544,8 @@ _cairo_xlib_core_compositor_stroke (const cairo_compositor_t        *compositor,
     cairo_int_status_t status;
 
     status = CAIRO_INT_STATUS_UNSUPPORTED;
-    if (_cairo_path_fixed_stroke_is_rectilinear (path)) {
+    if (extents->clip->path == NULL &&
+       _cairo_path_fixed_stroke_is_rectilinear (path)) {
        cairo_boxes_t boxes;
 
        _cairo_boxes_init_with_clip (&boxes, extents->clip);
@@ -491,7 +573,8 @@ _cairo_xlib_core_compositor_fill (const cairo_compositor_t  *compositor,
     cairo_int_status_t status;
 
     status = CAIRO_INT_STATUS_UNSUPPORTED;
-    if (_cairo_path_fixed_fill_is_rectilinear (path)) {
+    if (extents->clip->path == NULL &&
+       _cairo_path_fixed_fill_is_rectilinear (path)) {
        cairo_boxes_t boxes;
 
        _cairo_boxes_init_with_clip (&boxes, extents->clip);
index fd7253c..e685c7c 100644 (file)
@@ -41,6 +41,7 @@
 #include "cairo-xlib-xrender-private.h"
 #include "cairo-freelist-private.h"
 #include "cairo-error-private.h"
+#include "cairo-list-inline.h"
 
 #include <X11/Xlibint.h>       /* For XESetCloseDisplay */
 
@@ -146,8 +147,19 @@ static const cairo_device_backend_t _cairo_xlib_device_backend = {
     _cairo_xlib_display_destroy,
 };
 
+
+static void _cairo_xlib_display_select_compositor (cairo_xlib_display_t *display)
+{
+    if (display->render_major > 0 || display->render_minor >= 4)
+       display->compositor = _cairo_xlib_traps_compositor_get ();
+    else if (display->render_major > 0 || display->render_minor >= 0)
+       display->compositor = _cairo_xlib_mask_compositor_get ();
+    else
+       display->compositor = _cairo_xlib_core_compositor_get ();
+}
+
 /**
- * cairo_xlib_device_create:
+ * _cairo_xlib_device_create:
  * @dpy: the display to create the device for
  *
  * Gets the device belonging to @dpy, or creates it if it doesn't exist yet.
@@ -221,6 +233,8 @@ _cairo_xlib_device_create (Display *dpy)
        }
     }
 
+    _cairo_xlib_display_select_compositor (display);
+
     codes = XAddExtension (dpy);
     if (unlikely (codes == NULL)) {
        device = _cairo_device_create_in_error (CAIRO_STATUS_NO_MEMORY);
@@ -331,13 +345,6 @@ _cairo_xlib_device_create (Display *dpy)
        display->buggy_pad_reflect = TRUE;
     }
 
-    if (display->render_major > 0 || display->render_minor >= 4)
-       display->compositor = _cairo_xlib_traps_compositor_get ();
-    else if (display->render_major > 0 || display->render_minor >= 0)
-       display->compositor = _cairo_xlib_mask_compositor_get ();
-    else
-       display->compositor = _cairo_xlib_core_compositor_get ();
-
     display->next = _cairo_xlib_display_list;
     _cairo_xlib_display_list = display;
 
@@ -552,6 +559,55 @@ _cairo_xlib_display_has_gradients (cairo_device_t *device)
     return ! ((cairo_xlib_display_t *) device)->buggy_gradients;
 }
 
+/**
+ * cairo_xlib_device_debug_cap_xrender_version:
+ * @device: a #cairo_device_t for the Xlib backend
+ * @major_version: major version to restrict to
+ * @minor_version: minor version to restrict to
+ *
+ * Restricts all future Xlib surfaces for this devices to the specified version
+ * of the RENDER extension. This function exists solely for debugging purpose.
+ * It let's you find out how cairo would behave with an older version of
+ * the RENDER extension.
+ *
+ * Use the special values -1 and -1 for disabling the RENDER extension.
+ *
+ * Since: 1.12
+ **/
+void
+cairo_xlib_device_debug_cap_xrender_version (cairo_device_t *device,
+                                            int major_version,
+                                            int minor_version)
+{
+    cairo_xlib_display_t *display = (cairo_xlib_display_t *) device;
+
+    if (device == NULL || device->status)
+       return;
+
+    if (device->backend->type != CAIRO_DEVICE_TYPE_XLIB)
+       return;
+
+    if (major_version < display->render_major ||
+       (major_version == display->render_major &&
+        minor_version < display->render_minor))
+    {
+       display->render_major = major_version;
+       display->render_minor = minor_version;
+    }
+
+    _cairo_xlib_display_select_compositor (display);
+}
+
+/**
+ * cairo_xlib_device_debug_set_precision:
+ * @device: a #cairo_device_t for the Xlib backend
+ * @precision: the precision to use
+ *
+ * Render supports two modes of precision when rendering trapezoids. Set
+ * the precision to the desired mode.
+ *
+ * Since: 1.12
+ **/
 void
 cairo_xlib_device_debug_set_precision (cairo_device_t *device,
                                       int precision)
@@ -569,6 +625,16 @@ cairo_xlib_device_debug_set_precision (cairo_device_t *device,
     ((cairo_xlib_display_t *) device)->force_precision = precision;
 }
 
+/**
+ * cairo_xlib_device_debug_get_precision:
+ * @device: a #cairo_device_t for the Xlib backend
+ *
+ * Get the Xrender precision mode.
+ *
+ * Returns: the render precision mode
+ *
+ * Since: 1.12
+ **/
 int
 cairo_xlib_device_debug_get_precision (cairo_device_t *device)
 {
index 5391926..7d45cd1 100644 (file)
@@ -42,6 +42,8 @@
 
 #include "cairoint.h"
 
+#if !CAIRO_HAS_XLIB_XCB_FUNCTIONS
+
 #include "cairo-xlib-private.h"
 
 #include "cairo-compositor-private.h"
@@ -52,3 +54,5 @@ _cairo_xlib_fallback_compositor_get (void)
     /* XXX Do something interesting here to mitigate fallbacks ala xcb */
     return &_cairo_fallback_compositor;
 }
+
+#endif /* !CAIRO_HAS_XLIB_XCB_FUNCTIONS */
index 60d9984..a892985 100644 (file)
@@ -48,6 +48,7 @@
 
 #include "cairo-compositor-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-pattern-private.h"
 #include "cairo-traps-private.h"
 #include "cairo-tristrip-private.h"
@@ -180,6 +181,13 @@ copy_boxes (void *_dst,
        return status;
     }
 
+    if (! src->owns_pixmap) {
+       XGCValues gcv;
+
+       gcv.subwindow_mode = IncludeInferiors;
+       XChangeGC (dst->display->display, gc, GCSubwindowMode, &gcv);
+    }
+
     if (boxes->num_boxes == 1) {
        int x1 = _cairo_fixed_integer_part (boxes->chunks.base[0].p1.x);
        int y1 = _cairo_fixed_integer_part (boxes->chunks.base[0].p1.y);
@@ -191,43 +199,74 @@ copy_boxes (void *_dst,
                   x2 - x1, y2 - y1,
                   x1,      y1);
     } else {
-       XRectangle stack_rects[CAIRO_STACK_ARRAY_LENGTH (XRectangle)];
-       XRectangle *rects = stack_rects;
-
-       if (boxes->num_boxes > ARRAY_LENGTH (stack_rects)) {
-           rects = _cairo_malloc_ab (boxes->num_boxes, sizeof (XRectangle));
-           if (unlikely (rects == NULL))
-               return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-       }
+       /* We can only have a single control for subwindow_mode on the
+        * GC. If we have a Window destination, we need to set ClipByChildren,
+        * but if we have a Window source, we need IncludeInferiors. If we have
+        * both a Window destination and source, we must fallback. There is
+        * no convenient way to detect if a drawable is a Pixmap or Window,
+        * therefore we can only rely on those surfaces that we created
+        * ourselves to be Pixmaps, and treat everything else as a potential
+        * Window.
+        */
+       if (src == dst || (!src->owns_pixmap && !dst->owns_pixmap)) {
+           for (chunk = &boxes->chunks; chunk; chunk = chunk->next) {
+               for (i = 0; i < chunk->count; i++) {
+                   int x1 = _cairo_fixed_integer_part (chunk->base[i].p1.x);
+                   int y1 = _cairo_fixed_integer_part (chunk->base[i].p1.y);
+                   int x2 = _cairo_fixed_integer_part (chunk->base[i].p2.x);
+                   int y2 = _cairo_fixed_integer_part (chunk->base[i].p2.y);
+                   XCopyArea (dst->dpy, src->drawable, dst->drawable, gc,
+                              x1 + dx, y1 + dy,
+                              x2 - x1, y2 - y1,
+                              x1,      y1);
+               }
+           }
+       } else {
+           XRectangle stack_rects[CAIRO_STACK_ARRAY_LENGTH (XRectangle)];
+           XRectangle *rects = stack_rects;
 
-       j = 0;
-       for (chunk = &boxes->chunks; chunk; chunk = chunk->next) {
-           for (i = 0; i < chunk->count; i++) {
-               int x1 = _cairo_fixed_integer_part (chunk->base[i].p1.x);
-               int y1 = _cairo_fixed_integer_part (chunk->base[i].p1.y);
-               int x2 = _cairo_fixed_integer_part (chunk->base[i].p2.x);
-               int y2 = _cairo_fixed_integer_part (chunk->base[i].p2.y);
+           if (boxes->num_boxes > ARRAY_LENGTH (stack_rects)) {
+               rects = _cairo_malloc_ab (boxes->num_boxes, sizeof (XRectangle));
+               if (unlikely (rects == NULL))
+                   return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+           }
 
-               rects[j].x = x1;
-               rects[j].y = y1;
-               rects[j].width  = x2 - x1;
-               rects[j].height = y2 - y1;
-               j++;
+           j = 0;
+           for (chunk = &boxes->chunks; chunk; chunk = chunk->next) {
+               for (i = 0; i < chunk->count; i++) {
+                   int x1 = _cairo_fixed_integer_part (chunk->base[i].p1.x);
+                   int y1 = _cairo_fixed_integer_part (chunk->base[i].p1.y);
+                   int x2 = _cairo_fixed_integer_part (chunk->base[i].p2.x);
+                   int y2 = _cairo_fixed_integer_part (chunk->base[i].p2.y);
+
+                   rects[j].x = x1;
+                   rects[j].y = y1;
+                   rects[j].width  = x2 - x1;
+                   rects[j].height = y2 - y1;
+                   j++;
+               }
            }
-       }
-       assert (j == boxes->num_boxes);
+           assert (j == boxes->num_boxes);
 
-       XSetClipRectangles (dst->dpy, gc, 0, 0, rects, j, YSorted);
+           XSetClipRectangles (dst->dpy, gc, 0, 0, rects, j, Unsorted);
 
-       XCopyArea (dst->dpy, src->drawable, dst->drawable, gc,
-                  extents->x + dx, extents->y + dy,
-                  extents->width,  extents->height,
-                  extents->x,      extents->y);
+           XCopyArea (dst->dpy, src->drawable, dst->drawable, gc,
+                      extents->x + dx, extents->y + dy,
+                      extents->width,  extents->height,
+                      extents->x,      extents->y);
 
-       XSetClipMask (dst->dpy, gc, None);
+           XSetClipMask (dst->dpy, gc, None);
 
-       if (rects != stack_rects)
-           free (rects);
+           if (rects != stack_rects)
+               free (rects);
+       }
+    }
+
+    if (! src->owns_pixmap) {
+       XGCValues gcv;
+
+       gcv.subwindow_mode = ClipByChildren;
+       XChangeGC (dst->display->display, gc, GCSubwindowMode, &gcv);
     }
 
     _cairo_xlib_surface_put_gc (dst->display, dst, gc);
@@ -313,8 +352,12 @@ fill_reduces_to_source (cairo_operator_t op,
                        const cairo_color_t *color,
                        cairo_xlib_surface_t *dst)
 {
-    if (dst->base.is_clear || CAIRO_COLOR_IS_OPAQUE (color))
-       return op == CAIRO_OPERATOR_OVER || op == CAIRO_OPERATOR_ADD;
+    if (dst->base.is_clear || CAIRO_COLOR_IS_OPAQUE (color)) {
+       if (op == CAIRO_OPERATOR_OVER)
+           return TRUE;
+       if (op == CAIRO_OPERATOR_ADD)
+           return (dst->base.content & CAIRO_CONTENT_COLOR) == 0;
+    }
 
     return FALSE;
 }
@@ -1175,8 +1218,8 @@ _emit_glyphs_chunk (cairo_xlib_display_t *display,
          }
          elts[nelt].chars = char8 + size * j;
          elts[nelt].glyphset = info->glyphset;
-         elts[nelt].xOff = glyphs[i].i.x;
-         elts[nelt].yOff = glyphs[i].i.y;
+         elts[nelt].xOff = glyphs[i].i.x - dst_x;
+         elts[nelt].yOff = glyphs[i].i.y - dst_y;
       }
 
       switch (width) {
@@ -1203,9 +1246,9 @@ _emit_glyphs_chunk (cairo_xlib_display_t *display,
                         src->picture,
                         dst->picture,
                         use_mask ? info->xrender_format : NULL,
-                        src_x + elts[0].xOff,
-                        src_y + elts[0].yOff,
-                        elts[0].xOff - dst_x, elts[0].yOff - dst_y,
+                        src_x + elts[0].xOff + dst_x,
+                        src_y + elts[0].yOff + dst_y,
+                        elts[0].xOff, elts[0].yOff,
                         (XGlyphElt8 *) elts, nelt);
 
     if (elts != stack_elts)
@@ -1429,6 +1472,7 @@ _cairo_xlib_mask_compositor_get (void)
        compositor.draw_image_boxes = draw_image_boxes;
        compositor.fill_rectangles = fill_rectangles;
        compositor.fill_boxes = fill_boxes;
+       compositor.copy_boxes = copy_boxes;
        //compositor.check_composite = check_composite;
        compositor.composite = composite;
        //compositor.check_composite_boxes = check_composite_boxes;
@@ -1517,6 +1561,12 @@ composite_traps (void                    *abstract_dst,
 
     //X_DEBUG ((display->display, "composite_trapezoids (dst=%x)", (unsigned int) dst->drawable));
 
+    if (dst->base.is_clear &&
+       (op == CAIRO_OPERATOR_OVER || op == CAIRO_OPERATOR_ADD))
+    {
+       op = CAIRO_OPERATOR_SOURCE;
+    }
+
     pict_format =
        _cairo_xlib_display_get_xrender_format (display,
                                                antialias == CAIRO_ANTIALIAS_NONE ?  CAIRO_FORMAT_A1 : CAIRO_FORMAT_A8);
@@ -1654,6 +1704,17 @@ composite_tristrip (void         *abstract_dst,
     return CAIRO_STATUS_SUCCESS;
 }
 
+static cairo_int_status_t
+check_composite (const cairo_composite_rectangles_t *extents)
+{
+    cairo_xlib_display_t *display = ((cairo_xlib_surface_t *)extents->surface)->display;
+
+    if (! CAIRO_RENDER_SUPPORTS_OPERATOR (display, extents->op))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
 const cairo_compositor_t *
 _cairo_xlib_traps_compositor_get (void)
 {
@@ -1670,7 +1731,7 @@ _cairo_xlib_traps_compositor_get (void)
        compositor.draw_image_boxes = draw_image_boxes;
        compositor.copy_boxes = copy_boxes;
        compositor.fill_boxes = fill_boxes;
-       //compositor.check_composite = check_composite;
+       compositor.check_composite = check_composite;
        compositor.composite = composite;
        compositor.lerp = lerp;
        //compositor.check_composite_boxes = check_composite_boxes;
index 7bfdf15..57beeaa 100644 (file)
@@ -61,6 +61,7 @@
 
 #include "cairo-xlib-surface-private.h"
 #include "cairo-error-private.h"
+#include "cairo-list-inline.h"
 
 #include "cairo-fontconfig-private.h"
 
index dc5aa7a..f8dac70 100644 (file)
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
 #include "cairo-paginated-private.h"
-#include "cairo-pattern-private.h"
+#include "cairo-pattern-inline.h"
 #include "cairo-recording-surface-private.h"
 #include "cairo-surface-backend-private.h"
 #include "cairo-surface-offset-private.h"
 #include "cairo-surface-observer-private.h"
-#include "cairo-surface-snapshot-private.h"
+#include "cairo-surface-snapshot-inline.h"
+#include "cairo-surface-subsurface-inline.h"
 
 #define PIXMAN_MAX_INT ((pixman_fixed_1 >> 1) - pixman_fixed_e) /* need to ensure deltas also fit */
 
-static cairo_surface_t *
-unwrap_surface (cairo_surface_t *surface, int *tx, int *ty)
+static cairo_xlib_surface_t *
+unwrap_source (const cairo_surface_pattern_t *pattern)
 {
-    *tx = *ty = 0;
-
-    if (_cairo_surface_is_paginated (surface))
-       surface = _cairo_paginated_surface_get_recording (surface);
-    if (_cairo_surface_is_snapshot (surface))
-       surface = _cairo_surface_snapshot_get_target (surface);
-    if (_cairo_surface_is_observer (surface))
-       surface = _cairo_surface_observer_get_target (surface);
-    return surface;
+    cairo_rectangle_int_t limits;
+    return (cairo_xlib_surface_t *)_cairo_pattern_get_source (pattern, &limits);
 }
 
 static cairo_status_t
@@ -541,61 +535,36 @@ solid_source (cairo_xlib_surface_t *dst,
 }
 
 static cairo_surface_t *
-native_source (cairo_xlib_surface_t *dst,
-              const cairo_surface_pattern_t *pattern,
-              cairo_bool_t is_mask,
-              const cairo_rectangle_int_t *extents,
-              const cairo_rectangle_int_t *sample,
-              int *src_x, int *src_y)
+embedded_source (cairo_xlib_surface_t *dst,
+                const cairo_surface_pattern_t *pattern,
+                cairo_xlib_surface_t *src,
+                const cairo_rectangle_int_t *extents,
+                int *src_x, int *src_y)
 {
-    cairo_xlib_surface_t *src = (cairo_xlib_surface_t *) pattern->surface;
     cairo_xlib_source_t *source;
     Display *dpy = dst->display->display;
-    cairo_bool_t is_contained = FALSE;
     cairo_int_status_t status;
     XTransform xtransform;
     XRenderPictureAttributes pa;
-    int mask = 0;
+    unsigned mask = 0;
 
-    src = (cairo_xlib_surface_t *)
-           unwrap_surface (pattern->surface, src_x, src_y);
-
-    if (sample->x >= 0 && sample->y >= 0 &&
-       sample->x + sample->width  <= src->width &&
-       sample->y + sample->height <= src->height)
-    {
-       is_contained = TRUE;
-    }
-
-    if (pattern->base.filter == CAIRO_FILTER_NEAREST && is_contained) {
-       *src_x += pattern->base.matrix.x0;
-       *src_y += pattern->base.matrix.y0;
-       _cairo_xlib_surface_ensure_picture (src);
-       return cairo_surface_reference (&src->base);
-    }
-
-    /* As these are frequent and meant to be fast we track pictures for
-     * enative surface and minimse update requests.
+    /* As these are frequent and meant to be fast, we track pictures for
+     * native surface and minimise update requests.
      */
     source = &src->embedded_source;
     if (source->picture == None) {
-       Picture picture;
        XRenderPictureAttributes pa;
-       int mask = 0;
-
-       pa.subwindow_mode = IncludeInferiors;
-       mask |= CPSubwindowMode;
-
-       picture = XRenderCreatePicture (dpy,
-                                       src->drawable,
-                                       src->xrender_format,
-                                       mask, &pa);
 
        _cairo_surface_init (&source->base,
                             &cairo_xlib_source_backend,
                             NULL, /* device */
                             CAIRO_CONTENT_COLOR_ALPHA);
-       source->picture = picture;
+
+       pa.subwindow_mode = IncludeInferiors;
+       source->picture = XRenderCreatePicture (dpy,
+                                               src->drawable,
+                                               src->xrender_format,
+                                               CPSubwindowMode, &pa);
 
        source->has_component_alpha = 0;
        source->has_matrix = 0;
@@ -644,6 +613,163 @@ native_source (cairo_xlib_surface_t *dst,
     return cairo_surface_reference (&source->base);
 }
 
+static cairo_surface_t *
+subsurface_source (cairo_xlib_surface_t *dst,
+                  const cairo_surface_pattern_t *pattern,
+                  cairo_bool_t is_mask,
+                  const cairo_rectangle_int_t *extents,
+                  const cairo_rectangle_int_t *sample,
+                  int *src_x, int *src_y)
+{
+    cairo_surface_subsurface_t *sub;
+    cairo_xlib_surface_t *src;
+    cairo_xlib_source_t *source;
+    Display *dpy = dst->display->display;
+    cairo_int_status_t status;
+    cairo_surface_pattern_t local_pattern;
+    XTransform xtransform;
+    XRenderPictureAttributes pa;
+    unsigned mask = 0;
+
+    sub = (cairo_surface_subsurface_t *) pattern->surface;
+
+    if (sample->x >= 0 && sample->y >= 0 &&
+       sample->x + sample->width  <= sub->extents.width &&
+       sample->y + sample->height <= sub->extents.height)
+    {
+       src = (cairo_xlib_surface_t *) sub->target;
+
+       if (pattern->base.filter == CAIRO_FILTER_NEAREST &&
+           _cairo_matrix_is_translation (&pattern->base.matrix))
+       {
+           *src_x += pattern->base.matrix.x0 + sub->extents.x;
+           *src_y += pattern->base.matrix.y0 + sub->extents.y;
+
+           _cairo_xlib_surface_ensure_picture (src);
+           return cairo_surface_reference (&src->base);
+       }
+       else
+       {
+           cairo_surface_pattern_t local_pattern = *pattern;
+           local_pattern.base.matrix.x0 += sub->extents.x;
+           local_pattern.base.matrix.y0 += sub->extents.y;
+           local_pattern.base.extend = CAIRO_EXTEND_NONE;
+           return embedded_source (dst, &local_pattern, src, extents,
+                                   src_x, src_y);
+       }
+    }
+
+    if (sub->snapshot && sub->snapshot->type == CAIRO_SURFACE_TYPE_XLIB) {
+       src = (cairo_xlib_surface_t *) cairo_surface_reference (sub->snapshot);
+       source = &src->embedded_source;
+    } else {
+       src = (cairo_xlib_surface_t *)
+           _cairo_surface_create_similar_scratch (&dst->base,
+                                                  sub->base.content,
+                                                  sub->extents.width,
+                                                  sub->extents.height);
+       if (src->base.type != CAIRO_SURFACE_TYPE_XLIB) {
+           cairo_surface_destroy (&src->base);
+           return _cairo_surface_create_in_error (CAIRO_STATUS_NO_MEMORY);
+       }
+
+       _cairo_pattern_init_for_surface (&local_pattern, sub->target);
+       cairo_matrix_init_translate (&local_pattern.base.matrix,
+                                    sub->extents.x, sub->extents.y);
+       local_pattern.base.filter = CAIRO_FILTER_NEAREST;
+       status = _cairo_surface_paint (&src->base,
+                                      CAIRO_OPERATOR_SOURCE,
+                                      &local_pattern.base,
+                                      NULL);
+       _cairo_pattern_fini (&local_pattern.base);
+
+       if (unlikely (status)) {
+           cairo_surface_destroy (&src->base);
+           return _cairo_surface_create_in_error (status);
+       }
+
+       _cairo_xlib_surface_ensure_picture (src);
+       _cairo_surface_subsurface_set_snapshot (&sub->base, &src->base);
+
+       source = &src->embedded_source;
+       source->has_component_alpha = 0;
+       source->has_matrix = 0;
+       source->filter = CAIRO_FILTER_NEAREST;
+       source->extend = CAIRO_EXTEND_NONE;
+    }
+
+    status = _cairo_matrix_to_pixman_matrix_offset (&pattern->base.matrix,
+                                                   pattern->base.filter,
+                                                   extents->x + extents->width / 2,
+                                                   extents->y + extents->height / 2,
+                                                   (pixman_transform_t *)&xtransform,
+                                                   src_x, src_y);
+    if (status == CAIRO_INT_STATUS_NOTHING_TO_DO) {
+       if (source->has_matrix) {
+           source->has_matrix = 0;
+           memcpy (&xtransform, &identity, sizeof (identity));
+           status = CAIRO_INT_STATUS_SUCCESS;
+       }
+    } else
+       source->has_matrix = 1;
+    if (status == CAIRO_INT_STATUS_SUCCESS)
+       XRenderSetPictureTransform (dpy, src->picture, &xtransform);
+
+    if (source->filter != pattern->base.filter) {
+       picture_set_filter (dpy, src->picture, pattern->base.filter);
+       source->filter = pattern->base.filter;
+    }
+
+    if (source->has_component_alpha != pattern->base.has_component_alpha) {
+       pa.component_alpha = pattern->base.has_component_alpha;
+       mask |= CPComponentAlpha;
+       source->has_component_alpha = pattern->base.has_component_alpha;
+    }
+
+    if (source->extend != pattern->base.extend) {
+       pa.repeat = extend_to_repeat (pattern->base.extend);
+       mask |= CPRepeat;
+       source->extend = pattern->base.extend;
+    }
+
+    if (mask)
+       XRenderChangePicture (dpy, src->picture, mask, &pa);
+
+    return &src->base;
+}
+
+static cairo_surface_t *
+native_source (cairo_xlib_surface_t *dst,
+              const cairo_surface_pattern_t *pattern,
+              cairo_bool_t is_mask,
+              const cairo_rectangle_int_t *extents,
+              const cairo_rectangle_int_t *sample,
+              int *src_x, int *src_y)
+{
+    cairo_xlib_surface_t *src = (cairo_xlib_surface_t *) pattern->surface;
+
+    if (_cairo_surface_is_subsurface (pattern->surface))
+       return subsurface_source (dst, pattern, is_mask,
+                                 extents, sample,
+                                 src_x, src_y);
+
+    src = unwrap_source (pattern);
+
+    if (pattern->base.filter == CAIRO_FILTER_NEAREST &&
+       sample->x >= 0 && sample->y >= 0 &&
+       sample->x + sample->width  <= src->width &&
+       sample->y + sample->height <= src->height &&
+       _cairo_matrix_is_translation (&pattern->base.matrix))
+    {
+       *src_x += pattern->base.matrix.x0;
+       *src_y += pattern->base.matrix.y0;
+       _cairo_xlib_surface_ensure_picture (src);
+       return cairo_surface_reference (&src->base);
+    }
+
+    return embedded_source (dst, pattern, src, extents, src_x, src_y);
+}
+
 #if 0
 /* It is general quicker if we let the application choose which images
  * to cache for itself and only upload the fragments required for this
@@ -889,11 +1015,10 @@ _cairo_xlib_source_create_for_pattern (cairo_surface_t *_dst,
                                       int *src_x, int *src_y)
 {
     cairo_xlib_surface_t *dst = (cairo_xlib_surface_t *)_dst;
-    int tx, ty;
 
-    if (pattern == NULL || pattern->type == CAIRO_PATTERN_TYPE_SOLID) {
-       *src_x = *src_y = 0;
+    *src_x = *src_y = 0;
 
+    if (pattern == NULL || pattern->type == CAIRO_PATTERN_TYPE_SOLID) {
        if (pattern == NULL)
            pattern = &_cairo_pattern_white.base;
 
@@ -905,7 +1030,7 @@ _cairo_xlib_source_create_for_pattern (cairo_surface_t *_dst,
            cairo_surface_pattern_t *spattern = (cairo_surface_pattern_t *)pattern;
            if (spattern->surface->type == CAIRO_SURFACE_TYPE_XLIB &&
                _cairo_xlib_surface_same_screen (dst,
-                                                (cairo_xlib_surface_t *)unwrap_surface (spattern->surface, &tx, &ty)))
+                                                unwrap_source (spattern)))
                return native_source (dst, spattern, is_mask,
                                      extents, sample,
                                      src_x, src_y);
index 1806e64..ae2153b 100644 (file)
@@ -57,6 +57,7 @@
 #include "cairo-default-context-private.h"
 #include "cairo-error-private.h"
 #include "cairo-image-surface-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-pattern-private.h"
 #include "cairo-region-private.h"
 #include "cairo-scaled-font-private.h"
@@ -125,18 +126,20 @@ _x_bread_crumb (Display *dpy,
  *
  * Note that the XLib surface automatically takes advantage of X render extension
  * if it is available.
- */
+ **/
 
 /**
  * CAIRO_HAS_XLIB_SURFACE:
  *
  * Defined if the Xlib surface backend is available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.0
+ **/
 
 /**
  * SECTION:cairo-xlib-xrender
- * @Title: XLib/XRender Backend
+ * @Title: XLib-XRender Backend
  * @Short_Description: X Window System rendering using XLib and the X Render extension
  * @See_Also: #cairo_surface_t
  *
@@ -145,14 +148,16 @@ _x_bread_crumb (Display *dpy,
  *
  * Note that the XLib surface automatically takes advantage of X Render extension
  * if it is available.
- */
+ **/
 
 /**
  * CAIRO_HAS_XLIB_XRENDER_SURFACE:
  *
  * Defined if the XLib/XRender surface functions are available.
  * This macro can be used to conditionally compile backend-specific code.
- */
+ *
+ * Since: 1.6
+ **/
 
 /* Xlib doesn't define a typedef, so define one ourselves */
 typedef int (*cairo_xlib_error_func_t) (Display     *display,
@@ -237,26 +242,22 @@ _visual_for_xrender_format(Screen *screen,
 static cairo_content_t
 _xrender_format_to_content (XRenderPictFormat *xrender_format)
 {
-    cairo_bool_t xrender_format_has_alpha;
-    cairo_bool_t xrender_format_has_color;
+    cairo_content_t content;
 
     /* This only happens when using a non-Render server. Let's punt
      * and say there's no alpha here. */
     if (xrender_format == NULL)
        return CAIRO_CONTENT_COLOR;
 
-    xrender_format_has_alpha = (xrender_format->direct.alphaMask != 0);
-    xrender_format_has_color = (xrender_format->direct.redMask   != 0 ||
-                               xrender_format->direct.greenMask != 0 ||
-                               xrender_format->direct.blueMask  != 0);
+    content = 0;
+    if (xrender_format->direct.alphaMask)
+           content |= CAIRO_CONTENT_ALPHA;
+    if (xrender_format->direct.redMask |
+       xrender_format->direct.greenMask |
+       xrender_format->direct.blueMask)
+           content |= CAIRO_CONTENT_COLOR;
 
-    if (xrender_format_has_alpha)
-       if (xrender_format_has_color)
-           return CAIRO_CONTENT_COLOR_ALPHA;
-       else
-           return CAIRO_CONTENT_ALPHA;
-    else
-       return CAIRO_CONTENT_COLOR;
+    return content;
 }
 
 static cairo_surface_t *
@@ -322,7 +323,7 @@ _cairo_xlib_surface_create_similar (void           *abstract_src,
        Screen *screen = src->screen->screen;
        int depth;
 
-       /* No compatabile XRenderFormat, see if we can make an ordinary pixmap,
+       /* No compatible XRenderFormat, see if we can make an ordinary pixmap,
         * so that we can still accelerate blits with XCopyArea(). */
        if (content != CAIRO_CONTENT_COLOR) {
             cairo_device_release (&display->base);
@@ -665,6 +666,18 @@ static const int8_t dither_pattern[4][4] = {
 };
 #undef X
 
+static int bits_per_pixel(cairo_xlib_surface_t *surface)
+{
+    if (surface->depth > 16)
+       return 32;
+    else if (surface->depth > 8)
+       return 16;
+    else if (surface->depth > 1)
+       return 8;
+    else
+       return 1;
+}
+
 static cairo_surface_t *
 _get_image_surface (cairo_xlib_surface_t    *surface,
                    const cairo_rectangle_int_t *extents)
@@ -681,18 +694,23 @@ _get_image_surface (cairo_xlib_surface_t    *surface,
     assert (extents->x + extents->width <= surface->width);
     assert (extents->y + extents->height <= surface->height);
 
-    if (surface->base.serial == 0) {
-       xlib_masks.bpp = (surface->depth + 7) & ~7;
+    if (surface->base.is_clear ||
+       (surface->base.serial == 0 && surface->owns_pixmap))
+    {
+       xlib_masks.bpp = bits_per_pixel (surface);
        xlib_masks.alpha_mask = surface->a_mask;
        xlib_masks.red_mask = surface->r_mask;
        xlib_masks.green_mask = surface->g_mask;
        xlib_masks.blue_mask = surface->b_mask;
-       _pixman_format_from_masks (&xlib_masks, &pixman_format);
-       return _cairo_image_surface_create_with_pixman_format (NULL,
-                                                              pixman_format,
-                                                              extents->width,
-                                                              extents->height,
-                                                              0);
+       if (_pixman_format_from_masks (&xlib_masks, &pixman_format) &&
+           _cairo_format_from_pixman_format (pixman_format) != CAIRO_FORMAT_INVALID)
+       {
+           return _cairo_image_surface_create_with_pixman_format (NULL,
+                                                                  pixman_format,
+                                                                  extents->width,
+                                                                  extents->height,
+                                                                  0);
+       }
     }
 
     status = _cairo_xlib_display_acquire (surface->base.device, &display);
@@ -743,11 +761,19 @@ _get_image_surface (cairo_xlib_surface_t    *surface,
                                extents->width, extents->height,
                                surface->depth);
        if (pixmap) {
+           XGCValues gcv;
+
+           gcv.subwindow_mode = IncludeInferiors;
+           XChangeGC (display->display, gc, GCSubwindowMode, &gcv);
+
            XCopyArea (display->display, surface->drawable, pixmap, gc,
                       extents->x, extents->y,
                       extents->width, extents->height,
                       0, 0);
 
+           gcv.subwindow_mode = ClipByChildren;
+           XChangeGC (display->display, gc, GCSubwindowMode, &gcv);
+
            ximage = XGetImage (display->display,
                                pixmap,
                                0, 0,
@@ -1021,8 +1047,7 @@ _cairo_xlib_surface_draw_image (cairo_xlib_surface_t   *surface,
        ret = XInitImage (&ximage);
        assert (ret != 0);
     }
-    else if (!is_rgb_image ||
-            (surface->visual == NULL || surface->visual->class == TrueColor))
+    else if (surface->visual == NULL || surface->visual->class == TrueColor)
     {
         pixman_format_code_t intermediate_format;
         int ret;
@@ -1031,17 +1056,14 @@ _cairo_xlib_surface_draw_image (cairo_xlib_surface_t   *surface,
         image_masks.red_mask   = surface->r_mask;
         image_masks.green_mask = surface->g_mask;
         image_masks.blue_mask  = surface->b_mask;
-        image_masks.bpp        = surface->depth;
+        image_masks.bpp        = bits_per_pixel (surface);
         ret = _pixman_format_from_masks (&image_masks, &intermediate_format);
         assert (ret);
 
        own_data = FALSE;
 
         pixman_image = pixman_image_create_bits (intermediate_format,
-                                                 image->width,
-                                                 image->height,
-                                                 NULL,
-                                                 0);
+                                                 width, height, NULL, 0);
         if (pixman_image == NULL) {
            status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
             goto BAIL;
@@ -1051,17 +1073,21 @@ _cairo_xlib_surface_draw_image (cairo_xlib_surface_t   *surface,
                                   image->pixman_image,
                                   NULL,
                                   pixman_image,
+                                  src_x, src_y,
                                   0, 0,
                                   0, 0,
-                                  0, 0,
-                                  image->width, image->height);
+                                  width, height);
 
+       ximage.width = width;
+       ximage.height = height;
        ximage.bits_per_pixel = image_masks.bpp;
        ximage.data = (char *) pixman_image_get_data (pixman_image);
        ximage.bytes_per_line = pixman_image_get_stride (pixman_image);
 
        ret = XInitImage (&ximage);
        assert (ret != 0);
+
+       src_x = src_y = 0;
     }
     else
     {
@@ -1076,14 +1102,7 @@ _cairo_xlib_surface_draw_image (cairo_xlib_surface_t   *surface,
        cairo_bool_t true_color;
        int ret;
 
-       if (surface->depth > 16)
-           ximage.bits_per_pixel = 32;
-       else if (surface->depth > 8)
-           ximage.bits_per_pixel = 16;
-       else if (surface->depth > 1)
-           ximage.bits_per_pixel = 8;
-       else
-           ximage.bits_per_pixel = 1;
+       ximage.bits_per_pixel = bits_per_pixel(surface);
        stride = CAIRO_STRIDE_FOR_WIDTH_BPP (ximage.width,
                                             ximage.bits_per_pixel);
        ximage.bytes_per_line = stride;
@@ -1188,9 +1207,8 @@ _cairo_xlib_surface_draw_image (cairo_xlib_surface_t   *surface,
     if (unlikely (status))
        goto BAIL;
 
-    XPutImage (display->display, surface->drawable, gc,
-              &ximage, src_x, src_y, dst_x, dst_y,
-              width, height);
+    XPutImage (display->display, surface->drawable, gc, &ximage,
+              src_x, src_y, dst_x, dst_y, width, height);
 
     _cairo_xlib_surface_put_gc (display, surface, gc);
 
@@ -1206,6 +1224,21 @@ _cairo_xlib_surface_draw_image (cairo_xlib_surface_t   *surface,
     return CAIRO_STATUS_SUCCESS;
 }
 
+static cairo_surface_t *
+_cairo_xlib_surface_source(void                    *abstract_surface,
+                          cairo_rectangle_int_t *extents)
+{
+    cairo_xlib_surface_t *surface = abstract_surface;
+
+    if (extents) {
+       extents->x = extents->y = 0;
+       extents->width  = surface->width;
+       extents->height = surface->height;
+    }
+
+    return &surface->base;
+}
+
 static cairo_status_t
 _cairo_xlib_surface_acquire_source_image (void                    *abstract_surface,
                                          cairo_image_surface_t  **image_out,
@@ -1252,7 +1285,7 @@ _cairo_xlib_surface_map_to_image (void                    *abstract_surface,
     cairo_surface_t *image;
 
     image = _get_image_surface (abstract_surface, extents);
-    cairo_surface_set_device_offset (image, -extents->y, -extents->y);
+    cairo_surface_set_device_offset (image, -extents->x, -extents->y);
 
     return image;
 }
@@ -1382,6 +1415,7 @@ static const cairo_surface_backend_t cairo_xlib_surface_backend = {
     _cairo_xlib_surface_map_to_image,
     _cairo_xlib_surface_unmap_image,
 
+    _cairo_xlib_surface_source,
     _cairo_xlib_surface_acquire_source_image,
     _cairo_xlib_surface_release_source_image,
     _cairo_xlib_surface_snapshot,
@@ -1580,7 +1614,14 @@ _cairo_xlib_screen_from_visual (Display *dpy, Visual *visual)
 
 static cairo_bool_t valid_size (int width, int height)
 {
-    return width > 0 && width <= XLIB_COORD_MAX && height > 0 && height <= XLIB_COORD_MAX;
+    /* Note: the minimum surface size allowed in the X protocol is 1x1.
+     * However, as we historically did not check the minimum size we
+     * allowed applications to lie and set the correct size later (one hopes).
+     * To preserve compatability we must allow applications to use
+     * 0x0 surfaces.
+     */
+    return (width  >= 0 && width  <= XLIB_COORD_MAX &&
+           height >= 0 && height <= XLIB_COORD_MAX);
 }
 
 /**
@@ -1607,6 +1648,8 @@ static cairo_bool_t valid_size (int width, int height)
  * children will be included.
  *
  * Return value: the newly created surface
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_xlib_surface_create (Display     *dpy,
@@ -1651,6 +1694,8 @@ cairo_xlib_surface_create (Display     *dpy,
  * This will be drawn to as a %CAIRO_FORMAT_A1 object.
  *
  * Return value: the newly created surface
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_xlib_surface_create_for_bitmap (Display  *dpy,
@@ -1696,6 +1741,8 @@ cairo_xlib_surface_create_for_bitmap (Display  *dpy,
  * window changes.
  *
  * Return value: the newly created surface
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_xlib_surface_create_with_xrender_format (Display             *dpy,
@@ -1767,6 +1814,8 @@ cairo_xlib_surface_get_xrender_format (cairo_surface_t *surface)
  *
  * A Pixmap can never change size, so it is never necessary to call
  * this function on a surface created for a Pixmap.
+ *
+ * Since: 1.0
  **/
 void
 cairo_xlib_surface_set_size (cairo_surface_t *abstract_surface,
@@ -1811,6 +1860,8 @@ cairo_xlib_surface_set_size (cairo_surface_t *abstract_surface,
  * will get X protocol errors and will probably terminate.
  * No checks are done by this function to ensure this
  * compatibility.
+ *
+ * Since: 1.0
  **/
 void
 cairo_xlib_surface_set_drawable (cairo_surface_t   *abstract_surface,
index f4ddd97..caa9bd3 100644 (file)
@@ -47,6 +47,7 @@
 #include "cairo-xlib-xrender-private.h"
 
 #include "cairo-default-context-private.h"
+#include "cairo-list-inline.h"
 #include "cairo-image-surface-private.h"
 #include "cairo-surface-backend-private.h"
 
@@ -137,6 +138,14 @@ _cairo_xlib_xcb_surface_unmap (void *abstract_surface,
     return cairo_surface_status (&surface->xcb->base);
 }
 
+static cairo_surface_t *
+_cairo_xlib_xcb_surface_source (void *abstract_surface,
+                               cairo_rectangle_int_t *extents)
+{
+    cairo_xlib_xcb_surface_t *surface = abstract_surface;
+    return _cairo_surface_get_source (&surface->xcb->base, extents);
+}
+
 static cairo_status_t
 _cairo_xlib_xcb_surface_acquire_source_image (void *abstract_surface,
                                              cairo_image_surface_t **image_out,
@@ -275,6 +284,7 @@ static const cairo_surface_backend_t _cairo_xlib_xcb_surface_backend = {
     _cairo_xlib_xcb_surface_map_to_image,
     _cairo_xlib_xcb_surface_unmap,
 
+    _cairo_xlib_xcb_surface_source,
     _cairo_xlib_xcb_surface_acquire_source_image,
     _cairo_xlib_xcb_surface_release_source_image,
     NULL, /* snapshot */
@@ -647,7 +657,11 @@ cairo_xlib_surface_set_drawable (cairo_surface_t   *abstract_surface,
        return;
     }
 
-    ASSERT_NOT_REACHED;
+    cairo_xcb_surface_set_drawable (&surface->xcb->base, drawable, width, height);
+    if (unlikely (surface->xcb->base.status)) {
+       status = _cairo_surface_set_error (abstract_surface,
+                                          _cairo_error (surface->xcb->base.status));
+    }
 }
 
 Display *
@@ -782,6 +796,22 @@ cairo_xlib_surface_get_height (cairo_surface_t *abstract_surface)
 }
 
 void
+cairo_xlib_device_debug_cap_xrender_version (cairo_device_t *device,
+                                            int major, int minor)
+{
+    cairo_xlib_xcb_display_t *display = (cairo_xlib_xcb_display_t *) device;
+
+    if (device == NULL || device->status)
+       return;
+
+    if (device->backend->type != CAIRO_DEVICE_TYPE_XLIB)
+       return;
+
+    cairo_xcb_device_debug_cap_xrender_version (display->xcb_device,
+                                               major, minor);
+}
+
+void
 cairo_xlib_device_debug_set_precision (cairo_device_t *device,
                                       int precision)
 {
index 7f770b9..ecf8d6c 100644 (file)
@@ -93,6 +93,11 @@ cairo_xlib_surface_get_height (cairo_surface_t *surface);
 
 /* debug interface */
 
+cairo_public void
+cairo_xlib_device_debug_cap_xrender_version (cairo_device_t *device,
+                                            int major_version,
+                                            int minor_version);
+
 /*
  * @precision: -1 implies automatically choose based on antialiasing mode,
  *            any other value overrides and sets the corresponding PolyMode.
index 40b6160..777d470 100644 (file)
@@ -50,7 +50,7 @@
 #include "cairo-image-surface-private.h"
 #include "cairo-error-private.h"
 #include "cairo-output-stream-private.h"
-#include "cairo-recording-surface-private.h"
+#include "cairo-recording-surface-inline.h"
 
 #define static cairo_warn static
 
@@ -953,8 +953,7 @@ _cairo_xml_surface_glyphs (void                         *abstract_surface,
                           cairo_glyph_t            *glyphs,
                           int                       num_glyphs,
                           cairo_scaled_font_t      *scaled_font,
-                          const cairo_clip_t       *clip,
-                          int                      *remaining_glyphs)
+                          const cairo_clip_t       *clip)
 {
     cairo_xml_surface_t *surface = abstract_surface;
     cairo_xml_t *xml = to_xml (surface);
@@ -988,7 +987,6 @@ _cairo_xml_surface_glyphs (void                         *abstract_surface,
     _cairo_xml_indent (xml, -2);
     _cairo_xml_printf (xml, "</glyphs>");
 
-    *remaining_glyphs = 0;
     return CAIRO_STATUS_SUCCESS;
 }
 
@@ -996,6 +994,7 @@ static const cairo_surface_backend_t
 _cairo_xml_surface_backend = {
     CAIRO_SURFACE_TYPE_XML,
     NULL,
+
     _cairo_default_context_create,
 
     _cairo_xml_surface_create_similar,
@@ -1003,39 +1002,26 @@ _cairo_xml_surface_backend = {
     NULL, /* map_to_image */
     NULL, /* unmap_image */
 
-    NULL, NULL, /* source image */
-    NULL, NULL, /* dst image */
-    NULL, /* clone_similar */
-    NULL, /* composite */
-    NULL, /* fill_rectangles */
-    NULL, /* composite_trapezoids */
-    NULL, /* create_span_renderer */
-    NULL, /* check_span_renderer */
-    NULL, NULL, /* copy/show page */
+    _cairo_surface_default_source,
+    NULL, /* acquire source image */
+    NULL, /* release source image */
+    NULL, /* snapshot */
+
+    NULL, /* copy page */
+    NULL, /* show page */
+
     _cairo_xml_surface_get_extents,
-    NULL, /* old_show_glyphs */
     NULL, /* get_font_options */
+
     NULL, /* flush */
     NULL, /* mark_dirty_rectangle */
-    NULL, /* font fini */
-    NULL, /* scaled_glyph_fini */
 
-    /* The 5 high level operations */
     _cairo_xml_surface_paint,
     _cairo_xml_surface_mask,
     _cairo_xml_surface_stroke,
     _cairo_xml_surface_fill,
-    _cairo_xml_surface_glyphs,
-
-    NULL, /* snapshot */
-
-    NULL, /* is_similar */
     NULL, /* fill_stroke */
-    NULL, /* create_solid_pattern_surface */
-    NULL, /* can_repaint_solid_pattern_surface */
-
-    /* The alternate high-level text operation */
-    NULL, NULL, /* has, show_text_glyphs */
+    _cairo_xml_surface_glyphs,
 };
 
 static cairo_surface_t *
index cbc3974..82396d2 100644 (file)
@@ -63,9 +63,9 @@
  * draw shapes with cairo_stroke() or cairo_fill().
  *
  * #cairo_t<!-- -->'s can be pushed to a stack via cairo_save().
- * They may then safely be changed, without loosing the current state.
+ * They may then safely be changed, without losing the current state.
  * Use cairo_restore() to restore to the saved state.
- */
+ **/
 
 /**
  * SECTION:cairo-text
@@ -92,7 +92,7 @@
  * the pangocairo that is part of the Pango text layout and rendering library.
  * Pango is available from <ulink
  * url="http://www.pango.org/">http://www.pango.org/</ulink>.
- */
+ **/
 
 /**
  * SECTION:cairo-transforms
  * drawing instruments from the <firstterm>user space</firstterm> into the
  * surface's canonical coordinate system, also known as the <firstterm>device
  * space</firstterm>.
- */
+ **/
 
 #define DEFINE_NIL_CONTEXT(status)                                     \
     {                                                                  \
@@ -218,6 +218,8 @@ _cairo_create_in_error (cairo_status_t status)
  *  writing (such as #cairo_mime_surface_t) then a
  *  %CAIRO_STATUS_WRITE_ERROR will be raised.  You can use this
  *  object normally, but no drawing will be done.
+ *
+ * Since: 1.0
  **/
 cairo_t *
 cairo_create (cairo_surface_t *target)
@@ -258,6 +260,8 @@ _cairo_init (cairo_t *cr,
  * cairo_get_reference_count().
  *
  * Return value: the referenced #cairo_t.
+ *
+ * Since: 1.0
  **/
 cairo_t *
 cairo_reference (cairo_t *cr)
@@ -285,6 +289,8 @@ _cairo_fini (cairo_t *cr)
  * Decreases the reference count on @cr by one. If the result
  * is zero, then @cr and all associated resources are freed.
  * See cairo_reference().
+ *
+ * Since: 1.0
  **/
 void
 cairo_destroy (cairo_t *cr)
@@ -388,6 +394,8 @@ cairo_get_reference_count (cairo_t *cr)
  * a #cairo_t is freed. If the reference count of a #cairo_t
  * drops to zero in response to a call to cairo_destroy(),
  * any saved states will be freed along with the #cairo_t.
+ *
+ * Since: 1.0
  **/
 void
 cairo_save (cairo_t *cr)
@@ -410,6 +418,8 @@ slim_hidden_def(cairo_save);
  * Restores @cr to the state saved by a preceding call to
  * cairo_save() and removes that state from the stack of
  * saved states.
+ *
+ * Since: 1.0
  **/
 void
 cairo_restore (cairo_t *cr)
@@ -468,7 +478,7 @@ slim_hidden_def(cairo_restore);
  * </programlisting></informalexample>
  *
  * Since: 1.2
- */
+ **/
 void
 cairo_push_group (cairo_t *cr)
 {
@@ -493,7 +503,7 @@ cairo_push_group (cairo_t *cr)
  * detailed description of group rendering.
  *
  * Since: 1.2
- */
+ **/
 void
 cairo_push_group_with_content (cairo_t *cr, cairo_content_t content)
 {
@@ -592,6 +602,8 @@ cairo_pop_group_to_source (cairo_t *cr)
  * each available compositing operator.
  *
  * The default operator is %CAIRO_OPERATOR_OVER.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_operator (cairo_t *cr, cairo_operator_t op)
@@ -619,6 +631,8 @@ slim_hidden_def (cairo_set_operator);
  * using the alpha value.
  *
  * The default opacity is 1.
+ *
+ * Since: TBD
  **/
 void
 cairo_set_opacity (cairo_t *cr, double opacity)
@@ -635,7 +649,7 @@ cairo_set_opacity (cairo_t *cr, double opacity)
 #endif
 
 /**
- * cairo_set_source_rgb
+ * cairo_set_source_rgb:
  * @cr: a cairo context
  * @red: red component of color
  * @green: green component of color
@@ -651,6 +665,8 @@ cairo_set_opacity (cairo_t *cr, double opacity)
  *
  * The default source pattern is opaque black, (that is, it is
  * equivalent to cairo_set_source_rgb(cr, 0.0, 0.0, 0.0)).
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_source_rgb (cairo_t *cr, double red, double green, double blue)
@@ -684,6 +700,8 @@ slim_hidden_def (cairo_set_source_rgb);
  *
  * The default source pattern is opaque black, (that is, it is
  * equivalent to cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0)).
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_source_rgba (cairo_t *cr,
@@ -722,6 +740,8 @@ cairo_set_source_rgba (cairo_t *cr,
  * The resulting pattern can be queried with cairo_get_source() so
  * that these attributes can be modified if desired, (eg. to create a
  * repeating pattern with cairo_pattern_set_extend()).
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_source_surface (cairo_t        *cr,
@@ -746,7 +766,7 @@ cairo_set_source_surface (cairo_t     *cr,
 slim_hidden_def (cairo_set_source_surface);
 
 /**
- * cairo_set_source
+ * cairo_set_source:
  * @cr: a cairo context
  * @source: a #cairo_pattern_t to be used as the source for
  * subsequent drawing operations.
@@ -763,6 +783,8 @@ slim_hidden_def (cairo_set_source_surface);
  * The default source pattern is a solid pattern that is opaque black,
  * (that is, it is equivalent to cairo_set_source_rgb(cr, 0.0, 0.0,
  * 0.0)).
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_source (cairo_t *cr, cairo_pattern_t *source)
@@ -797,6 +819,8 @@ slim_hidden_def (cairo_set_source);
  * Return value: the current source pattern. This object is owned by
  * cairo. To keep a reference to it, you must call
  * cairo_pattern_reference().
+ *
+ * Since: 1.0
  **/
 cairo_pattern_t *
 cairo_get_source (cairo_t *cr)
@@ -822,6 +846,8 @@ cairo_get_source (cairo_t *cr)
  * within Cairo is limited by the precision of its internal arithmetic, and
  * the prescribed @tolerance is restricted to the smallest
  * representable internal value.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_tolerance (cairo_t *cr, double tolerance)
@@ -849,6 +875,8 @@ slim_hidden_def (cairo_set_tolerance);
  *
  * Note that this option does not affect text rendering, instead see
  * cairo_font_options_set_antialias().
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias)
@@ -875,6 +903,8 @@ cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias)
  * on the semantics of each available fill rule.
  *
  * The default fill rule is %CAIRO_FILL_RULE_WINDING.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_fill_rule (cairo_t *cr, cairo_fill_rule_t fill_rule)
@@ -914,6 +944,8 @@ cairo_set_fill_rule (cairo_t *cr, cairo_fill_rule_t fill_rule)
  * construction.
  *
  * The default line width value is 2.0.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_line_width (cairo_t *cr, double width)
@@ -947,6 +979,8 @@ slim_hidden_def (cairo_set_line_width);
  * construction.
  *
  * The default line cap style is %CAIRO_LINE_CAP_BUTT.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_line_cap (cairo_t *cr, cairo_line_cap_t line_cap)
@@ -977,6 +1011,8 @@ slim_hidden_def (cairo_set_line_cap);
  * construction.
  *
  * The default line join style is %CAIRO_LINE_JOIN_MITER.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_line_join (cairo_t *cr, cairo_line_join_t line_join)
@@ -1023,6 +1059,8 @@ slim_hidden_def (cairo_set_line_join);
  * If any value in @dashes is negative, or if all values are 0, then
  * @cr will be put into an error state with a status of
  * %CAIRO_STATUS_INVALID_DASH.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_dash (cairo_t             *cr,
@@ -1052,7 +1090,7 @@ cairo_set_dash (cairo_t        *cr,
  * Return value: the length of the dash array, or 0 if no dash array set.
  *
  * Since: 1.4
- */
+ **/
 int
 cairo_get_dash_count (cairo_t *cr)
 {
@@ -1116,6 +1154,8 @@ cairo_get_dash (cairo_t *cr,
  *
  * A miter limit for a desired angle can be computed as: miter limit =
  * 1/sin(angle/2)
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_miter_limit (cairo_t *cr, double limit)
@@ -1141,6 +1181,8 @@ cairo_set_miter_limit (cairo_t *cr, double limit)
  * user-space coordinate according to the CTM in place before the new
  * call to cairo_translate(). In other words, the translation of the
  * user-space origin takes place after any existing transformation.
+ *
+ * Since: 1.0
  **/
 void
 cairo_translate (cairo_t *cr, double tx, double ty)
@@ -1166,6 +1208,8 @@ slim_hidden_def (cairo_translate);
  * and Y user-space axes by @sx and @sy respectively. The scaling of
  * the axes takes place after any existing transformation of user
  * space.
+ *
+ * Since: 1.0
  **/
 void
 cairo_scale (cairo_t *cr, double sx, double sy)
@@ -1192,6 +1236,8 @@ slim_hidden_def (cairo_scale);
  * places after any existing transformation of user space. The
  * rotation direction for positive angles is from the positive X axis
  * toward the positive Y axis.
+ *
+ * Since: 1.0
  **/
 void
 cairo_rotate (cairo_t *cr, double angle)
@@ -1214,6 +1260,8 @@ cairo_rotate (cairo_t *cr, double angle)
  * Modifies the current transformation matrix (CTM) by applying
  * @matrix as an additional transformation. The new transformation of
  * user space takes place after any existing transformation.
+ *
+ * Since: 1.0
  **/
 void
 cairo_transform (cairo_t             *cr,
@@ -1237,6 +1285,8 @@ slim_hidden_def (cairo_transform);
  *
  * Modifies the current transformation matrix (CTM) by setting it
  * equal to @matrix.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_matrix (cairo_t             *cr,
@@ -1261,6 +1311,8 @@ slim_hidden_def (cairo_set_matrix);
  * to the identity matrix. That is, the user-space and device-space
  * axes will be aligned and one user-space unit will transform to one
  * device-space unit.
+ *
+ * Since: 1.0
  **/
 void
 cairo_identity_matrix (cairo_t *cr)
@@ -1284,6 +1336,8 @@ cairo_identity_matrix (cairo_t *cr)
  * Transform a coordinate from user space to device space by
  * multiplying the given point by the current transformation matrix
  * (CTM).
+ *
+ * Since: 1.0
  **/
 void
 cairo_user_to_device (cairo_t *cr, double *x, double *y)
@@ -1305,6 +1359,8 @@ slim_hidden_def (cairo_user_to_device);
  * function is similar to cairo_user_to_device() except that the
  * translation components of the CTM will be ignored when transforming
  * (@dx,@dy).
+ *
+ * Since: 1.0
  **/
 void
 cairo_user_to_device_distance (cairo_t *cr, double *dx, double *dy)
@@ -1325,6 +1381,8 @@ slim_hidden_def (cairo_user_to_device_distance);
  * Transform a coordinate from device space to user space by
  * multiplying the given point by the inverse of the current
  * transformation matrix (CTM).
+ *
+ * Since: 1.0
  **/
 void
 cairo_device_to_user (cairo_t *cr, double *x, double *y)
@@ -1346,6 +1404,8 @@ slim_hidden_def (cairo_device_to_user);
  * function is similar to cairo_device_to_user() except that the
  * translation components of the inverse CTM will be ignored when
  * transforming (@dx,@dy).
+ *
+ * Since: 1.0
  **/
 void
 cairo_device_to_user_distance (cairo_t *cr, double *dx, double *dy)
@@ -1362,6 +1422,8 @@ cairo_device_to_user_distance (cairo_t *cr, double *dx, double *dy)
  *
  * Clears the current path. After this call there will be no path and
  * no current point.
+ *
+ * Since: 1.0
  **/
 void
 cairo_new_path (cairo_t *cr)
@@ -1416,6 +1478,8 @@ cairo_new_sub_path (cairo_t *cr)
  *
  * Begin a new sub-path. After this call the current point will be (@x,
  * @y).
+ *
+ * Since: 1.0
  **/
 void
 cairo_move_to (cairo_t *cr, double x, double y)
@@ -1444,6 +1508,8 @@ slim_hidden_def(cairo_move_to);
  *
  * If there is no current point before the call to cairo_line_to()
  * this function will behave as cairo_move_to(@cr, @x, @y).
+ *
+ * Since: 1.0
  **/
 void
 cairo_line_to (cairo_t *cr, double x, double y)
@@ -1477,6 +1543,8 @@ slim_hidden_def (cairo_line_to);
  * If there is no current point before the call to cairo_curve_to()
  * this function will behave as if preceded by a call to
  * cairo_move_to(@cr, @x1, @y1).
+ *
+ * Since: 1.0
  **/
 void
 cairo_curve_to (cairo_t *cr,
@@ -1545,6 +1613,8 @@ slim_hidden_def (cairo_curve_to);
  * cairo_arc (cr, 0., 0., 1., 0., 2 * M_PI);
  * cairo_restore (cr);
  * </programlisting></informalexample>
+ *
+ * Since: 1.0
  **/
 void
 cairo_arc (cairo_t *cr,
@@ -1588,6 +1658,8 @@ cairo_arc (cairo_t *cr,
  *
  * See cairo_arc() for more details. This function differs only in the
  * direction of the arc between the two angles.
+ *
+ * Since: 1.0
  **/
 void
 cairo_arc_negative (cairo_t *cr,
@@ -1663,6 +1735,8 @@ cairo_rel_arc_to (cairo_t *cr,
  * It is an error to call this function with no current point. Doing
  * so will cause @cr to shutdown with a status of
  * %CAIRO_STATUS_NO_CURRENT_POINT.
+ *
+ * Since: 1.0
  **/
 void
 cairo_rel_move_to (cairo_t *cr, double dx, double dy)
@@ -1694,6 +1768,8 @@ cairo_rel_move_to (cairo_t *cr, double dx, double dy)
  * It is an error to call this function with no current point. Doing
  * so will cause @cr to shutdown with a status of
  * %CAIRO_STATUS_NO_CURRENT_POINT.
+ *
+ * Since: 1.0
  **/
 void
 cairo_rel_line_to (cairo_t *cr, double dx, double dy)
@@ -1733,6 +1809,8 @@ slim_hidden_def(cairo_rel_line_to);
  * It is an error to call this function with no current point. Doing
  * so will cause @cr to shutdown with a status of
  * %CAIRO_STATUS_NO_CURRENT_POINT.
+ *
+ * Since: 1.0
  **/
 void
 cairo_rel_curve_to (cairo_t *cr,
@@ -1772,6 +1850,8 @@ cairo_rel_curve_to (cairo_t *cr,
  * cairo_rel_line_to (cr, -width, 0);
  * cairo_close_path (cr);
  * </programlisting></informalexample>
+ *
+ * Since: 1.0
  **/
 void
 cairo_rectangle (cairo_t *cr,
@@ -1831,6 +1911,8 @@ cairo_stroke_to_path (cairo_t *cr)
  * not be necessary to save the "last move_to point" during processing
  * as the MOVE_TO immediately after the CLOSE_PATH will provide that
  * point.
+ *
+ * Since: 1.0
  **/
 void
 cairo_close_path (cairo_t *cr)
@@ -1903,6 +1985,8 @@ cairo_path_extents (cairo_t *cr,
  *
  * A drawing operator that paints the current source everywhere within
  * the current clip region.
+ *
+ * Since: 1.0
  **/
 void
 cairo_paint (cairo_t *cr)
@@ -1927,6 +2011,8 @@ slim_hidden_def (cairo_paint);
  * the current clip region using a mask of constant alpha value
  * @alpha. The effect is similar to cairo_paint(), but the drawing
  * is faded out using the alpha value.
+ *
+ * Since: 1.0
  **/
 void
 cairo_paint_with_alpha (cairo_t *cr,
@@ -1951,7 +2037,9 @@ cairo_paint_with_alpha (cairo_t *cr,
  * using the alpha channel of @pattern as a mask. (Opaque
  * areas of @pattern are painted with the source, transparent
  * areas are not painted.)
- */
+ *
+ * Since: 1.0
+ **/
 void
 cairo_mask (cairo_t         *cr,
            cairo_pattern_t *pattern)
@@ -1988,7 +2076,9 @@ slim_hidden_def (cairo_mask);
  * using the alpha channel of @surface as a mask. (Opaque
  * areas of @surface are painted with the source, transparent
  * areas are not painted.)
- */
+ *
+ * Since: 1.0
+ **/
 void
 cairo_mask_surface (cairo_t         *cr,
                    cairo_surface_t *surface,
@@ -2042,6 +2132,8 @@ cairo_mask_surface (cairo_t         *cr,
  *
  * In no case will a cap style of %CAIRO_LINE_CAP_BUTT cause anything
  * to be drawn in the case of either degenerate segments or sub-paths.
+ *
+ * Since: 1.0
  **/
 void
 cairo_stroke (cairo_t *cr)
@@ -2069,6 +2161,8 @@ slim_hidden_def(cairo_stroke);
  * See cairo_set_line_width(), cairo_set_line_join(),
  * cairo_set_line_cap(), cairo_set_dash(), and
  * cairo_stroke_preserve().
+ *
+ * Since: 1.0
  **/
 void
 cairo_stroke_preserve (cairo_t *cr)
@@ -2093,6 +2187,8 @@ slim_hidden_def(cairo_stroke_preserve);
  * filled). After cairo_fill(), the current path will be cleared from
  * the cairo context. See cairo_set_fill_rule() and
  * cairo_fill_preserve().
+ *
+ * Since: 1.0
  **/
 void
 cairo_fill (cairo_t *cr)
@@ -2117,6 +2213,8 @@ cairo_fill (cairo_t *cr)
  * path within the cairo context.
  *
  * See cairo_set_fill_rule() and cairo_fill().
+ *
+ * Since: 1.0
  **/
 void
 cairo_fill_preserve (cairo_t *cr)
@@ -2143,6 +2241,8 @@ slim_hidden_def(cairo_fill_preserve);
  *
  * This is a convenience function that simply calls
  * cairo_surface_copy_page() on @cr's target.
+ *
+ * Since: 1.0
  **/
 void
 cairo_copy_page (cairo_t *cr)
@@ -2166,6 +2266,8 @@ cairo_copy_page (cairo_t *cr)
  *
  * This is a convenience function that simply calls
  * cairo_surface_show_page() on @cr's target.
+ *
+ * Since: 1.0
  **/
 void
 cairo_show_page (cairo_t *cr)
@@ -2197,6 +2299,8 @@ cairo_show_page (cairo_t *cr)
  *
  * Return value: A non-zero value if the point is inside, or zero if
  * outside.
+ *
+ * Since: 1.0
  **/
 cairo_bool_t
 cairo_in_stroke (cairo_t *cr, double x, double y)
@@ -2229,6 +2333,8 @@ cairo_in_stroke (cairo_t *cr, double x, double y)
  *
  * Return value: A non-zero value if the point is inside, or zero if
  * outside.
+ *
+ * Since: 1.0
  **/
 cairo_bool_t
 cairo_in_fill (cairo_t *cr, double x, double y)
@@ -2273,6 +2379,8 @@ cairo_in_fill (cairo_t *cr, double x, double y)
  * See cairo_stroke(), cairo_set_line_width(), cairo_set_line_join(),
  * cairo_set_line_cap(), cairo_set_dash(), and
  * cairo_stroke_preserve().
+ *
+ * Since: 1.0
  **/
 void
 cairo_stroke_extents (cairo_t *cr,
@@ -2322,6 +2430,8 @@ cairo_stroke_extents (cairo_t *cr,
  * if the non-inked path extents are desired.
  *
  * See cairo_fill(), cairo_set_fill_rule() and cairo_fill_preserve().
+ *
+ * Since: 1.0
  **/
 void
 cairo_fill_extents (cairo_t *cr,
@@ -2368,6 +2478,8 @@ cairo_fill_extents (cairo_t *cr,
  * calling cairo_clip() within a cairo_save()/cairo_restore()
  * pair. The only other means of increasing the size of the clip
  * region is cairo_reset_clip().
+ *
+ * Since: 1.0
  **/
 void
 cairo_clip (cairo_t *cr)
@@ -2403,6 +2515,8 @@ cairo_clip (cairo_t *cr)
  * calling cairo_clip_preserve() within a cairo_save()/cairo_restore()
  * pair. The only other means of increasing the size of the clip
  * region is cairo_reset_clip().
+ *
+ * Since: 1.0
  **/
 void
 cairo_clip_preserve (cairo_t *cr)
@@ -2433,6 +2547,8 @@ slim_hidden_def(cairo_clip_preserve);
  * higher-level code which calls cairo_clip(). Consider using
  * cairo_save() and cairo_restore() around cairo_clip() as a more
  * robust means of temporarily restricting the clip region.
+ *
+ * Since: 1.0
  **/
 void
 cairo_reset_clip (cairo_t *cr)
@@ -2593,6 +2709,8 @@ cairo_copy_clip_rectangle_list (cairo_t *cr)
  *
  * This function is equivalent to a call to cairo_toy_font_face_create()
  * followed by cairo_set_font_face().
+ *
+ * Since: 1.0
  **/
 void
 cairo_select_font_face (cairo_t              *cr,
@@ -2626,6 +2744,8 @@ cairo_select_font_face (cairo_t              *cr,
  * will be stored.
  *
  * Gets the font extents for the currently selected font.
+ *
+ * Since: 1.0
  **/
 void
 cairo_font_extents (cairo_t              *cr,
@@ -2655,6 +2775,8 @@ cairo_font_extents (cairo_t              *cr,
  * Replaces the current #cairo_font_face_t object in the #cairo_t with
  * @font_face. The replaced font face in the #cairo_t will be
  * destroyed if there are no other references to it.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_font_face (cairo_t           *cr,
@@ -2687,6 +2809,8 @@ cairo_set_font_face (cairo_t           *cr,
  * objects it is passed to, (for example, calling
  * cairo_set_font_face() with a nil font will trigger an error that
  * will shutdown the #cairo_t object).
+ *
+ * Since: 1.0
  **/
 cairo_font_face_t *
 cairo_get_font_face (cairo_t *cr)
@@ -2711,6 +2835,8 @@ cairo_get_font_face (cairo_t *cr)
  * If text is drawn without a call to cairo_set_font_size(), (nor
  * cairo_set_font_matrix() nor cairo_set_scaled_font()), the default
  * font size is 10.0.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_font_size (cairo_t *cr, double size)
@@ -2727,7 +2853,7 @@ cairo_set_font_size (cairo_t *cr, double size)
 slim_hidden_def (cairo_set_font_size);
 
 /**
- * cairo_set_font_matrix
+ * cairo_set_font_matrix:
  * @cr: a #cairo_t
  * @matrix: a #cairo_matrix_t describing a transform to be applied to
  * the current font.
@@ -2738,6 +2864,8 @@ slim_hidden_def (cairo_set_font_size);
  * simple scale is used (see cairo_set_font_size()), but a more
  * complex font matrix can be used to shear the font
  * or stretch it unequally along the two axes
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_font_matrix (cairo_t             *cr,
@@ -2755,12 +2883,14 @@ cairo_set_font_matrix (cairo_t              *cr,
 slim_hidden_def (cairo_set_font_matrix);
 
 /**
- * cairo_get_font_matrix
+ * cairo_get_font_matrix:
  * @cr: a #cairo_t
  * @matrix: return value for the matrix
  *
  * Stores the current font matrix into @matrix. See
  * cairo_set_font_matrix().
+ *
+ * Since: 1.0
  **/
 void
 cairo_get_font_matrix (cairo_t *cr, cairo_matrix_t *matrix)
@@ -2783,6 +2913,8 @@ cairo_get_font_matrix (cairo_t *cr, cairo_matrix_t *matrix)
  * options derived from underlying surface; if the value in @options
  * has a default value (like %CAIRO_ANTIALIAS_DEFAULT), then the value
  * from the surface is used.
+ *
+ * Since: 1.0
  **/
 void
 cairo_set_font_options (cairo_t                    *cr,
@@ -2815,6 +2947,8 @@ slim_hidden_def (cairo_set_font_options);
  * Note that the returned options do not include any options derived
  * from the underlying surface; they are literally the options
  * passed to cairo_set_font_options().
+ *
+ * Since: 1.0
  **/
 void
 cairo_get_font_options (cairo_t              *cr,
@@ -2919,6 +3053,8 @@ slim_hidden_def (cairo_get_scaled_font);
  * characters. In particular, trailing whitespace characters are
  * likely to not affect the size of the rectangle, though they will
  * affect the x_advance and y_advance values.
+ *
+ * Since: 1.0
  **/
 void
 cairo_text_extents (cairo_t              *cr,
@@ -2985,6 +3121,8 @@ cairo_text_extents (cairo_t              *cr,
  *
  * Note that whitespace glyphs do not contribute to the size of the
  * rectangle (extents.width and extents.height).
+ *
+ * Since: 1.0
  **/
 void
 cairo_glyph_extents (cairo_t                *cr,
@@ -3048,6 +3186,8 @@ cairo_glyph_extents (cairo_t                *cr,
  * and simple programs, but it is not expected to be adequate for
  * serious text-using applications. See cairo_show_glyphs() for the
  * "real" text display API in cairo.
+ *
+ * Since: 1.0
  **/
 void
 cairo_show_text (cairo_t *cr, const char *utf8)
@@ -3148,6 +3288,8 @@ cairo_show_text (cairo_t *cr, const char *utf8)
  * A drawing operator that generates the shape from an array of glyphs,
  * rendered according to the current font face, font size
  * (font matrix), and font options.
+ *
+ * Since: 1.0
  **/
 void
 cairo_show_glyphs (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs)
@@ -3307,6 +3449,8 @@ cairo_show_text_glyphs (cairo_t                      *cr,
  * and simple programs, but it is not expected to be adequate for
  * serious text-using applications. See cairo_glyph_path() for the
  * "real" text path API in cairo.
+ *
+ * Since: 1.0
  **/
 void
 cairo_text_path (cairo_t *cr, const char *utf8)
@@ -3377,6 +3521,8 @@ cairo_text_path (cairo_t *cr, const char *utf8)
  * Adds closed paths for the glyphs to the current path.  The generated
  * path if filled, achieves an effect similar to that of
  * cairo_show_glyphs().
+ *
+ * Since: 1.0
  **/
 void
 cairo_glyph_path (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs)
@@ -3411,6 +3557,8 @@ cairo_glyph_path (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs)
  * Gets the current compositing operator for a cairo context.
  *
  * Return value: the current compositing operator.
+ *
+ * Since: 1.0
  **/
 cairo_operator_t
 cairo_get_operator (cairo_t *cr)
@@ -3429,6 +3577,8 @@ cairo_get_operator (cairo_t *cr)
  * Gets the current compositing opacity for a cairo context.
  *
  * Return value: the current compositing opacity.
+ *
+ * Since: TBD
  **/
 double
 cairo_get_opacity (cairo_t *cr)
@@ -3447,6 +3597,8 @@ cairo_get_opacity (cairo_t *cr)
  * Gets the current tolerance value, as set by cairo_set_tolerance().
  *
  * Return value: the current tolerance value.
+ *
+ * Since: 1.0
  **/
 double
 cairo_get_tolerance (cairo_t *cr)
@@ -3466,6 +3618,8 @@ slim_hidden_def (cairo_get_tolerance);
  * cairo_set_antialias().
  *
  * Return value: the current shape antialiasing mode.
+ *
+ * Since: 1.0
  **/
 cairo_antialias_t
 cairo_get_antialias (cairo_t *cr)
@@ -3525,6 +3679,8 @@ cairo_has_current_point (cairo_t *cr)
  *
  * Some functions unset the current path and as a result, current point:
  * cairo_fill(), cairo_stroke().
+ *
+ * Since: 1.0
  **/
 void
 cairo_get_current_point (cairo_t *cr, double *x_ret, double *y_ret)
@@ -3552,6 +3708,8 @@ slim_hidden_def(cairo_get_current_point);
  * Gets the current fill rule, as set by cairo_set_fill_rule().
  *
  * Return value: the current fill rule.
+ *
+ * Since: 1.0
  **/
 cairo_fill_rule_t
 cairo_get_fill_rule (cairo_t *cr)
@@ -3572,6 +3730,8 @@ cairo_get_fill_rule (cairo_t *cr)
  * cairo_get_line_width().
  *
  * Return value: the current line width.
+ *
+ * Since: 1.0
  **/
 double
 cairo_get_line_width (cairo_t *cr)
@@ -3590,6 +3750,8 @@ slim_hidden_def (cairo_get_line_width);
  * Gets the current line cap style, as set by cairo_set_line_cap().
  *
  * Return value: the current line cap style.
+ *
+ * Since: 1.0
  **/
 cairo_line_cap_t
 cairo_get_line_cap (cairo_t *cr)
@@ -3607,6 +3769,8 @@ cairo_get_line_cap (cairo_t *cr)
  * Gets the current line join style, as set by cairo_set_line_join().
  *
  * Return value: the current line join style.
+ *
+ * Since: 1.0
  **/
 cairo_line_join_t
 cairo_get_line_join (cairo_t *cr)
@@ -3624,6 +3788,8 @@ cairo_get_line_join (cairo_t *cr)
  * Gets the current miter limit, as set by cairo_set_miter_limit().
  *
  * Return value: the current miter limit.
+ *
+ * Since: 1.0
  **/
 double
 cairo_get_miter_limit (cairo_t *cr)
@@ -3640,6 +3806,8 @@ cairo_get_miter_limit (cairo_t *cr)
  * @matrix: return value for the matrix
  *
  * Stores the current transformation matrix (CTM) into @matrix.
+ *
+ * Since: 1.0
  **/
 void
 cairo_get_matrix (cairo_t *cr, cairo_matrix_t *matrix)
@@ -3668,6 +3836,8 @@ slim_hidden_def (cairo_get_matrix);
  *
  * Return value: the target surface. This object is owned by cairo. To
  * keep a reference to it, you must call cairo_surface_reference().
+ *
+ * Since: 1.0
  **/
 cairo_surface_t *
 cairo_get_target (cairo_t *cr)
@@ -3733,6 +3903,8 @@ cairo_get_group_target (cairo_t *cr)
  * Return value: the copy of the current path. The caller owns the
  * returned object and should call cairo_path_destroy() when finished
  * with it.
+ *
+ * Since: 1.0
  **/
 cairo_path_t *
 cairo_copy_path (cairo_t *cr)
@@ -3775,6 +3947,8 @@ cairo_copy_path (cairo_t *cr)
  * Return value: the copy of the current path. The caller owns the
  * returned object and should call cairo_path_destroy() when finished
  * with it.
+ *
+ * Since: 1.0
  **/
 cairo_path_t *
 cairo_copy_path_flat (cairo_t *cr)
@@ -3796,6 +3970,8 @@ cairo_copy_path_flat (cairo_t *cr)
  * #cairo_path_t for details on how the path data structure should be
  * initialized, and note that <literal>path->status</literal> must be
  * initialized to %CAIRO_STATUS_SUCCESS.
+ *
+ * Since: 1.0
  **/
 void
 cairo_append_path (cairo_t             *cr,
@@ -3840,6 +4016,8 @@ cairo_append_path (cairo_t                *cr,
  * Checks whether an error has previously occurred for this context.
  *
  * Returns: the current status of this context, see #cairo_status_t
+ *
+ * Since: 1.0
  **/
 cairo_status_t
 cairo_status (cairo_t *cr)
index 6f4ee91..a2f5aa3 100644 (file)
@@ -101,6 +101,8 @@ cairo_version_string (void);
  *      /<!-- -->* do something *<!-- -->/
  *  }
  * </programlisting></informalexample>
+ *
+ * Since: 1.0
  **/
 typedef int cairo_bool_t;
 
@@ -116,6 +118,8 @@ typedef int cairo_bool_t;
  *
  * Memory management of #cairo_t is done with
  * cairo_reference() and cairo_destroy().
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo cairo_t;
 
@@ -143,6 +147,8 @@ typedef struct _cairo cairo_t;
  *
  * Memory management of #cairo_surface_t is done with
  * cairo_surface_reference() and cairo_surface_destroy().
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo_surface cairo_surface_t;
 
@@ -180,6 +186,8 @@ typedef struct _cairo_device cairo_device_t;
  *     x_new = xx * x + xy * y + x0;
  *     y_new = yx * x + yy * y + y0;
  * </programlisting>
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo_matrix {
     double xx; double yx;
@@ -206,6 +214,8 @@ typedef struct _cairo_matrix {
  *
  * Memory management of #cairo_pattern_t is done with
  * cairo_pattern_reference() and cairo_pattern_destroy().
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo_pattern cairo_pattern_t;
 
@@ -216,6 +226,8 @@ typedef struct _cairo_pattern cairo_pattern_t;
  * #cairo_destroy_func_t the type of function which is called when a
  * data element is destroyed. It is passed the pointer to the data
  * element and should free any memory and resources allocated for it.
+ *
+ * Since: 1.0
  **/
 typedef void (*cairo_destroy_func_t) (void *data);
 
@@ -228,6 +240,8 @@ typedef void (*cairo_destroy_func_t) (void *data);
  * and there is no need to initialize the object; only the unique
  * address of a #cairo_data_key_t object is used.  Typically, you
  * would just use the address of a static #cairo_data_key_t object.
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo_user_data_key {
     int unused;
@@ -235,26 +249,26 @@ typedef struct _cairo_user_data_key {
 
 /**
  * cairo_status_t:
- * @CAIRO_STATUS_SUCCESS: no error has occurred
- * @CAIRO_STATUS_NO_MEMORY: out of memory
- * @CAIRO_STATUS_INVALID_RESTORE: cairo_restore() called without matching cairo_save()
- * @CAIRO_STATUS_INVALID_POP_GROUP: no saved group to pop, i.e. cairo_pop_group() without matching cairo_push_group()
- * @CAIRO_STATUS_NO_CURRENT_POINT: no current point defined
- * @CAIRO_STATUS_INVALID_MATRIX: invalid matrix (not invertible)
- * @CAIRO_STATUS_INVALID_STATUS: invalid value for an input #cairo_status_t
- * @CAIRO_STATUS_NULL_POINTER: %NULL pointer
- * @CAIRO_STATUS_INVALID_STRING: input string not valid UTF-8
- * @CAIRO_STATUS_INVALID_PATH_DATA: input path data not valid
- * @CAIRO_STATUS_READ_ERROR: error while reading from input stream
- * @CAIRO_STATUS_WRITE_ERROR: error while writing to output stream
- * @CAIRO_STATUS_SURFACE_FINISHED: target surface has been finished
- * @CAIRO_STATUS_SURFACE_TYPE_MISMATCH: the surface type is not appropriate for the operation
- * @CAIRO_STATUS_PATTERN_TYPE_MISMATCH: the pattern type is not appropriate for the operation
- * @CAIRO_STATUS_INVALID_CONTENT: invalid value for an input #cairo_content_t
- * @CAIRO_STATUS_INVALID_FORMAT: invalid value for an input #cairo_format_t
- * @CAIRO_STATUS_INVALID_VISUAL: invalid value for an input Visual*
- * @CAIRO_STATUS_FILE_NOT_FOUND: file not found
- * @CAIRO_STATUS_INVALID_DASH: invalid value for a dash setting
+ * @CAIRO_STATUS_SUCCESS: no error has occurred (Since 1.0)
+ * @CAIRO_STATUS_NO_MEMORY: out of memory (Since 1.0)
+ * @CAIRO_STATUS_INVALID_RESTORE: cairo_restore() called without matching cairo_save() (Since 1.0)
+ * @CAIRO_STATUS_INVALID_POP_GROUP: no saved group to pop, i.e. cairo_pop_group() without matching cairo_push_group() (Since 1.0)
+ * @CAIRO_STATUS_NO_CURRENT_POINT: no current point defined (Since 1.0)
+ * @CAIRO_STATUS_INVALID_MATRIX: invalid matrix (not invertible) (Since 1.0)
+ * @CAIRO_STATUS_INVALID_STATUS: invalid value for an input #cairo_status_t (Since 1.0)
+ * @CAIRO_STATUS_NULL_POINTER: %NULL pointer (Since 1.0)
+ * @CAIRO_STATUS_INVALID_STRING: input string not valid UTF-8 (Since 1.0)
+ * @CAIRO_STATUS_INVALID_PATH_DATA: input path data not valid (Since 1.0)
+ * @CAIRO_STATUS_READ_ERROR: error while reading from input stream (Since 1.0)
+ * @CAIRO_STATUS_WRITE_ERROR: error while writing to output stream (Since 1.0)
+ * @CAIRO_STATUS_SURFACE_FINISHED: target surface has been finished (Since 1.0)
+ * @CAIRO_STATUS_SURFACE_TYPE_MISMATCH: the surface type is not appropriate for the operation (Since 1.0)
+ * @CAIRO_STATUS_PATTERN_TYPE_MISMATCH: the pattern type is not appropriate for the operation (Since 1.0)
+ * @CAIRO_STATUS_INVALID_CONTENT: invalid value for an input #cairo_content_t (Since 1.0)
+ * @CAIRO_STATUS_INVALID_FORMAT: invalid value for an input #cairo_format_t (Since 1.0)
+ * @CAIRO_STATUS_INVALID_VISUAL: invalid value for an input Visual* (Since 1.0)
+ * @CAIRO_STATUS_FILE_NOT_FOUND: file not found (Since 1.0)
+ * @CAIRO_STATUS_INVALID_DASH: invalid value for a dash setting (Since 1.0)
  * @CAIRO_STATUS_INVALID_DSC_COMMENT: invalid value for a DSC comment (Since 1.2)
  * @CAIRO_STATUS_INVALID_INDEX: invalid index passed to getter (Since 1.4)
  * @CAIRO_STATUS_CLIP_NOT_REPRESENTABLE: clip region not representable in desired format (Since 1.4)
@@ -288,6 +302,8 @@ typedef struct _cairo_user_data_key {
  *
  * New entries may be added in future versions.  Use cairo_status_to_string()
  * to get a human-readable representation of an error message.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_status {
     CAIRO_STATUS_SUCCESS = 0,
@@ -335,9 +351,9 @@ typedef enum _cairo_status {
 
 /**
  * cairo_content_t:
- * @CAIRO_CONTENT_COLOR: The surface will hold color content only.
- * @CAIRO_CONTENT_ALPHA: The surface will hold alpha content only.
- * @CAIRO_CONTENT_COLOR_ALPHA: The surface will hold color and alpha content.
+ * @CAIRO_CONTENT_COLOR: The surface will hold color content only. (Since 1.0)
+ * @CAIRO_CONTENT_ALPHA: The surface will hold alpha content only. (Since 1.0)
+ * @CAIRO_CONTENT_COLOR_ALPHA: The surface will hold color and alpha content. (Since 1.0)
  *
  * #cairo_content_t is used to describe the content that a surface will
  * contain, whether color information, alpha information (translucence
@@ -346,6 +362,8 @@ typedef enum _cairo_status {
  * Note: The large values here are designed to keep #cairo_content_t
  * values distinct from #cairo_format_t values so that the
  * implementation can detect the error if users confuse the two types.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_content {
     CAIRO_CONTENT_COLOR                = 0x1000,
@@ -360,27 +378,29 @@ typedef enum _cairo_content {
  *   alpha in the upper 8 bits, then red, then green, then blue.
  *   The 32-bit quantities are stored native-endian. Pre-multiplied
  *   alpha is used. (That is, 50% transparent red is 0x80800000,
- *   not 0x80ff0000.)
+ *   not 0x80ff0000.) (Since 1.0)
  * @CAIRO_FORMAT_RGB24: each pixel is a 32-bit quantity, with
  *   the upper 8 bits unused. Red, Green, and Blue are stored
- *   in the remaining 24 bits in that order.
+ *   in the remaining 24 bits in that order. (Since 1.0)
  * @CAIRO_FORMAT_A8: each pixel is a 8-bit quantity holding
- *   an alpha value.
+ *   an alpha value. (Since 1.0)
  * @CAIRO_FORMAT_A1: each pixel is a 1-bit quantity holding
  *   an alpha value. Pixels are packed together into 32-bit
  *   quantities. The ordering of the bits matches the
  *   endianess of the platform. On a big-endian machine, the
  *   first pixel is in the uppermost bit, on a little-endian
- *   machine the first pixel is in the least-significant bit.
+ *   machine the first pixel is in the least-significant bit. (Since 1.0)
  * @CAIRO_FORMAT_RGB16_565: each pixel is a 16-bit quantity
  *   with red in the upper 5 bits, then green in the middle
- *   6 bits, and blue in the lower 5 bits.
- * @CAIRO_FORMAT_RGB30: like RGB24 but with 10bpc
+ *   6 bits, and blue in the lower 5 bits. (Since 1.2)
+ * @CAIRO_FORMAT_RGB30: like RGB24 but with 10bpc. (Since 1.12)
  *
  * #cairo_format_t is used to identify the memory format of
  * image data.
  *
  * New entries may be added in future versions.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_format {
     CAIRO_FORMAT_INVALID   = -1,
@@ -408,6 +428,8 @@ typedef enum _cairo_format {
  * %CAIRO_STATUS_WRITE_ERROR otherwise.
  *
  * Returns: the status code of the write operation
+ *
+ * Since: 1.0
  **/
 typedef cairo_status_t (*cairo_write_func_t) (void               *closure,
                                              const unsigned char *data,
@@ -428,6 +450,8 @@ typedef cairo_status_t (*cairo_write_func_t) (void            *closure,
  * %CAIRO_STATUS_READ_ERROR otherwise.
  *
  * Returns: the status code of the read operation
+ *
+ * Since: 1.0
  **/
 typedef cairo_status_t (*cairo_read_func_t) (void              *closure,
                                             unsigned char      *data,
@@ -496,64 +520,64 @@ cairo_pop_group_to_source (cairo_t *cr);
 
 /**
  * cairo_operator_t:
- * @CAIRO_OPERATOR_CLEAR: clear destination layer (bounded)
- * @CAIRO_OPERATOR_SOURCE: replace destination layer (bounded)
+ * @CAIRO_OPERATOR_CLEAR: clear destination layer (bounded) (Since 1.0)
+ * @CAIRO_OPERATOR_SOURCE: replace destination layer (bounded) (Since 1.0)
  * @CAIRO_OPERATOR_OVER: draw source layer on top of destination layer
- * (bounded)
+ * (bounded) (Since 1.0)
  * @CAIRO_OPERATOR_IN: draw source where there was destination content
- * (unbounded)
+ * (unbounded) (Since 1.0)
  * @CAIRO_OPERATOR_OUT: draw source where there was no destination
- * content (unbounded)
+ * content (unbounded) (Since 1.0)
  * @CAIRO_OPERATOR_ATOP: draw source on top of destination content and
- * only there
- * @CAIRO_OPERATOR_DEST: ignore the source
- * @CAIRO_OPERATOR_DEST_OVER: draw destination on top of source
+ * only there (Since 1.0)
+ * @CAIRO_OPERATOR_DEST: ignore the source (Since 1.0)
+ * @CAIRO_OPERATOR_DEST_OVER: draw destination on top of source (Since 1.0)
  * @CAIRO_OPERATOR_DEST_IN: leave destination only where there was
- * source content (unbounded)
+ * source content (unbounded) (Since 1.0)
  * @CAIRO_OPERATOR_DEST_OUT: leave destination only where there was no
- * source content
+ * source content (Since 1.0)
  * @CAIRO_OPERATOR_DEST_ATOP: leave destination on top of source content
- * and only there (unbounded)
+ * and only there (unbounded) (Since 1.0)
  * @CAIRO_OPERATOR_XOR: source and destination are shown where there is only
- * one of them
- * @CAIRO_OPERATOR_ADD: source and destination layers are accumulated
+ * one of them (Since 1.0)
+ * @CAIRO_OPERATOR_ADD: source and destination layers are accumulated (Since 1.0)
  * @CAIRO_OPERATOR_SATURATE: like over, but assuming source and dest are
- * disjoint geometries
+ * disjoint geometries (Since 1.0)
  * @CAIRO_OPERATOR_MULTIPLY: source and destination layers are multiplied.
- * This causes the result to be at least as dark as the darker inputs.
+ * This causes the result to be at least as dark as the darker inputs. (Since 1.10)
  * @CAIRO_OPERATOR_SCREEN: source and destination are complemented and
  * multiplied. This causes the result to be at least as light as the lighter
- * inputs.
+ * inputs. (Since 1.10)
  * @CAIRO_OPERATOR_OVERLAY: multiplies or screens, depending on the
- * lightness of the destination color.
+ * lightness of the destination color. (Since 1.10)
  * @CAIRO_OPERATOR_DARKEN: replaces the destination with the source if it
- * is darker, otherwise keeps the source.
+ * is darker, otherwise keeps the source. (Since 1.10)
  * @CAIRO_OPERATOR_LIGHTEN: replaces the destination with the source if it
- * is lighter, otherwise keeps the source.
+ * is lighter, otherwise keeps the source. (Since 1.10)
  * @CAIRO_OPERATOR_COLOR_DODGE: brightens the destination color to reflect
- * the source color.
+ * the source color. (Since 1.10)
  * @CAIRO_OPERATOR_COLOR_BURN: darkens the destination color to reflect
- * the source color.
+ * the source color. (Since 1.10)
  * @CAIRO_OPERATOR_HARD_LIGHT: Multiplies or screens, dependent on source
- * color.
+ * color. (Since 1.10)
  * @CAIRO_OPERATOR_SOFT_LIGHT: Darkens or lightens, dependent on source
- * color.
+ * color. (Since 1.10)
  * @CAIRO_OPERATOR_DIFFERENCE: Takes the difference of the source and
- * destination color.
+ * destination color. (Since 1.10)
  * @CAIRO_OPERATOR_EXCLUSION: Produces an effect similar to difference, but
- * with lower contrast.
+ * with lower contrast. (Since 1.10)
  * @CAIRO_OPERATOR_HSL_HUE: Creates a color with the hue of the source
- * and the saturation and luminosity of the target.
+ * and the saturation and luminosity of the target. (Since 1.10)
  * @CAIRO_OPERATOR_HSL_SATURATION: Creates a color with the saturation
  * of the source and the hue and luminosity of the target. Painting with
- * this mode onto a gray area produces no change.
+ * this mode onto a gray area produces no change. (Since 1.10)
  * @CAIRO_OPERATOR_HSL_COLOR: Creates a color with the hue and saturation
  * of the source and the luminosity of the target. This preserves the gray
  * levels of the target and is useful for coloring monochrome images or
- * tinting color images.
+ * tinting color images. (Since 1.10)
  * @CAIRO_OPERATOR_HSL_LUMINOSITY: Creates a color with the luminosity of
  * the source and the hue and saturation of the target. This produces an
- * inverse effect to @CAIRO_OPERATOR_HSL_COLOR.
+ * inverse effect to @CAIRO_OPERATOR_HSL_COLOR. (Since 1.10)
  *
  * #cairo_operator_t is used to set the compositing operator for all cairo
  * drawing operations.
@@ -572,6 +596,8 @@ cairo_pop_group_to_source (cairo_t *cr);
  * For a more detailed explanation of the effects of each operator, including
  * the mathematical definitions, see
  * <ulink url="http://cairographics.org/operators/">http://cairographics.org/operators/</ulink>.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_operator {
     CAIRO_OPERATOR_CLEAR,
@@ -635,13 +661,19 @@ cairo_set_tolerance (cairo_t *cr, double tolerance);
 /**
  * cairo_antialias_t:
  * @CAIRO_ANTIALIAS_DEFAULT: Use the default antialiasing for
- *   the subsystem and target device
- * @CAIRO_ANTIALIAS_NONE: Use a bilevel alpha mask
+ *   the subsystem and target device, since 1.0
+ * @CAIRO_ANTIALIAS_NONE: Use a bilevel alpha mask, since 1.0
  * @CAIRO_ANTIALIAS_GRAY: Perform single-color antialiasing (using
- *  shades of gray for black text on a white background, for example).
+ *  shades of gray for black text on a white background, for example), since 1.0
  * @CAIRO_ANTIALIAS_SUBPIXEL: Perform antialiasing by taking
  *  advantage of the order of subpixel elements on devices
- *  such as LCD panels
+ *  such as LCD panels, since 1.0
+ * @CAIRO_ANTIALIAS_FAST: Hint that the backend should perform some
+ * antialiasing but prefer speed over quality, since 1.12
+ * @CAIRO_ANTIALIAS_GOOD: The backend should balance quality against
+ * performance, since 1.12
+ * @CAIRO_ANTIALIAS_BEST: Hint that the backend should render at the highest
+ * quality, sacrificing speed if necessary, since 1.12
  *
  * Specifies the type of antialiasing to do when rendering text or shapes.
  *
@@ -660,6 +692,8 @@ cairo_set_tolerance (cairo_t *cr, double tolerance);
  *
  * The interpretation of @CAIRO_ANTIALIAS_DEFAULT is left entirely up to
  * the backend, typically this will be similar to @CAIRO_ANTIALIAS_GOOD.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_antialias {
     CAIRO_ANTIALIAS_DEFAULT,
@@ -684,11 +718,11 @@ cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias);
  * left-to-right, counts +1. If the path crosses the ray
  * from right to left, counts -1. (Left and right are determined
  * from the perspective of looking along the ray from the starting
- * point.) If the total count is non-zero, the point will be filled.
+ * point.) If the total count is non-zero, the point will be filled. (Since 1.0)
  * @CAIRO_FILL_RULE_EVEN_ODD: Counts the total number of
  * intersections, without regard to the orientation of the contour. If
  * the total number of intersections is odd, the point will be
- * filled.
+ * filled. (Since 1.0)
  *
  * #cairo_fill_rule_t is used to select how paths are filled. For both
  * fill rules, whether or not a point is included in the fill is
@@ -702,6 +736,8 @@ cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias);
  * The default fill rule is %CAIRO_FILL_RULE_WINDING.
  *
  * New entries may be added in future versions.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_fill_rule {
     CAIRO_FILL_RULE_WINDING,
@@ -716,13 +752,15 @@ cairo_set_line_width (cairo_t *cr, double width);
 
 /**
  * cairo_line_cap_t:
- * @CAIRO_LINE_CAP_BUTT: start(stop) the line exactly at the start(end) point
- * @CAIRO_LINE_CAP_ROUND: use a round ending, the center of the circle is the end point
- * @CAIRO_LINE_CAP_SQUARE: use squared ending, the center of the square is the end point
+ * @CAIRO_LINE_CAP_BUTT: start(stop) the line exactly at the start(end) point (Since 1.0)
+ * @CAIRO_LINE_CAP_ROUND: use a round ending, the center of the circle is the end point (Since 1.0)
+ * @CAIRO_LINE_CAP_SQUARE: use squared ending, the center of the square is the end point (Since 1.0)
  *
  * Specifies how to render the endpoints of the path when stroking.
  *
  * The default line cap style is %CAIRO_LINE_CAP_BUTT.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_line_cap {
     CAIRO_LINE_CAP_BUTT,
@@ -736,15 +774,17 @@ cairo_set_line_cap (cairo_t *cr, cairo_line_cap_t line_cap);
 /**
  * cairo_line_join_t:
  * @CAIRO_LINE_JOIN_MITER: use a sharp (angled) corner, see
- * cairo_set_miter_limit()
+ * cairo_set_miter_limit() (Since 1.0)
  * @CAIRO_LINE_JOIN_ROUND: use a rounded join, the center of the circle is the
- * joint point
+ * joint point (Since 1.0)
  * @CAIRO_LINE_JOIN_BEVEL: use a cut-off join, the join is cut off at half
- * the line width from the joint point
+ * the line width from the joint point (Since 1.0)
  *
  * Specifies how to render the junction of two lines when stroking.
  *
  * The default line join style is %CAIRO_LINE_JOIN_MITER.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_line_join {
     CAIRO_LINE_JOIN_MITER,
@@ -957,7 +997,7 @@ typedef struct _cairo_rectangle {
  * @status: Error status of the rectangle list
  * @rectangles: Array containing the rectangles
  * @num_rectangles: Number of rectangles in this list
- *
+ * 
  * A data structure for holding a dynamically allocated
  * array of rectangles.
  *
@@ -991,6 +1031,8 @@ cairo_rectangle_list_destroy (cairo_rectangle_list_t *rectangle_list);
  *
  * Memory management of #cairo_scaled_font_t is done with
  * cairo_scaled_font_reference() and cairo_scaled_font_destroy().
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo_scaled_font cairo_scaled_font_t;
 
@@ -1010,6 +1052,8 @@ typedef struct _cairo_scaled_font cairo_scaled_font_t;
  *
  * Memory management of #cairo_font_face_t is done with
  * cairo_font_face_reference() and cairo_font_face_destroy().
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo_font_face cairo_font_face_t;
 
@@ -1036,6 +1080,8 @@ typedef struct _cairo_font_face cairo_font_face_t;
  * Note that the offsets given by @x and @y are not cumulative. When
  * drawing or measuring text, each glyph is individually positioned
  * with respect to the overall origin
+ *
+ * Since: 1.0
  **/
 typedef struct {
     unsigned long        index;
@@ -1083,7 +1129,7 @@ cairo_text_cluster_free (cairo_text_cluster_t *clusters);
 /**
  * cairo_text_cluster_flags_t:
  * @CAIRO_TEXT_CLUSTER_FLAG_BACKWARD: The clusters in the cluster array
- * map to glyphs in the glyph array from end to start.
+ * map to glyphs in the glyph array from end to start. (Since 1.8)
  *
  * Specifies properties of a text cluster mapping.
  *
@@ -1119,6 +1165,8 @@ typedef enum _cairo_text_cluster_flags {
  * doubled. They will change slightly due to hinting (so you can't
  * assume that metrics are independent of the transformation matrix),
  * but otherwise will remain unchanged.
+ *
+ * Since: 1.0
  **/
 typedef struct {
     double x_bearing;
@@ -1169,6 +1217,8 @@ typedef struct {
  * not be doubled. They will change slightly due to hinting (so you
  * can't assume that metrics are independent of the transformation
  * matrix), but otherwise will remain unchanged.
+ *
+ * Since: 1.0
  **/
 typedef struct {
     double ascent;
@@ -1180,11 +1230,13 @@ typedef struct {
 
 /**
  * cairo_font_slant_t:
- * @CAIRO_FONT_SLANT_NORMAL: Upright font style
- * @CAIRO_FONT_SLANT_ITALIC: Italic font style
- * @CAIRO_FONT_SLANT_OBLIQUE: Oblique font style
+ * @CAIRO_FONT_SLANT_NORMAL: Upright font style, since 1.0
+ * @CAIRO_FONT_SLANT_ITALIC: Italic font style, since 1.0
+ * @CAIRO_FONT_SLANT_OBLIQUE: Oblique font style, since 1.0
  *
  * Specifies variants of a font face based on their slant.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_font_slant {
     CAIRO_FONT_SLANT_NORMAL,
@@ -1194,10 +1246,12 @@ typedef enum _cairo_font_slant {
 
 /**
  * cairo_font_weight_t:
- * @CAIRO_FONT_WEIGHT_NORMAL: Normal font weight
- * @CAIRO_FONT_WEIGHT_BOLD: Bold font weight
+ * @CAIRO_FONT_WEIGHT_NORMAL: Normal font weight, since 1.0
+ * @CAIRO_FONT_WEIGHT_BOLD: Bold font weight, since 1.0
  *
  * Specifies variants of a font face based on their weight.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_font_weight {
     CAIRO_FONT_WEIGHT_NORMAL,
@@ -1207,19 +1261,21 @@ typedef enum _cairo_font_weight {
 /**
  * cairo_subpixel_order_t:
  * @CAIRO_SUBPIXEL_ORDER_DEFAULT: Use the default subpixel order for
- *   for the target device
+ *   for the target device, since 1.0
  * @CAIRO_SUBPIXEL_ORDER_RGB: Subpixel elements are arranged horizontally
- *   with red at the left
+ *   with red at the left, since 1.0
  * @CAIRO_SUBPIXEL_ORDER_BGR:  Subpixel elements are arranged horizontally
- *   with blue at the left
+ *   with blue at the left, since 1.0
  * @CAIRO_SUBPIXEL_ORDER_VRGB: Subpixel elements are arranged vertically
- *   with red at the top
+ *   with red at the top, since 1.0
  * @CAIRO_SUBPIXEL_ORDER_VBGR: Subpixel elements are arranged vertically
- *   with blue at the top
+ *   with blue at the top, since 1.0
  *
  * The subpixel order specifies the order of color elements within
  * each pixel on the display device when rendering with an
  * antialiasing mode of %CAIRO_ANTIALIAS_SUBPIXEL.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_subpixel_order {
     CAIRO_SUBPIXEL_ORDER_DEFAULT,
@@ -1232,15 +1288,15 @@ typedef enum _cairo_subpixel_order {
 /**
  * cairo_hint_style_t:
  * @CAIRO_HINT_STYLE_DEFAULT: Use the default hint style for
- *   font backend and target device
- * @CAIRO_HINT_STYLE_NONE: Do not hint outlines
+ *   font backend and target device, since 1.0
+ * @CAIRO_HINT_STYLE_NONE: Do not hint outlines, since 1.0
  * @CAIRO_HINT_STYLE_SLIGHT: Hint outlines slightly to improve
  *   contrast while retaining good fidelity to the original
- *   shapes.
+ *   shapes, since 1.0
  * @CAIRO_HINT_STYLE_MEDIUM: Hint outlines with medium strength
  *   giving a compromise between fidelity to the original shapes
- *   and contrast
- * @CAIRO_HINT_STYLE_FULL: Hint outlines to maximize contrast
+ *   and contrast, since 1.0
+ * @CAIRO_HINT_STYLE_FULL: Hint outlines to maximize contrast, since 1.0
  *
  * Specifies the type of hinting to do on font outlines. Hinting
  * is the process of fitting outlines to the pixel grid in order
@@ -1250,6 +1306,8 @@ typedef enum _cairo_subpixel_order {
  * styles are supported by all font backends.
  *
  * New entries may be added in future versions.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_hint_style {
     CAIRO_HINT_STYLE_DEFAULT,
@@ -1262,15 +1320,17 @@ typedef enum _cairo_hint_style {
 /**
  * cairo_hint_metrics_t:
  * @CAIRO_HINT_METRICS_DEFAULT: Hint metrics in the default
- *  manner for the font backend and target device
- * @CAIRO_HINT_METRICS_OFF: Do not hint font metrics
- * @CAIRO_HINT_METRICS_ON: Hint font metrics
+ *  manner for the font backend and target device, since 1.0
+ * @CAIRO_HINT_METRICS_OFF: Do not hint font metrics, since 1.0
+ * @CAIRO_HINT_METRICS_ON: Hint font metrics, since 1.0
  *
  * Specifies whether to hint font metrics; hinting font metrics
  * means quantizing them so that they are integer values in
  * device space. Doing this improves the consistency of
  * letter and line spacing, however it also means that text
  * will be laid out differently at different zoom factors.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_hint_metrics {
     CAIRO_HINT_METRICS_DEFAULT,
@@ -1297,6 +1357,8 @@ typedef enum _cairo_hint_metrics {
  * cairo_font_options_hash() should be used to copy, check
  * for equality, merge, or compute a hash value of
  * #cairo_font_options_t objects.
+ *
+ * Since: 1.0
  **/
 typedef struct _cairo_font_options cairo_font_options_t;
 
@@ -1441,10 +1503,11 @@ cairo_font_face_status (cairo_font_face_t *font_face);
 
 /**
  * cairo_font_type_t:
- * @CAIRO_FONT_TYPE_TOY: The font was created using cairo's toy font api
- * @CAIRO_FONT_TYPE_FT: The font is of type FreeType
- * @CAIRO_FONT_TYPE_WIN32: The font is of type Win32
- * @CAIRO_FONT_TYPE_QUARTZ: The font is of type Quartz (Since: 1.6)
+ * @CAIRO_FONT_TYPE_TOY: The font was created using cairo's toy font api (Since: 1.2)
+ * @CAIRO_FONT_TYPE_FT: The font is of type FreeType (Since: 1.2)
+ * @CAIRO_FONT_TYPE_WIN32: The font is of type Win32 (Since: 1.2)
+ * @CAIRO_FONT_TYPE_QUARTZ: The font is of type Quartz (Since: 1.6, in 1.2 and
+ * 1.4 it was named CAIRO_FONT_TYPE_ATSUI)
  * @CAIRO_FONT_TYPE_USER: The font was create using cairo's user font api (Since: 1.8)
  *
  * #cairo_font_type_t is used to describe the type of a given font
@@ -1887,14 +1950,16 @@ cairo_get_group_target (cairo_t *cr);
 
 /**
  * cairo_path_data_type_t:
- * @CAIRO_PATH_MOVE_TO: A move-to operation
- * @CAIRO_PATH_LINE_TO: A line-to operation
- * @CAIRO_PATH_CURVE_TO: A curve-to operation
- * @CAIRO_PATH_CLOSE_PATH: A close-path operation
+ * @CAIRO_PATH_MOVE_TO: A move-to operation, since 1.0
+ * @CAIRO_PATH_LINE_TO: A line-to operation, since 1.0
+ * @CAIRO_PATH_CURVE_TO: A curve-to operation, since 1.0
+ * @CAIRO_PATH_CLOSE_PATH: A close-path operation, since 1.0
  *
  * #cairo_path_data_t is used to describe the type of one portion
  * of a path when represented as a #cairo_path_t.
  * See #cairo_path_data_t for details.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_path_data_type {
     CAIRO_PATH_MOVE_TO,
@@ -1968,6 +2033,8 @@ typedef enum _cairo_path_data_type {
  * always use <literal>data->header.length</literal> to
  * iterate over the path data, instead of hardcoding the number of
  * elements for each element type.
+ *
+ * Since: 1.0
  **/
 typedef union _cairo_path_data_t cairo_path_data_t;
 union _cairo_path_data_t {
@@ -1998,6 +2065,8 @@ union _cairo_path_data_t {
  * array. This number is larger than the number of independent path
  * portions (defined in #cairo_path_data_type_t), since the data
  * includes both headers and coordinates for each portion.
+ *
+ * Since: 1.0
  **/
 typedef struct cairo_path {
     cairo_status_t status;
@@ -2033,14 +2102,15 @@ cairo_device_reference (cairo_device_t *device);
 
 /**
  * cairo_device_type_t:
- * @CAIRO_DEVICE_TYPE_INVALID: The device is not valid
- * @CAIRO_DEVICE_TYPE_DRM: The device is of type Direct Render Manager
- * @CAIRO_DEVICE_TYPE_GL: The device is of type OpenGL
- * @CAIRO_DEVICE_TYPE_SCRIPT: The device is of type script
- * @CAIRO_DEVICE_TYPE_XCB: The device is of type xcb
- * @CAIRO_DEVICE_TYPE_XLIB: The device is of type xlib
- * @CAIRO_DEVICE_TYPE_XML: The device is of type XML
- * @CAIRO_DEVICE_TYPE_INVALID: The device is invalid
+ * @CAIRO_DEVICE_TYPE_DRM: The device is of type Direct Render Manager, since 1.10
+ * @CAIRO_DEVICE_TYPE_GL: The device is of type OpenGL, since 1.10
+ * @CAIRO_DEVICE_TYPE_SCRIPT: The device is of type script, since 1.10
+ * @CAIRO_DEVICE_TYPE_XCB: The device is of type xcb, since 1.10
+ * @CAIRO_DEVICE_TYPE_XLIB: The device is of type xlib, since 1.10
+ * @CAIRO_DEVICE_TYPE_XML: The device is of type XML, since 1.10
+ * @CAIRO_DEVICE_TYPE_COGL: The device is of type cogl, since 1.12
+ * @CAIRO_DEVICE_TYPE_WIN32: The device is of type win32, since 1.12
+ * @CAIRO_DEVICE_TYPE_INVALID: The device is invalid, since 1.10
  *
  * #cairo_device_type_t is used to describe the type of a given
  * device. The devices types are also known as "backends" within cairo.
@@ -2068,6 +2138,8 @@ typedef enum _cairo_device_type {
     CAIRO_DEVICE_TYPE_XCB,
     CAIRO_DEVICE_TYPE_XLIB,
     CAIRO_DEVICE_TYPE_XML,
+    CAIRO_DEVICE_TYPE_COGL,
+    CAIRO_DEVICE_TYPE_WIN32,
 
     CAIRO_DEVICE_TYPE_INVALID = -1
 } cairo_device_type_t;
@@ -2138,7 +2210,7 @@ cairo_surface_create_for_rectangle (cairo_surface_t       *target,
 
 typedef enum {
        CAIRO_SURFACE_OBSERVER_NORMAL = 0,
-       CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS = 0x1,
+       CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS = 0x1
 } cairo_surface_observer_mode_t;
 
 cairo_public cairo_surface_t *
@@ -2184,14 +2256,14 @@ cairo_surface_observer_add_finish_callback (cairo_surface_t *abstract_surface,
                                            cairo_surface_observer_callback_t func,
                                            void *data);
 
-cairo_public void
+cairo_public cairo_status_t
 cairo_surface_observer_print (cairo_surface_t *surface,
                              cairo_write_func_t write_func,
                              void *closure);
 cairo_public double
 cairo_surface_observer_elapsed (cairo_surface_t *surface);
 
-cairo_public void
+cairo_public cairo_status_t
 cairo_device_observer_print (cairo_device_t *device,
                             cairo_write_func_t write_func,
                             void *closure);
@@ -2234,20 +2306,20 @@ cairo_surface_status (cairo_surface_t *surface);
 
 /**
  * cairo_surface_type_t:
- * @CAIRO_SURFACE_TYPE_IMAGE: The surface is of type image
- * @CAIRO_SURFACE_TYPE_PDF: The surface is of type pdf
- * @CAIRO_SURFACE_TYPE_PS: The surface is of type ps
- * @CAIRO_SURFACE_TYPE_XLIB: The surface is of type xlib
- * @CAIRO_SURFACE_TYPE_XCB: The surface is of type xcb
- * @CAIRO_SURFACE_TYPE_GLITZ: The surface is of type glitz
- * @CAIRO_SURFACE_TYPE_QUARTZ: The surface is of type quartz
- * @CAIRO_SURFACE_TYPE_WIN32: The surface is of type win32
- * @CAIRO_SURFACE_TYPE_BEOS: The surface is of type beos
- * @CAIRO_SURFACE_TYPE_DIRECTFB: The surface is of type directfb
- * @CAIRO_SURFACE_TYPE_SVG: The surface is of type svg
- * @CAIRO_SURFACE_TYPE_OS2: The surface is of type os2
- * @CAIRO_SURFACE_TYPE_WIN32_PRINTING: The surface is a win32 printing surface
- * @CAIRO_SURFACE_TYPE_QUARTZ_IMAGE: The surface is of type quartz_image
+ * @CAIRO_SURFACE_TYPE_IMAGE: The surface is of type image, since 1.2
+ * @CAIRO_SURFACE_TYPE_PDF: The surface is of type pdf, since 1.2
+ * @CAIRO_SURFACE_TYPE_PS: The surface is of type ps, since 1.2
+ * @CAIRO_SURFACE_TYPE_XLIB: The surface is of type xlib, since 1.2
+ * @CAIRO_SURFACE_TYPE_XCB: The surface is of type xcb, since 1.2
+ * @CAIRO_SURFACE_TYPE_GLITZ: The surface is of type glitz, since 1.2
+ * @CAIRO_SURFACE_TYPE_QUARTZ: The surface is of type quartz, since 1.2
+ * @CAIRO_SURFACE_TYPE_WIN32: The surface is of type win32, since 1.2
+ * @CAIRO_SURFACE_TYPE_BEOS: The surface is of type beos, since 1.2
+ * @CAIRO_SURFACE_TYPE_DIRECTFB: The surface is of type directfb, since 1.2
+ * @CAIRO_SURFACE_TYPE_SVG: The surface is of type svg, since 1.2
+ * @CAIRO_SURFACE_TYPE_OS2: The surface is of type os2, since 1.4
+ * @CAIRO_SURFACE_TYPE_WIN32_PRINTING: The surface is a win32 printing surface, since 1.6
+ * @CAIRO_SURFACE_TYPE_QUARTZ_IMAGE: The surface is of type quartz_image, since 1.6
  * @CAIRO_SURFACE_TYPE_SCRIPT: The surface is of type script, since 1.10
  * @CAIRO_SURFACE_TYPE_QT: The surface is of type Qt, since 1.10
  * @CAIRO_SURFACE_TYPE_RECORDING: The surface is of type recording, since 1.10
@@ -2259,7 +2331,7 @@ cairo_surface_status (cairo_surface_t *surface);
  * @CAIRO_SURFACE_TYPE_SKIA: The surface is of type Skia, since 1.10
  * @CAIRO_SURFACE_TYPE_SUBSURFACE: The surface is a subsurface created with
  *   cairo_surface_create_for_rectangle(), since 1.10
- * @CAIRO_SURFACE_TYPE_MIME: The surface is a callback (mime) surface, since 1.12
+ * @CAIRO_SURFACE_TYPE_COGL: This surface is of type Cogl, since 1.12
  *
  * #cairo_surface_type_t is used to describe the type of a given
  * surface. The surface types are also known as "backends" or "surface
@@ -2310,7 +2382,7 @@ typedef enum _cairo_surface_type {
     CAIRO_SURFACE_TYPE_XML,
     CAIRO_SURFACE_TYPE_SKIA,
     CAIRO_SURFACE_TYPE_SUBSURFACE,
-    CAIRO_SURFACE_TYPE_MIME
+    CAIRO_SURFACE_TYPE_COGL
 } cairo_surface_type_t;
 
 cairo_public cairo_surface_type_t
@@ -2362,6 +2434,10 @@ cairo_surface_set_mime_data (cairo_surface_t             *surface,
                             cairo_destroy_func_t        destroy,
                             void                       *closure);
 
+cairo_public cairo_bool_t
+cairo_surface_supports_mime_type (cairo_surface_t              *surface,
+                                 const char                    *mime_type);
+
 cairo_public void
 cairo_surface_get_font_options (cairo_surface_t      *surface,
                                cairo_font_options_t *options);
@@ -2469,55 +2545,150 @@ cairo_public cairo_bool_t
 cairo_recording_surface_get_extents (cairo_surface_t *surface,
                                     cairo_rectangle_t *extents);
 
-/* Mime-surface (callback) functions */
+/* raster-source pattern (callback) functions */
 
-typedef cairo_surface_t *(*cairo_mime_surface_acquire_t) (cairo_surface_t *mime_surface,
-                                                         void *callback_data,
-                                                         cairo_surface_t *target,
-                                                         const cairo_rectangle_int_t *sample_extents,
-                                                         cairo_rectangle_int_t *surface_extents);
+/**
+ * cairo_raster_source_acquire_func_t:
+ * @pattern: the pattern being rendered from
+ * @callback_data: the user data supplied during creation
+ * @target: the rendering target surface
+ * @extents: rectangular region of interest in pixels in sample space
+ *
+ * #cairo_raster_source_acquire_func_t is the type of function which is
+ * called when a pattern is being rendered from. It should create a surface
+ * that provides the pixel data for the region of interest as defined by
+ * extents, though the surface itself does not have to be limited to that
+ * area. For convenience the surface should probably be of image type,
+ * created with cairo_surface_create_similar_image() for the target (which
+ * enables the number of copies to be reduced during transfer to the
+ * device). Another option, might be to return a similar surface to the
+ * target for explicit handling by the application of a set of cached sources
+ * on the device. The region of sample data provided should be defined using
+ * cairo_surface_set_device_offset() to specify the top-left corner of the
+ * sample data (along with width and height of the surface).
+ *
+ * Returns: a #cairo_surface_t
+ *
+ * Since: 1.12
+ **/
+typedef cairo_surface_t *
+(*cairo_raster_source_acquire_func_t) (cairo_pattern_t *pattern,
+                                      void *callback_data,
+                                      cairo_surface_t *target,
+                                      const cairo_rectangle_int_t *extents);
 
-typedef void (*cairo_mime_surface_release_t) (cairo_surface_t *mime_surface,
-                                             void *callback_data,
-                                             cairo_surface_t *image_surface);
+/**
+ * cairo_raster_source_release_func_t:
+ * @pattern: the pattern being rendered from
+ * @callback_data: the user data supplied during creation
+ * @surface: the surface created during acquire
+ *
+ * #cairo_raster_source_release_func_t is the type of function which is
+ * called when the pixel data is no longer being access by the pattern
+ * for the rendering operation. Typically this function will simply
+ * destroy the surface created during acquire.
+ *
+ * Since: 1.12
+ **/
+typedef void
+(*cairo_raster_source_release_func_t) (cairo_pattern_t *pattern,
+                                      void *callback_data,
+                                      cairo_surface_t *surface);
 
-typedef cairo_surface_t *(*cairo_mime_surface_snapshot_t) (cairo_surface_t *mime_surface,
-                                                          void *callback_data);
-typedef void (*cairo_mime_surface_destroy_t) (cairo_surface_t *mime_surface,
-                                             void *callback_data);
+/**
+ * cairo_raster_source_snapshot_func_t:
+ * @pattern: the pattern being rendered from
+ * @callback_data: the user data supplied during creation
+ *
+ * #cairo_raster_source_snapshot_func_t is the type of function which is
+ * called when the pixel data needs to be preserved for later use
+ * during printing. This pattern will be accessed again later, and it
+ * is expected to provide the pixel data that was current at the time
+ * of snapshotting.
+ *
+ * Return value: CAIRO_STATUS_SUCCESS on success, or one of the
+ * #cairo_status_t error codes for failure.
+ *
+ * Since: 1.12
+ **/
+typedef cairo_status_t
+(*cairo_raster_source_snapshot_func_t) (cairo_pattern_t *pattern,
+                                       void *callback_data);
 
-cairo_public cairo_surface_t *
-cairo_mime_surface_create (void *data, cairo_content_t content, int width, int height);
+/**
+ * cairo_raster_source_copy_func_t:
+ * @pattern: the #cairo_pattern_t that was copied to
+ * @callback_data: the user data supplied during creation
+ * @other: the #cairo_pattern_t being used as the source for the copy
+ *
+ * #cairo_raster_source_copy_func_t is the type of function which is
+ * called when the pattern gets copied as a normal part of rendering.
+ *
+ * Return value: CAIRO_STATUS_SUCCESS on success, or one of the
+ * #cairo_status_t error codes for failure.
+ *
+ * Since: 1.12
+ **/
+typedef cairo_status_t
+(*cairo_raster_source_copy_func_t) (cairo_pattern_t *pattern,
+                                   void *callback_data,
+                                   const cairo_pattern_t *other);
+
+/**
+ * cairo_raster_source_finish_func_t:
+ * @pattern: the pattern being rendered from
+ * @callback_data: the user data supplied during creation
+ *
+ * #cairo_raster_source_finish_func_t is the type of function which is
+ * called when the pattern (or a copy thereof) is no longer required.
+ *
+ * Since: 1.12
+ **/
+typedef void
+(*cairo_raster_source_finish_func_t) (cairo_pattern_t *pattern,
+                                     void *callback_data);
+
+cairo_public cairo_pattern_t *
+cairo_pattern_create_raster_source (void *user_data,
+                                   cairo_content_t content,
+                                   int width, int height);
 
 cairo_public void
-cairo_mime_surface_set_callback_data (cairo_surface_t *surface,
-                                     void *data);
+cairo_raster_source_pattern_set_callback_data (cairo_pattern_t *pattern,
+                                              void *data);
 
 cairo_public void *
-cairo_mime_surface_get_callback_data (cairo_surface_t *surface);
+cairo_raster_source_pattern_get_callback_data (cairo_pattern_t *pattern);
 
 cairo_public void
-cairo_mime_surface_set_acquire (cairo_surface_t *surface,
-                               cairo_mime_surface_acquire_t acquire,
-                               cairo_mime_surface_release_t release);
+cairo_raster_source_pattern_set_acquire (cairo_pattern_t *pattern,
+                                        cairo_raster_source_acquire_func_t acquire,
+                                        cairo_raster_source_release_func_t release);
 
 cairo_public void
-cairo_mime_surface_get_acquire (cairo_surface_t *surface,
-                               cairo_mime_surface_acquire_t *acquire,
-                               cairo_mime_surface_release_t *release);
+cairo_raster_source_pattern_get_acquire (cairo_pattern_t *pattern,
+                                        cairo_raster_source_acquire_func_t *acquire,
+                                        cairo_raster_source_release_func_t *release);
 cairo_public void
-cairo_mime_surface_set_snapshot (cairo_surface_t *surface,
-                                cairo_mime_surface_snapshot_t snapshot);
+cairo_raster_source_pattern_set_snapshot (cairo_pattern_t *pattern,
+                                         cairo_raster_source_snapshot_func_t snapshot);
 
-cairo_public cairo_mime_surface_snapshot_t
-cairo_mime_surface_get_snapshot (cairo_surface_t *surface);
+cairo_public cairo_raster_source_snapshot_func_t
+cairo_raster_source_pattern_get_snapshot (cairo_pattern_t *pattern);
 
 cairo_public void
-cairo_mime_surface_set_destroy (cairo_surface_t *surface,
-                               cairo_mime_surface_destroy_t destroy);
+cairo_raster_source_pattern_set_copy (cairo_pattern_t *pattern,
+                                     cairo_raster_source_copy_func_t copy);
 
-cairo_public cairo_mime_surface_destroy_t
-cairo_mime_surface_get_destroy (cairo_surface_t *surface);
+cairo_public cairo_raster_source_copy_func_t
+cairo_raster_source_pattern_get_copy (cairo_pattern_t *pattern);
+
+cairo_public void
+cairo_raster_source_pattern_set_finish (cairo_pattern_t *pattern,
+                                       cairo_raster_source_finish_func_t finish);
+
+cairo_public cairo_raster_source_finish_func_t
+cairo_raster_source_pattern_get_finish (cairo_pattern_t *pattern);
 
 /* Pattern creation functions */
 
@@ -2567,11 +2738,12 @@ cairo_pattern_set_user_data (cairo_pattern_t             *pattern,
 /**
  * cairo_pattern_type_t:
  * @CAIRO_PATTERN_TYPE_SOLID: The pattern is a solid (uniform)
- * color. It may be opaque or translucent.
- * @CAIRO_PATTERN_TYPE_SURFACE: The pattern is a based on a surface (an image).
- * @CAIRO_PATTERN_TYPE_LINEAR: The pattern is a linear gradient.
- * @CAIRO_PATTERN_TYPE_RADIAL: The pattern is a radial gradient.
- * @CAIRO_PATTERN_TYPE_MESH: The pattern is a mesh.
+ * color. It may be opaque or translucent, since 1.2.
+ * @CAIRO_PATTERN_TYPE_SURFACE: The pattern is a based on a surface (an image), since 1.2.
+ * @CAIRO_PATTERN_TYPE_LINEAR: The pattern is a linear gradient, since 1.2.
+ * @CAIRO_PATTERN_TYPE_RADIAL: The pattern is a radial gradient, since 1.2.
+ * @CAIRO_PATTERN_TYPE_MESH: The pattern is a mesh, since 1.12.
+ * @CAIRO_PATTERN_TYPE_RASTER_SOURCE: The pattern is a user pattern providing raster data, since 1.12.
  *
  * #cairo_pattern_type_t is used to describe the type of a given pattern.
  *
@@ -2600,7 +2772,8 @@ typedef enum _cairo_pattern_type {
     CAIRO_PATTERN_TYPE_SURFACE,
     CAIRO_PATTERN_TYPE_LINEAR,
     CAIRO_PATTERN_TYPE_RADIAL,
-    CAIRO_PATTERN_TYPE_MESH
+    CAIRO_PATTERN_TYPE_MESH,
+    CAIRO_PATTERN_TYPE_RASTER_SOURCE
 } cairo_pattern_type_t;
 
 cairo_public cairo_pattern_type_t
@@ -2664,10 +2837,10 @@ cairo_pattern_get_matrix (cairo_pattern_t *pattern,
 /**
  * cairo_extend_t:
  * @CAIRO_EXTEND_NONE: pixels outside of the source pattern
- *   are fully transparent
- * @CAIRO_EXTEND_REPEAT: the pattern is tiled by repeating
+ *   are fully transparent (Since 1.0)
+ * @CAIRO_EXTEND_REPEAT: the pattern is tiled by repeating (Since 1.0)
  * @CAIRO_EXTEND_REFLECT: the pattern is tiled by reflecting
- *   at the edges (Implemented for surface patterns since 1.6)
+ *   at the edges (Since 1.0; but only implemented for surface patterns since 1.6)
  * @CAIRO_EXTEND_PAD: pixels outside of the pattern copy
  *   the closest pixel from the source (Since 1.2; but only
  *   implemented for surface patterns since 1.6)
@@ -2683,6 +2856,8 @@ cairo_pattern_get_matrix (cairo_pattern_t *pattern,
  * and %CAIRO_EXTEND_PAD for gradient patterns.
  *
  * New entries may be added in future versions.
+ *
+ * Since: 1.0
  **/
 typedef enum _cairo_extend {
     CAIRO_EXTEND_NONE,
@@ -2700,21 +2875,23 @@ cairo_pattern_get_extend (cairo_pattern_t *pattern);
 /**
  * cairo_filter_t:
  * @CAIRO_FILTER_FAST: A high-performance filter, with quality similar
- *     to %CAIRO_FILTER_NEAREST
+ *     to %CAIRO_FILTER_NEAREST (Since 1.0)
  * @CAIRO_FILTER_GOOD: A reasonable-performance filter, with quality
- *     similar to %CAIRO_FILTER_BILINEAR
+ *     similar to %CAIRO_FILTER_BILINEAR (Since 1.0)
  * @CAIRO_FILTER_BEST: The highest-quality available, performance may
- *     not be suitable for interactive use.
- * @CAIRO_FILTER_NEAREST: Nearest-neighbor filtering
- * @CAIRO_FILTER_BILINEAR: Linear interpolation in two dimensions
+ *     not be suitable for interactive use. (Since 1.0)
+ * @CAIRO_FILTER_NEAREST: Nearest-neighbor filtering (Since 1.0)
+ * @CAIRO_FILTER_BILINEAR: Linear interpolation in two dimensions (Since 1.0)
  * @CAIRO_FILTER_GAUSSIAN: This filter value is currently
- *     unimplemented, and should not be used in current code.
+ *     unimplemented, and should not be used in current code. (Since 1.0)
  *
  * #cairo_filter_t is used to indicate what filtering should be
  * applied when reading pixel values from patterns. See
  * cairo_pattern_set_filter() for indicating the desired filter to be
  * used with a particular pattern.
- */
+ *
+ * Since: 1.0
+ **/
 typedef enum _cairo_filter {
     CAIRO_FILTER_FAST,
     CAIRO_FILTER_GOOD,
@@ -2934,13 +3111,6 @@ cairo_region_xor_rectangle (cairo_region_t *dst,
 cairo_public void
 cairo_debug_reset_static_data (void);
 
-/* TIZEN code modification */
-#ifndef TIZEN_ENABLE_FEATURE
-#define TIZEN_ENABLE_FEATURE
-#endif
-
-#ifdef TIZEN_ENABLE_FEATURE
-#endif /* TIZEN_ENABLE_FEATURE */
 
 CAIRO_END_DECLS
 
index 7121d09..e23f575 100644 (file)
 #include "cairo-compiler-private.h"
 #include "cairo-error-private.h"
 
-#if CAIRO_HAS_PS_SURFACE || CAIRO_HAS_SCRIPT_SURFACE || CAIRO_HAS_XML_SURFACE
+#if CAIRO_HAS_PDF_SURFACE    || \
+    CAIRO_HAS_PS_SURFACE     || \
+    CAIRO_HAS_SCRIPT_SURFACE || \
+    CAIRO_HAS_XML_SURFACE
 #define CAIRO_HAS_DEFLATE_STREAM 1
 #endif
 
@@ -84,7 +87,9 @@
 #define CAIRO_HAS_FONT_SUBSET 1
 #endif
 
-#if CAIRO_HAS_PS_SURFACE || CAIRO_HAS_PDF_SURFACE || CAIRO_HAS_FONT_SUBSET
+#if CAIRO_HAS_PS_SURFACE  || \
+    CAIRO_HAS_PDF_SURFACE || \
+    CAIRO_HAS_FONT_SUBSET
 #define CAIRO_HAS_PDF_OPERATORS 1
 #endif
 
@@ -310,6 +315,16 @@ _cairo_rectangle_intersects (const cairo_rectangle_int_t *dst,
             src->y + (int) src->height <= dst->y);
 }
 
+static inline cairo_bool_t
+_cairo_rectangle_contains_rectangle (const cairo_rectangle_int_t *a,
+                                    const cairo_rectangle_int_t *b)
+{
+    return (a->x <= b->x &&
+           a->x + (int) a->width >= b->x + (int) b->width &&
+           a->y <= b->y &&
+           a->y + (int) a->height >= b->y + (int) b->height);
+}
+
 cairo_private void
 _cairo_rectangle_int_from_double (cairo_rectangle_int_t *recti,
                                  const cairo_rectangle_t *rectf);
@@ -401,6 +416,11 @@ _cairo_ft_font_reset_static_data (void);
 cairo_private void
 _cairo_win32_font_reset_static_data (void);
 
+#if CAIRO_HAS_COGL_SURFACE
+void
+_cairo_cogl_context_reset_static_data (void);
+#endif
+
 /* the font backend interface */
 
 struct _cairo_unscaled_font_backend {
@@ -1026,6 +1046,12 @@ _cairo_path_fixed_fill_to_traps (const cairo_path_fixed_t   *path,
                                 double                      tolerance,
                                 cairo_traps_t              *traps);
 
+cairo_private cairo_status_t
+_cairo_path_fixed_fill_rectilinear_to_traps (const cairo_path_fixed_t *path,
+                                            cairo_fill_rule_t        fill_rule,
+                                            cairo_antialias_t        antialias,
+                                            cairo_traps_t                *traps);
+
 /* cairo-path-stroke.c */
 cairo_private cairo_status_t
 _cairo_path_fixed_stroke_to_polygon (const cairo_path_fixed_t  *path,
@@ -1369,6 +1395,9 @@ _cairo_surface_has_snapshot (cairo_surface_t *surface,
 cairo_private void
 _cairo_surface_detach_snapshot (cairo_surface_t *snapshot);
 
+cairo_private void
+_cairo_surface_begin_modification (cairo_surface_t *surface);
+
 cairo_private_no_warn cairo_bool_t
 _cairo_surface_get_extents (cairo_surface_t         *surface,
                            cairo_rectangle_int_t   *extents);
@@ -1639,11 +1668,26 @@ cairo_private cairo_status_t
 _cairo_matrix_compute_basis_scale_factors (const cairo_matrix_t *matrix,
                                           double *sx, double *sy, int x_major);
 
-cairo_private cairo_bool_t
-_cairo_matrix_is_identity (const cairo_matrix_t *matrix) cairo_pure;
+static inline cairo_bool_t
+_cairo_matrix_is_identity (const cairo_matrix_t *matrix)
+{
+    return (matrix->xx == 1.0 && matrix->yx == 0.0 &&
+           matrix->xy == 0.0 && matrix->yy == 1.0 &&
+           matrix->x0 == 0.0 && matrix->y0 == 0.0);
+}
 
-cairo_private cairo_bool_t
-_cairo_matrix_is_translation (const cairo_matrix_t *matrix) cairo_pure;
+static inline cairo_bool_t
+_cairo_matrix_is_translation (const cairo_matrix_t *matrix)
+{
+    return (matrix->xx == 1.0 && matrix->yx == 0.0 &&
+           matrix->xy == 0.0 && matrix->yy == 1.0);
+}
+
+static inline cairo_bool_t
+_cairo_matrix_is_scale (const cairo_matrix_t *matrix)
+{
+    return matrix->yx == 0.0 && matrix->xy == 0.0;
+}
 
 cairo_private cairo_bool_t
 _cairo_matrix_is_integer_translation(const cairo_matrix_t *matrix,
@@ -1753,6 +1797,11 @@ _cairo_utf8_to_utf16 (const char *str,
                      int        *items_written);
 #endif
 
+cairo_private void
+_cairo_matrix_multiply (cairo_matrix_t *r,
+                       const cairo_matrix_t *a,
+                       const cairo_matrix_t *b);
+
 /* cairo-observer.c */
 
 cairo_private void
@@ -1880,6 +1929,7 @@ slim_hidden_proto (cairo_surface_set_fallback_resolution);
 slim_hidden_proto (cairo_surface_set_mime_data);
 slim_hidden_proto (cairo_surface_show_page);
 slim_hidden_proto (cairo_surface_status);
+slim_hidden_proto (cairo_surface_supports_mime_type);
 slim_hidden_proto (cairo_surface_unmap_image);
 slim_hidden_proto (cairo_text_cluster_allocate);
 slim_hidden_proto (cairo_text_cluster_free);
@@ -1960,6 +2010,17 @@ cairo_private void
 _cairo_debug_print_polygon (FILE *stream, cairo_polygon_t *polygon);
 
 cairo_private void
+_cairo_debug_print_traps (FILE *file, const cairo_traps_t *traps);
+
+cairo_private void
 _cairo_debug_print_clip (FILE *stream, const cairo_clip_t *clip);
 
+#if 0
+#define TRACE(x) fprintf x
+#define TRACE_(x) x
+#else
+#define TRACE(x)
+#define TRACE_(x)
+#endif
+
 #endif
diff --git a/src/check-doc-syntax.awk b/src/check-doc-syntax.awk
new file mode 100755 (executable)
index 0000000..5fdabda
--- /dev/null
@@ -0,0 +1,108 @@
+#!/usr/bin/awk -f
+
+BEGIN {
+    name_found = 1
+    SECTION_DOC = 0
+    PUBLIC_DOC = 1
+    PRIVATE_DOC = 2
+}
+
+function log_msg(severity, msg)
+{
+    printf "%s (%d): %s: %s %s\n", FILENAME, FNR, severity, doc_name, msg
+}
+
+function log_error(msg)
+{
+    log_msg("ERROR", msg)
+}
+
+function log_warning(msg)
+{
+    log_msg("WARNING", msg)
+}
+
+/^\/\*\*$/ {
+    in_doc = 1
+    doc_line = 0
+}
+
+/^(\/\*\*$| \*[ \t]| \*$| \*\*\/$)/ {
+    valid_doc = 1
+}
+
+in_doc {
+    if (!valid_doc)
+       log_error("bad line: '" $0 "'")
+    valid_doc = 0
+
+    doc_line++
+    if (doc_line == 2) {
+       # new doc name. Did we find the previous one?
+       # (macros are not expected to be found in the same place as
+       # their documentation)
+       if (!name_found && doc_name !~ /CAIRO_/)
+           log_warning("not found")
+       doc_name = $2
+       if (doc_name ~ /^SECTION:.*$/) {
+           doc_type = SECTION_DOC
+           name_found = 1
+       } else if (tolower(doc_name) ~ /^cairo_[a-z0-9_]*:$/) {
+           doc_type = PUBLIC_DOC
+           name_found = 0
+           real_name = substr(doc_name, 1, length(doc_name) - 1)
+       } else if (tolower(doc_name) ~ /^_[a-z0-9_]*:$/) {
+           doc_type = PRIVATE_DOC
+           name_found = 0
+           real_name = substr(doc_name, 1, length(doc_name) - 1)
+       } else {
+           log_error("invalid doc id (should be 'cairo_...:')")
+           name_found = 1
+       }
+    }
+}
+
+!in_doc {
+    regex = "(^|[ \\t\\*])" real_name "([ ;()]|$)"
+    if ($0 ~ regex)
+       name_found = 1
+}
+
+/^ \* Since: ([0-9]*.[0-9]*|TBD)$/ {
+    if (doc_has_since != 0) {
+       log_error("Duplicate 'Since' field")
+    }
+    doc_has_since = doc_line
+}
+
+/^ \*\*\// {
+    if (doc_type == PUBLIC_DOC) {
+       if (!doc_has_since) {
+           # private types can start with cairo_
+           if (doc_name ~ /^cairo_.*_t:$/)
+               log_warning("missing 'Since' field (is it a private type?)")
+           else
+               log_error("missing 'Since' field")
+       } else if (doc_has_since != doc_line - 1)
+           log_warning("misplaced 'Since' field (should be right before the end of the comment)")
+    } else {
+       if (doc_has_since)
+           log_warning("'Since' field in non-public element")
+    }
+
+    in_doc = 0
+    doc_has_since = 0
+    doc_type = 0
+}
+
+/\*\// {
+    if (in_doc) {
+       in_doc = 0
+       log_error("documentation comment not closed with **/")
+    }
+}
+
+END {
+    if (!name_found)
+       log_warning("not found")
+}
index 8390e5e..c74fb87 100755 (executable)
@@ -70,4 +70,13 @@ if echo $FILES | xargs grep "$note_regexp" /dev/null; then
        echo Be civil and replace it by 'Note' please.
 fi >&2
 
+# Only run the syntax checker on the source files (not doc/)
+if test -e ./check-doc-syntax.awk; then
+    if echo $FILES | xargs ./check-doc-syntax.awk ; then
+           :
+    else
+           stat=1
+    fi >&2
+fi
+
 exit $stat
index b489753..aa3f45e 100644 (file)
@@ -468,6 +468,7 @@ static const cairo_surface_backend_t gallium_surface_backend = {
     gallium_surface_create_similar,
     gallium_surface_finish,
 
+    NULL,
     gallium_surface_acquire_source_image,
     gallium_surface_release_source_image,
 
index 1581cab..8b2e422 100644 (file)
@@ -343,7 +343,7 @@ enum i915_fs_channel {
     (z##_CHANNEL_VAL << Z_CHANNEL_SHIFT) | \
     (w##_CHANNEL_VAL << W_CHANNEL_SHIFT)
 
-/**
+/*
  * Construct an operand description for using a register with no swizzling
  */
 #define i915_fs_operand_reg(reg)                                       \
@@ -352,17 +352,17 @@ enum i915_fs_channel {
 #define i915_fs_operand_reg_negate(reg)                                        \
     i915_fs_operand(reg, NEG_X, NEG_Y, NEG_Z, NEG_W)
 
-/**
+/*
  * Returns an operand containing (0.0, 0.0, 0.0, 0.0).
  */
 #define i915_fs_operand_zero() i915_fs_operand(FS_R0, ZERO, ZERO, ZERO, ZERO)
 
-/**
+/*
  * Returns an unused operand
  */
 #define i915_fs_operand_none() i915_fs_operand_zero()
 
-/**
+/*
  * Returns an operand containing (1.0, 1.0, 1.0, 1.0).
  */
 #define i915_fs_operand_one() i915_fs_operand(FS_R0, ONE, ONE, ONE, ONE)
@@ -370,7 +370,7 @@ enum i915_fs_channel {
 #define i915_get_hardware_channel_val(val, shift, negate) \
     (((val & 0x7) << shift) | ((val & 0x8) ? negate : 0))
 
-/**
+/*
  * Outputs a fragment shader command to declare a sampler or texture register.
  */
 #define i915_fs_dcl(reg)                                               \
@@ -527,19 +527,19 @@ do { \
                   i915_fs_operand_none(),                      \
                   i915_fs_operand_none())
 
-/** Add operand0 and operand1 and put the result in dest_reg */
+/* Add operand0 and operand1 and put the result in dest_reg */
 #define i915_fs_add(dest_reg, operand0, operand1)                      \
     i915_fs_arith (ADD, dest_reg, \
                   operand0, operand1,  \
                   i915_fs_operand_none())
 
-/** Multiply operand0 and operand1 and put the result in dest_reg */
+/* Multiply operand0 and operand1 and put the result in dest_reg */
 #define i915_fs_mul(dest_reg, operand0, operand1)                      \
     i915_fs_arith (MUL, dest_reg, \
                   operand0, operand1,  \
                   i915_fs_operand_none())
 
-/** Computes 1/sqrt(operand0.replicate_swizzle) puts the result in dest_reg */
+/* Computes 1/sqrt(operand0.replicate_swizzle) puts the result in dest_reg */
 #define i915_fs_rsq(dest_reg, dest_mask, operand0)             \
 do {                                                                   \
     if (dest_mask) {                                                   \
@@ -555,13 +555,13 @@ do {                                                                      \
     } \
 } while (0)
 
-/** Puts the minimum of operand0 and operand1 in dest_reg */
+/* Puts the minimum of operand0 and operand1 in dest_reg */
 #define i915_fs_min(dest_reg, operand0, operand1)                      \
     i915_fs_arith (MIN, dest_reg, \
                   operand0, operand1, \
                   i915_fs_operand_none())
 
-/** Puts the maximum of operand0 and operand1 in dest_reg */
+/* Puts the maximum of operand0 and operand1 in dest_reg */
 #define i915_fs_max(dest_reg, operand0, operand1)                      \
     i915_fs_arith (MAX, dest_reg, \
                   operand0, operand1, \
@@ -570,7 +570,7 @@ do {                                                                        \
 #define i915_fs_cmp(dest_reg, operand0, operand1, operand2)            \
     i915_fs_arith (CMP, dest_reg, operand0, operand1, operand2)
 
-/** Perform operand0 * operand1 + operand2 and put the result in dest_reg */
+/* Perform operand0 * operand1 + operand2 and put the result in dest_reg */
 #define i915_fs_mad(dest_reg, dest_mask, op0, op1, op2)        \
 do {                                                                   \
     if (dest_mask) {                                                   \
@@ -589,7 +589,7 @@ do {                                                                        \
     } \
 } while (0)
 
-/**
+/*
  * Perform a 3-component dot-product of operand0 and operand1 and put the
  * resulting scalar in the channels of dest_reg specified by the dest_mask.
  */
index 2a55889..0200121 100644 (file)
@@ -2343,6 +2343,8 @@ static const cairo_surface_backend_t i915_surface_backend = {
 
     i915_surface_create_similar,
     i915_surface_finish,
+
+    NULL,
     intel_surface_acquire_source_image,
     intel_surface_release_source_image,
 
index f88e5a4..5465f42 100644 (file)
@@ -939,7 +939,7 @@ i965_shader_setup_constants (i965_shader_t *shader)
     assert (shader->constants_size < ARRAY_LENGTH (shader->constants));
 }
 
-/**
+/*
  * Highest-valued BLENDFACTOR used in i965_blend_op.
  *
  * This leaves out BRW_BLENDFACTOR_INV_DST_COLOR,
@@ -1630,7 +1630,7 @@ i965_sf_state_equal (const void *A, const void *B)
     return a->hash == b->hash;
 }
 
-/**
+/*
  * Sets up the SF state pointing at an SF kernel.
  *
  * The SF kernel does coord interp: for each attribute,
index 71061a0..0891c95 100644 (file)
@@ -1495,6 +1495,8 @@ static const cairo_surface_backend_t i965_surface_backend = {
 
     i965_surface_create_similar,
     i965_surface_finish,
+
+    NULL,
     intel_surface_acquire_source_image,
     intel_surface_release_source_image,
 
index 05bac0a..f27b238 100644 (file)
@@ -476,7 +476,7 @@ struct brw_instruction *brw_JMPI(struct brw_compile *p,
  *
  * When the matching 'else' instruction is reached (presumably by
  * countdown of the instruction count patched in by our ELSE/ENDIF
- * functions), the relevent flags are inverted.
+ * functions), the relevant flags are inverted.
  *
  * When the matching 'endif' instruction is reached, the flags are
  * popped off.  If the stack is now empty, normal execution resumes.
index 51c3de4..2b47d8c 100644 (file)
@@ -127,7 +127,7 @@ brw_get_program (struct brw_compile *p,
 
 
 
-/**
+/*
  * Subroutine calls require special attention.
  * Mesa instructions may be expanded into multiple hardware instructions
  * so the prog_instruction::BranchTarget field can't be used as an index
@@ -142,29 +142,29 @@ brw_get_program (struct brw_compile *p,
  */
 
 
-/**
+/*
  * For each OPCODE_BGNSUB we create one of these.
  */
 struct brw_glsl_label
 {
-    const char *name; /**< the label string */
-    uint32_t position;  /**< the position of the brw instruction for this label */
-    struct brw_glsl_label *next;  /**< next in linked list */
+    const char *name; /*< the label string */
+    uint32_t position;  /*< the position of the brw instruction for this label */
+    struct brw_glsl_label *next;  /*< next in linked list */
 };
 
 
-/**
+/*
  * For each OPCODE_CAL we create one of these.
  */
 struct brw_glsl_call
 {
-    uint32_t call_inst_pos;  /**< location of the CAL instruction */
-    const char *sub_name;  /**< name of subroutine to call */
-    struct brw_glsl_call *next;  /**< next in linked list */
+    uint32_t call_inst_pos;  /*< location of the CAL instruction */
+    const char *sub_name;  /*< name of subroutine to call */
+    struct brw_glsl_call *next;  /*< next in linked list */
 };
 
 
-/**
+/*
  * Called for each OPCODE_BGNSUB.
  */
     void
@@ -178,7 +178,7 @@ brw_save_label(struct brw_compile *c, const char *name, uint32_t position)
 }
 
 
-/**
+/*
  * Called for each OPCODE_CAL.
  */
     void
@@ -192,7 +192,7 @@ brw_save_call(struct brw_compile *c, const char *name, uint32_t call_pos)
 }
 
 
-/**
+/*
  * Lookup a label, return label's position/offset.
  */
     static uint32_t
@@ -209,7 +209,7 @@ brw_lookup_label(struct brw_compile *c, const char *name)
 }
 
 
-/**
+/*
  * When we're done generating code, this function is called to resolve
  * subroutine calls.
  */
index 197a371..2662a2e 100644 (file)
@@ -38,7 +38,7 @@
 #include <assert.h>
 
 
-/**
+/*
  * Writemask values, 1 bit per component.
  */
 #define WRITEMASK_X     0x1
@@ -127,8 +127,8 @@ struct brw_compile {
    int single_program_flow;
    struct brw_context *brw;
 
-   struct brw_glsl_label *first_label;  /**< linked list of labels */
-   struct brw_glsl_call *first_call;    /**< linked list of CALs */
+   struct brw_glsl_label *first_label;  /*< linked list of labels */
+   struct brw_glsl_call *first_call;    /*< linked list of CALs */
 };
 
 cairo_private void
@@ -164,7 +164,7 @@ type_sz (uint32_t type)
    }
 }
 
-/**
+/*
  * Construct a brw_reg.
  * \param file  one of the BRW_x_REGISTER_FILE values
  * \param nr  register number/index
@@ -222,7 +222,7 @@ brw_reg (uint32_t file,
    return reg;
 }
 
-/** Construct float[16] register */
+/* Construct float[16] register */
 static cairo_always_inline struct brw_reg
 brw_vec16_reg (uint32_t file,
               uint32_t nr,
@@ -237,7 +237,7 @@ brw_vec16_reg (uint32_t file,
                    WRITEMASK_XYZW);
 }
 
-/** Construct float[8] register */
+/* Construct float[8] register */
 static cairo_always_inline struct brw_reg
 brw_vec8_reg (uint32_t file,
              uint32_t nr,
@@ -252,7 +252,7 @@ brw_vec8_reg (uint32_t file,
                    WRITEMASK_XYZW);
 }
 
-/** Construct float[4] register */
+/* Construct float[4] register */
 static cairo_always_inline struct brw_reg
 brw_vec4_reg (uint32_t file,
              uint32_t nr,
@@ -267,7 +267,7 @@ brw_vec4_reg (uint32_t file,
                   WRITEMASK_XYZW);
 }
 
-/** Construct float[2] register */
+/* Construct float[2] register */
 static cairo_always_inline struct brw_reg
 brw_vec2_reg (uint32_t file,
              uint32_t nr,
@@ -282,7 +282,7 @@ brw_vec2_reg (uint32_t file,
                   WRITEMASK_XY);
 }
 
-/** Construct float[1] register */
+/* Construct float[1] register */
 static cairo_always_inline struct brw_reg
 brw_vec1_reg (uint32_t file,
              uint32_t nr,
@@ -331,7 +331,7 @@ byte_offset (struct brw_reg reg,
    return reg;
 }
 
-/** Construct unsigned word[16] register */
+/* Construct unsigned word[16] register */
 static cairo_always_inline struct brw_reg
 brw_uw16_reg (uint32_t file,
              uint32_t nr,
@@ -340,7 +340,7 @@ brw_uw16_reg (uint32_t file,
    return suboffset (retype (brw_vec16_reg (file, nr, 0), BRW_REGISTER_TYPE_UW), subnr);
 }
 
-/** Construct unsigned word[8] register */
+/* Construct unsigned word[8] register */
 static cairo_always_inline struct brw_reg
 brw_uw8_reg (uint32_t file,
             uint32_t nr,
@@ -349,7 +349,7 @@ brw_uw8_reg (uint32_t file,
    return suboffset (retype (brw_vec8_reg (file, nr, 0), BRW_REGISTER_TYPE_UW), subnr);
 }
 
-/** Construct unsigned word[2] register */
+/* Construct unsigned word[2] register */
 static cairo_always_inline struct brw_reg
 brw_uw2_reg (uint32_t file,
             uint32_t nr,
@@ -358,7 +358,7 @@ brw_uw2_reg (uint32_t file,
    return suboffset (retype (brw_vec2_reg (file, nr, 0), BRW_REGISTER_TYPE_UW), subnr);
 }
 
-/** Construct unsigned word[1] register */
+/* Construct unsigned word[1] register */
 static cairo_always_inline struct brw_reg
 brw_uw1_reg (uint32_t file,
             uint32_t nr,
@@ -381,7 +381,7 @@ brw_imm_reg (uint32_t type)
                   0);
 }
 
-/** Construct float immediate register */
+/* Construct float immediate register */
 static cairo_always_inline struct brw_reg brw_imm_f( float f )
 {
    struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_F);
@@ -389,7 +389,7 @@ static cairo_always_inline struct brw_reg brw_imm_f( float f )
    return imm;
 }
 
-/** Construct integer immediate register */
+/* Construct integer immediate register */
 static cairo_always_inline struct brw_reg brw_imm_d( int32_t d )
 {
    struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_D);
@@ -397,7 +397,7 @@ static cairo_always_inline struct brw_reg brw_imm_d( int32_t d )
    return imm;
 }
 
-/** Construct uint immediate register */
+/* Construct uint immediate register */
 static cairo_always_inline struct brw_reg brw_imm_ud( uint32_t ud )
 {
    struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_UD);
@@ -405,7 +405,7 @@ static cairo_always_inline struct brw_reg brw_imm_ud( uint32_t ud )
    return imm;
 }
 
-/** Construct ushort immediate register */
+/* Construct ushort immediate register */
 static cairo_always_inline struct brw_reg brw_imm_uw( uint16_t uw )
 {
    struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_UW);
@@ -413,7 +413,7 @@ static cairo_always_inline struct brw_reg brw_imm_uw( uint16_t uw )
    return imm;
 }
 
-/** Construct short immediate register */
+/* Construct short immediate register */
 static cairo_always_inline struct brw_reg brw_imm_w( int16_t w )
 {
    struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_W);
@@ -425,7 +425,7 @@ static cairo_always_inline struct brw_reg brw_imm_w( int16_t w )
  * numbers alias with _V and _VF below:
  */
 
-/** Construct vector of eight signed half-byte values */
+/* Construct vector of eight signed half-byte values */
 static cairo_always_inline
 struct brw_reg brw_imm_v (uint32_t v)
 {
@@ -437,7 +437,7 @@ struct brw_reg brw_imm_v (uint32_t v)
    return imm;
 }
 
-/** Construct vector of four 8-bit float values */
+/* Construct vector of four 8-bit float values */
 static cairo_always_inline struct brw_reg
 brw_imm_vf (uint32_t v)
 {
@@ -476,28 +476,28 @@ brw_address (struct brw_reg reg)
    return brw_imm_uw (reg.nr * REG_SIZE + reg.subnr);
 }
 
-/** Construct float[1] general-purpose register */
+/* Construct float[1] general-purpose register */
 static cairo_always_inline struct brw_reg
 brw_vec1_grf (uint32_t nr, uint32_t subnr)
 {
    return brw_vec1_reg (BRW_GENERAL_REGISTER_FILE, nr, subnr);
 }
 
-/** Construct float[2] general-purpose register */
+/* Construct float[2] general-purpose register */
 static cairo_always_inline struct brw_reg
 brw_vec2_grf (uint32_t nr, uint32_t subnr)
 {
    return brw_vec2_reg (BRW_GENERAL_REGISTER_FILE, nr, subnr);
 }
 
-/** Construct float[4] general-purpose register */
+/* Construct float[4] general-purpose register */
 static cairo_always_inline struct brw_reg
 brw_vec4_grf (uint32_t nr, uint32_t subnr)
 {
    return brw_vec4_reg (BRW_GENERAL_REGISTER_FILE, nr, subnr);
 }
 
-/** Construct float[8] general-purpose register */
+/* Construct float[8] general-purpose register */
 static cairo_always_inline struct brw_reg
 brw_vec8_grf (uint32_t nr)
 {
@@ -516,7 +516,7 @@ brw_uw16_grf (uint32_t nr, uint32_t subnr)
    return brw_uw16_reg (BRW_GENERAL_REGISTER_FILE, nr, subnr);
 }
 
-/** Construct null register (usually used for setting condition codes) */
+/* Construct null register (usually used for setting condition codes) */
 static cairo_always_inline struct brw_reg
 brw_null_reg (void)
 {
index 29fe88a..004d3bf 100644 (file)
@@ -48,28 +48,28 @@ struct intel_getparam {
 };
 
 
-/** @{
+/* @{
  * Intel memory domains
  *
  * Most of these just align with the various caches in
  * the system and are used to flush and invalidate as
  * objects end up cached in different domains.
  */
-/** CPU cache */
+/* CPU cache */
 #define I915_GEM_DOMAIN_CPU            0x00000001
-/** Render cache, used by 2D and 3D drawing */
+/* Render cache, used by 2D and 3D drawing */
 #define I915_GEM_DOMAIN_RENDER         0x00000002
-/** Sampler cache, used by texture engine */
+/* Sampler cache, used by texture engine */
 #define I915_GEM_DOMAIN_SAMPLER                0x00000004
-/** Command queue, used to load batch buffers */
+/* Command queue, used to load batch buffers */
 #define I915_GEM_DOMAIN_COMMAND                0x00000008
-/** Instruction cache, used by shader programs */
+/* Instruction cache, used by shader programs */
 #define I915_GEM_DOMAIN_INSTRUCTION    0x00000010
-/** Vertex address cache */
+/* Vertex address cache */
 #define I915_GEM_DOMAIN_VERTEX         0x00000020
-/** GTT domain - aperture and scanout */
+/* GTT domain - aperture and scanout */
 #define I915_GEM_DOMAIN_GTT            0x00000040
-/** @} */
+/* @} */
 
 #define I915_TILING_NONE       0
 #define I915_TILING_X          1
@@ -95,13 +95,13 @@ struct intel_getparam {
 #define DRM_I915_GEM_MMAP_GTT  0x24
 
 struct drm_i915_gem_create {
-       /**
+       /*
         * Requested size for the object.
         *
         * The (page-aligned) allocated size for the object will be returned.
         */
        uint64_t size;
-       /**
+       /*
         * Returned handle for the object.
         *
         * Object handles are nonzero.
@@ -111,14 +111,14 @@ struct drm_i915_gem_create {
 };
 
 struct drm_i915_gem_pread {
-       /** Handle for the object being read. */
+       /* Handle for the object being read. */
        uint32_t handle;
        uint32_t pad;
-       /** Offset into the object to read from */
+       /* Offset into the object to read from */
        uint64_t offset;
-       /** Length of data to read */
+       /* Length of data to read */
        uint64_t size;
-       /**
+       /*
         * Pointer to write the data into.
         *
         * This is a fixed-size type for 32/64 compatibility.
@@ -127,14 +127,14 @@ struct drm_i915_gem_pread {
 };
 
 struct drm_i915_gem_pwrite {
-       /** Handle for the object being written to. */
+       /* Handle for the object being written to. */
        uint32_t handle;
        uint32_t pad;
-       /** Offset into the object to write to */
+       /* Offset into the object to write to */
        uint64_t offset;
-       /** Length of data to write */
+       /* Length of data to write */
        uint64_t size;
-       /**
+       /*
         * Pointer to read the data from.
         *
         * This is a fixed-size type for 32/64 compatibility.
@@ -143,18 +143,18 @@ struct drm_i915_gem_pwrite {
 };
 
 struct drm_i915_gem_mmap {
-       /** Handle for the object being mapped. */
+       /* Handle for the object being mapped. */
        uint32_t handle;
        uint32_t pad;
-       /** Offset in the object to map. */
+       /* Offset in the object to map. */
        uint64_t offset;
-       /**
+       /*
         * Length of data to map.
         *
         * The value will be page-aligned.
         */
        uint64_t size;
-       /**
+       /*
         * Returned pointer the data was mapped at.
         *
         * This is a fixed-size type for 32/64 compatibility.
@@ -163,10 +163,10 @@ struct drm_i915_gem_mmap {
 };
 
 struct drm_i915_gem_mmap_gtt {
-       /** Handle for the object being mapped. */
+       /* Handle for the object being mapped. */
        uint32_t handle;
        uint32_t pad;
-       /**
+       /*
         * Fake offset to use for subsequent mmap call
         *
         * This is a fixed-size type for 32/64 compatibility.
@@ -175,18 +175,18 @@ struct drm_i915_gem_mmap_gtt {
 };
 
 struct drm_i915_gem_set_domain {
-       /** Handle for the object */
+       /* Handle for the object */
        uint32_t handle;
 
-       /** New read domains */
+       /* New read domains */
        uint32_t read_domains;
 
-       /** New write domain */
+       /* New write domain */
        uint32_t write_domain;
 };
 
 struct drm_i915_gem_relocation_entry {
-       /**
+       /*
         * Handle of the buffer being pointed to by this relocation entry.
         *
         * It's appealing to make this be an index into the mm_validate_entry
@@ -196,16 +196,16 @@ struct drm_i915_gem_relocation_entry {
         */
        uint32_t target_handle;
 
-       /**
+       /*
         * Value to be added to the offset of the target buffer to make up
         * the relocation entry.
         */
        uint32_t delta;
 
-       /** Offset in the buffer the relocation entry will be written into */
+       /* Offset in the buffer the relocation entry will be written into */
        uint64_t offset;
 
-       /**
+       /*
         * Offset value of the target buffer that the relocation entry was last
         * written as.
         *
@@ -215,12 +215,12 @@ struct drm_i915_gem_relocation_entry {
         */
        uint64_t presumed_offset;
 
-       /**
+       /*
         * Target memory domains read by this operation.
         */
        uint32_t read_domains;
 
-       /**
+       /*
         * Target memory domains written by this operation.
         *
         * Note that only one domain may be written by the whole
@@ -231,24 +231,24 @@ struct drm_i915_gem_relocation_entry {
 };
 
 struct drm_i915_gem_exec_object {
-       /**
+       /*
         * User's handle for a buffer to be bound into the GTT for this
         * operation.
         */
        uint32_t handle;
 
-       /** Number of relocations to be performed on this buffer */
+       /* Number of relocations to be performed on this buffer */
        uint32_t relocation_count;
-       /**
+       /*
         * Pointer to array of struct drm_i915_gem_relocation_entry containing
         * the relocations to be performed in this buffer.
         */
        uint64_t relocs_ptr;
 
-       /** Required alignment in graphics aperture */
+       /* Required alignment in graphics aperture */
        uint64_t alignment;
 
-       /**
+       /*
         * Returned value of the updated offset of the object, for future
         * presumed_offset writes.
         */
@@ -256,7 +256,7 @@ struct drm_i915_gem_exec_object {
 };
 
 struct drm_i915_gem_execbuffer {
-       /**
+       /*
         * List of buffers to be validated with their relocations to be
         * performend on them.
         *
@@ -269,30 +269,30 @@ struct drm_i915_gem_execbuffer {
        uint64_t buffers_ptr;
        uint32_t buffer_count;
 
-       /** Offset in the batchbuffer to start execution from. */
+       /* Offset in the batchbuffer to start execution from. */
        uint32_t batch_start_offset;
-       /** Bytes used in batchbuffer from batch_start_offset */
+       /* Bytes used in batchbuffer from batch_start_offset */
        uint32_t batch_len;
        uint32_t DR1;
        uint32_t DR4;
        uint32_t num_cliprects;
-       /** This is a struct drm_clip_rect *cliprects */
+       /* This is a struct drm_clip_rect *cliprects */
        uint64_t cliprects_ptr;
 };
 
 struct drm_i915_gem_busy {
-       /** Handle of the buffer to check for busy */
+       /* Handle of the buffer to check for busy */
        uint32_t handle;
 
-       /** Return busy status (1 if busy, 0 if idle) */
+       /* Return busy status (1 if busy, 0 if idle) */
        uint32_t busy;
 };
 
 struct drm_i915_gem_set_tiling {
-       /** Handle of the buffer to have its tiling state updated */
+       /* Handle of the buffer to have its tiling state updated */
        uint32_t handle;
 
-       /**
+       /*
         * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
         * I915_TILING_Y).
         *
@@ -306,13 +306,13 @@ struct drm_i915_gem_set_tiling {
         */
        uint32_t tiling_mode;
 
-       /**
+       /*
         * Stride in bytes for the object when in I915_TILING_X or
         * I915_TILING_Y.
         */
        uint32_t stride;
 
-       /**
+       /*
         * Returned address bit 6 swizzling required for CPU access through
         * mmap mapping.
         */
@@ -320,16 +320,16 @@ struct drm_i915_gem_set_tiling {
 };
 
 struct drm_i915_gem_get_tiling {
-       /** Handle of the buffer to get tiling state for. */
+       /* Handle of the buffer to get tiling state for. */
        uint32_t handle;
 
-       /**
+       /*
         * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
         * I915_TILING_Y).
         */
        uint32_t tiling_mode;
 
-       /**
+       /*
         * Returned address bit 6 swizzling required for CPU access through
         * mmap mapping.
         */
@@ -337,10 +337,10 @@ struct drm_i915_gem_get_tiling {
 };
 
 struct drm_i915_gem_get_aperture {
-       /** Total size of the aperture used by i915_gem_execbuffer, in bytes */
+       /* Total size of the aperture used by i915_gem_execbuffer, in bytes */
        uint64_t aper_size;
 
-       /**
+       /*
         * Available space in the aperture used by i915_gem_execbuffer, in
         * bytes
         */
@@ -377,24 +377,24 @@ struct drm_i915_gem_madvise {
 
 /* XXX execbuffer2 */
 struct drm_i915_gem_exec_object2 {
-       /**
+       /*
         * User's handle for a buffer to be bound into the GTT for this
         * operation.
         */
        uint32_t handle;
 
-       /** Number of relocations to be performed on this buffer */
+       /* Number of relocations to be performed on this buffer */
        uint32_t relocation_count;
-       /**
+       /*
         * Pointer to array of struct drm_i915_gem_relocation_entry containing
         * the relocations to be performed in this buffer.
         */
        uint64_t relocs_ptr;
 
-       /** Required alignment in graphics aperture */
+       /* Required alignment in graphics aperture */
        uint64_t alignment;
 
-       /**
+       /*
         * Returned value of the updated offset of the object, for future
         * presumed_offset writes.
         */
@@ -407,20 +407,20 @@ struct drm_i915_gem_exec_object2 {
 };
 
 struct drm_i915_gem_execbuffer2 {
-       /**
+       /*
         * List of gem_exec_object2 structs
         */
        uint64_t buffers_ptr;
        uint32_t buffer_count;
 
-       /** Offset in the batchbuffer to start execution from. */
+       /* Offset in the batchbuffer to start execution from. */
        uint32_t batch_start_offset;
-       /** Bytes used in batchbuffer from batch_start_offset */
+       /* Bytes used in batchbuffer from batch_start_offset */
        uint32_t batch_len;
        uint32_t DR1;
        uint32_t DR4;
        uint32_t num_cliprects;
-       /** This is a struct drm_clip_rect *cliprects */
+       /* This is a struct drm_clip_rect *cliprects */
        uint64_t cliprects_ptr;
        uint64_t flags;
        uint64_t rsvd1;
index f28c750..fe98759 100644 (file)
@@ -253,8 +253,11 @@ static const cairo_surface_backend_t intel_surface_backend = {
 
     intel_surface_create_similar,
     intel_surface_finish,
+
+    NULL,
     intel_surface_acquire_source_image,
     intel_surface_release_source_image,
+
     NULL, NULL, NULL,
     NULL, /* composite */
     NULL, /* fill */
index 9335d7b..9f46ca1 100644 (file)
@@ -257,8 +257,11 @@ static const cairo_surface_backend_t radeon_surface_backend = {
 
     radeon_surface_create_similar,
     radeon_surface_finish,
+
+    NULL,
     radeon_surface_acquire_source_image,
     radeon_surface_release_source_image,
+
     NULL, NULL, NULL,
     NULL, /* composite */
     NULL, /* fill */
index a8a8f32..8c4dd0e 100644 (file)
@@ -35,6 +35,7 @@
 #include "cairo-drm-private.h"
 
 #include "cairo-error-private.h"
+#include "cairo-image-surface-inline.h"
 
 void
 _cairo_drm_surface_init (cairo_drm_surface_t *surface,
index e5d4828..a08b3fb 100644 (file)
@@ -47,6 +47,7 @@
 #include "cairo-default-context-private.h"
 #include "cairo-freed-pool-private.h"
 #include "cairo-gstate-private.h"
+#include "cairo-image-surface-inline.h"
 #include "cairo-path-private.h"
 #include "cairo-pattern-private.h"
 #include "cairo-skia-private.h"
@@ -1258,12 +1259,16 @@ _cairo_skia_context_paint_with_alpha (void *abstract_cr,
                                      double alpha)
 {
     cairo_skia_context_t *cr = (cairo_skia_context_t *) abstract_cr;
+    cairo_status_t status;
 
     if (CAIRO_ALPHA_IS_OPAQUE (alpha))
        return _cairo_skia_context_paint (cr);
 
-    /*XXX */
-    return _cairo_skia_context_paint (cr);
+    cr->paint->setAlpha(SkScalarRound(255*alpha));
+    status = _cairo_skia_context_paint (cr);
+    cr->paint->setAlpha(255);
+
+    return status;
 }
 
 static cairo_status_t
index de94f3a..71bebb0 100644 (file)
@@ -175,6 +175,7 @@ cairo_skia_surface_backend = {
     _cairo_skia_surface_map_to_image,
     _cairo_skia_surface_unmap_image,
 
+    _cairo_surface_default_source,
     _cairo_skia_surface_acquire_source_image,
     _cairo_skia_surface_release_source_image,
     NULL, /* snapshot */
index 21032b0..f8fa517 100644 (file)
@@ -137,103 +137,6 @@ _pixman_operator (cairo_operator_t op)
     }
 }
 
-static void
-_pixman_image_add_boxes (pixman_image_t *image,
-                        int dst_x, int dst_y,
-                        cairo_box_t *box,
-                        int count)
-{
-    while (count--) {
-       pixman_trapezoid_t trap;
-
-       trap.top = _cairo_fixed_to_16_16 (box->p1.y);
-       trap.bottom = _cairo_fixed_to_16_16 (box->p2.y);
-
-       trap.left.p1.x = _cairo_fixed_to_16_16 (box->p1.x);
-       trap.left.p1.y = _cairo_fixed_to_16_16 (box->p1.y);
-       trap.left.p2.x = _cairo_fixed_to_16_16 (box->p1.x);
-       trap.left.p2.y = _cairo_fixed_to_16_16 (box->p2.y);
-
-       trap.right.p1.x = _cairo_fixed_to_16_16 (box->p2.x);
-       trap.right.p1.y = _cairo_fixed_to_16_16 (box->p1.y);
-       trap.right.p2.x = _cairo_fixed_to_16_16 (box->p2.x);
-       trap.right.p2.y = _cairo_fixed_to_16_16 (box->p2.y);
-
-       pixman_rasterize_trapezoid (image, &trap, -dst_x, -dst_y);
-       box++;
-    }
-}
-
-static cairo_status_t
-combine_in_boxes (cairo_image_surface_t *dst,
-                 cairo_box_t *box, int count,
-                 const cairo_rectangle_int_t *extents)
-{
-    pixman_image_t *mask;
-
-    mask = pixman_image_create_bits (PIXMAN_a8,
-                                    extents->width, extents->height,
-                                    NULL, 0);
-    if (unlikely (mask == NULL))
-       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-
-    _pixman_image_add_boxes (mask, extents->x, extents->y, box, count);
-    pixman_image_composite32 (PIXMAN_OP_IN,
-                              mask, NULL, dst->pixman_image,
-                             0, 0,
-                              0, 0,
-                              0, 0,
-                              extents->width, extents->height);
-    pixman_image_unref (mask);
-
-    return CAIRO_STATUS_SUCCESS;
-}
-
-static cairo_image_surface_t *
-get_clip_surface (cairo_image_surface_t        *dst,
-                 const cairo_composite_rectangles_t *extents,
-                 int *clip_x,
-                 int *clip_y)
-{
-    cairo_image_surface_t *surface;
-    cairo_int_status_t status;
-
-    surface = (cairo_image_surface_t *)
-       _cairo_surface_create_similar_solid (&dst->base,
-                                            CAIRO_CONTENT_ALPHA,
-                                            extents->unbounded.width,
-                                            extents->unbounded.height,
-                                            CAIRO_COLOR_WHITE);
-    if (unlikely (surface->base.status))
-       return surface;
-
-    if (extents->clip->boxes) {
-       status = combine_in_boxes (surface,
-                                  extents->clip->boxes,
-                                  extents->clip->num_boxes,
-                                  &extents->unbounded);
-       if (unlikely (status))
-           goto error;
-    }
-
-    if (extents->clip->path) {
-       status = _cairo_clip_combine_with_surface (extents->clip,
-                                                  &surface->base,
-                                                  extents->unbounded.x,
-                                                  extents->unbounded.y);
-       if (unlikely (status))
-           goto error;
-    }
-
-    *clip_x = extents->unbounded.x;
-    *clip_y = extents->unbounded.y;
-    return surface;
-
-error:
-    cairo_surface_destroy (&surface->base);
-    return (cairo_image_surface_t *)_cairo_surface_create_in_error (status);
-}
-
 static cairo_image_surface_t *
 create_composite_mask (cairo_image_surface_t   *dst,
                       void                     *draw_closure,
@@ -243,12 +146,13 @@ create_composite_mask (cairo_image_surface_t      *dst,
     cairo_image_surface_t *surface;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     surface = (cairo_image_surface_t *)
-       _cairo_surface_create_similar_solid (&dst->base,
-                                            CAIRO_CONTENT_ALPHA,
-                                            extents->bounded.width,
-                                            extents->bounded.height,
-                                            CAIRO_COLOR_TRANSPARENT);
+       _cairo_image_surface_create_with_pixman_format (NULL, PIXMAN_a8,
+                                                       extents->bounded.width,
+                                                       extents->bounded.height,
+                                                       0);
     if (unlikely (surface->base.status))
        return surface;
 
@@ -259,23 +163,12 @@ create_composite_mask (cairo_image_surface_t      *dst,
     if (unlikely (status))
        goto error;
 
-    if (extents->clip->boxes) {
-       status = combine_in_boxes (surface,
-                                  extents->clip->boxes,
-                                  extents->clip->num_boxes,
-                                  &extents->bounded);
-       if (unlikely (status))
-           goto error;
-    }
-
-    if (extents->clip->path) {
-       status = _cairo_clip_combine_with_surface (extents->clip,
-                                                  &surface->base,
-                                                  extents->bounded.x,
-                                                  extents->bounded.y);
-       if (unlikely (status))
-           goto error;
-    }
+    status = _cairo_clip_combine_with_surface (extents->clip,
+                                              &surface->base,
+                                              extents->bounded.x,
+                                              extents->bounded.y);
+    if (unlikely (status))
+       goto error;
 
     return surface;
 
@@ -298,6 +191,8 @@ clip_and_composite_with_mask (const cairo_composite_rectangles_t*extents,
     cairo_status_t status = CAIRO_STATUS_SUCCESS;
     int src_x, src_y;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     mask = create_composite_mask (dst, draw_closure, draw_func, extents);
     if (unlikely (mask->base.status))
        return mask->base.status;
@@ -339,11 +234,14 @@ clip_and_composite_combine (const cairo_composite_rectangles_t*extents,
     int clip_x, clip_y;
     cairo_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     tmp = (cairo_image_surface_t *)
-       _cairo_surface_create_similar_solid (&dst->base, dst->base.content,
-                                            extents->bounded.width,
-                                            extents->bounded.height,
-                                            CAIRO_COLOR_TRANSPARENT);
+       _cairo_image_surface_create_with_pixman_format (NULL,
+                                                       dst->pixman_format,
+                                                       extents->bounded.width,
+                                                       extents->bounded.height,
+                                                       0);
     if (unlikely (tmp->base.status))
        return tmp->base.status;
 
@@ -362,7 +260,7 @@ clip_and_composite_combine (const cairo_composite_rectangles_t*extents,
        goto error;
 
     clip = (cairo_image_surface_t *)
-       get_clip_surface (dst, extents, &clip_x, &clip_y);
+       _cairo_clip_get_surface (extents->clip, &dst->base, &clip_x, &clip_y);
     if (unlikely (clip->base.status))
        goto error;
 
@@ -401,6 +299,8 @@ clip_and_composite_source (const cairo_composite_rectangles_t       *extents,
     int src_x, src_y;
     cairo_status_t status = CAIRO_STATUS_SUCCESS;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     mask = create_composite_mask (dst, draw_closure, draw_func, extents);
     if (unlikely (mask->base.status))
        return mask->base.status;
@@ -443,10 +343,14 @@ fixup_unbounded (const cairo_composite_rectangles_t *extents)
     pixman_image_t *mask;
     int mask_x, mask_y;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     if (! _cairo_clip_is_region (extents->clip)) {
        cairo_image_surface_t *clip;
 
-       clip = get_clip_surface (dst, extents, &mask_x, &mask_y);
+       clip = (cairo_image_surface_t *)
+           _cairo_clip_get_surface (extents->clip, &dst->base,
+                                    &mask_x, &mask_y);
        if (unlikely (clip->base.status))
            return clip->base.status;
 
@@ -590,6 +494,8 @@ composite_paint (cairo_image_surface_t              *dst,
     pixman_image_t *src;
     int src_x, src_y;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     _cairo_pattern_sampled_area (pattern, extents, &sample);
     src = _pixman_image_for_pattern (dst,
                                     pattern, FALSE,
@@ -598,6 +504,11 @@ composite_paint (cairo_image_surface_t             *dst,
     if (unlikely (src == NULL))
        return _cairo_error (CAIRO_STATUS_NO_MEMORY);
 
+    TRACE ((stderr, "%s: src=(%d, %d), dst=(%d, %d) size=%dx%d\n", __FUNCTION__,
+           extents->x + src_x, extents->y + src_y,
+           extents->x - dst_x, extents->y - dst_y,
+           extents->width, extents->height));
+
     pixman_image_composite32 (_pixman_operator (op),
                              src, NULL, dst->pixman_image,
                              extents->x + src_x, extents->y + src_y,
@@ -614,6 +525,7 @@ static cairo_int_status_t
 base_compositor_paint (const cairo_compositor_t *_compositor,
                       cairo_composite_rectangles_t *extents)
 {
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     return clip_and_composite (extents, composite_paint, NULL);
 }
 
@@ -631,6 +543,8 @@ composite_mask (cairo_image_surface_t               *dst,
     int src_x, src_y;
     int mask_x, mask_y;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     _cairo_pattern_sampled_area (pattern, extents, &sample);
     src = _pixman_image_for_pattern (dst, pattern, FALSE,
                                     extents, &sample,
@@ -664,6 +578,7 @@ static cairo_int_status_t
 base_compositor_mask (const cairo_compositor_t *_compositor,
                      cairo_composite_rectangles_t *extents)
 {
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     return clip_and_composite (extents, composite_mask, &extents->mask_pattern.base);
 }
 
@@ -686,6 +601,8 @@ composite_traps (cairo_image_surface_t      *dst,
     pixman_image_t *src, *mask;
     int src_x, src_y;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     _cairo_pattern_sampled_area (pattern, extents, &sample);
     src = _pixman_image_for_pattern (dst, pattern, FALSE,
                                     extents, &sample,
@@ -741,6 +658,8 @@ base_compositor_stroke (const cairo_compositor_t *_compositor,
     composite_traps_info_t info;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     info.antialias = antialias;
     _cairo_traps_init_with_clip (&info.traps, extents->clip);
     status = _cairo_path_fixed_stroke_to_traps (path, style,
@@ -767,6 +686,8 @@ base_compositor_fill (const cairo_compositor_t *_compositor,
     composite_traps_info_t info;
     cairo_int_status_t status;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     info.antialias = antialias;
     _cairo_traps_init_with_clip (&info.traps, extents->clip);
     status = _cairo_path_fixed_fill_to_traps (path,
@@ -795,6 +716,8 @@ composite_glyphs (cairo_image_surface_t     *dst,
     cairo_status_t status;
     int i;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
     mask = pixman_image_create_bits (PIXMAN_a8,
                                     extents->width, extents->height,
                                     NULL, 0);
@@ -877,6 +800,7 @@ base_compositor_glyphs (const cairo_compositor_t    *_compositor,
     info.glyphs = glyphs;
     info.num_glyphs = num_glyphs;
 
+    TRACE ((stderr, "%s\n", __FUNCTION__));
     return clip_and_composite (extents, composite_glyphs, &info);
 }
 
index 356c16c..ddee06f 100644 (file)
@@ -195,6 +195,7 @@ static const cairo_surface_backend_t test_compositor_surface_backend = {
     _cairo_image_surface_map_to_image,
     _cairo_image_surface_unmap_image,
 
+    _cairo_image_surface_source,
     _cairo_image_surface_acquire_source_image,
     _cairo_image_surface_release_source_image,
     _cairo_image_surface_snapshot,
index df2eda0..2301055 100644 (file)
@@ -198,6 +198,7 @@ static const cairo_surface_backend_t test_compositor_surface_backend = {
     _cairo_image_surface_map_to_image,
     _cairo_image_surface_unmap_image,
 
+    _cairo_image_surface_source,
     _cairo_image_surface_acquire_source_image,
     _cairo_image_surface_release_source_image,
     NULL, /* snapshot */
@@ -372,7 +373,8 @@ finish_spans (void *abstract_renderer)
 static cairo_int_status_t
 span_renderer_init (cairo_abstract_span_renderer_t     *_r,
                    const cairo_composite_rectangles_t *composite,
-                   cairo_bool_t                         needs_clip)
+                   cairo_antialias_t                   antialias,
+                   cairo_bool_t                        needs_clip)
 {
     cairo_span_renderer_t *r = (cairo_span_renderer_t *)_r;
     r->render_rows = spans;
@@ -392,6 +394,12 @@ no_fallback_compositor_get (void)
     return &__cairo_no_compositor;
 }
 
+static cairo_int_status_t
+check_composite (const cairo_composite_rectangles_t *extents)
+{
+    return CAIRO_STATUS_SUCCESS;
+}
+
 static const cairo_compositor_t *
 no_traps_compositor_get (void)
 {
@@ -408,7 +416,7 @@ no_traps_compositor_get (void)
        compositor.draw_image_boxes = draw_image_boxes;
        //compositor.copy_boxes = copy_boxes;
        compositor.fill_boxes = fill_boxes;
-       //compositor.check_composite = check_composite;
+       compositor.check_composite = check_composite;
        compositor.composite = composite;
        compositor.lerp = lerp;
        //compositor.check_composite_boxes = check_composite_boxes;
index e3c8a91..0a7c79b 100644 (file)
@@ -253,6 +253,7 @@ static const cairo_surface_backend_t test_paginated_surface_backend = {
     NULL, /* map to image */
     NULL, /* unmap image */
 
+    _cairo_surface_default_source,
     NULL, /* acquire_source_image */
     NULL, /* release_source_image */
     NULL, /* snapshot */
diff --git a/src/win32/cairo-win32-debug.c b/src/win32/cairo-win32-debug.c
new file mode 100644 (file)
index 0000000..ff7aeaf
--- /dev/null
@@ -0,0 +1,87 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Owen Taylor <otaylor@redhat.com>
+ *     Stuart Parmenter <stuart@mozilla.com>
+ *     Vladimir Vukicevic <vladimir@pobox.com>
+ */
+
+#define WIN32_LEAN_AND_MEAN
+/* We require Windows 2000 features such as ETO_PDY */
+#if !defined(WINVER) || (WINVER < 0x0500)
+# define WINVER 0x0500
+#endif
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
+# define _WIN32_WINNT 0x0500
+#endif
+
+#include "cairoint.h"
+#include "cairo-win32-private.h"
+
+#include <wchar.h>
+#include <windows.h>
+
+void
+_cairo_win32_debug_dump_hrgn (HRGN rgn, char *header)
+{
+    RGNDATA *rd;
+    unsigned int z;
+
+    if (header)
+       fprintf (stderr, "%s\n", header);
+
+    if (rgn == NULL) {
+       fprintf (stderr, " NULL\n");
+    }
+
+    z = GetRegionData(rgn, 0, NULL);
+    rd = (RGNDATA*) malloc(z);
+    z = GetRegionData(rgn, z, rd);
+
+    fprintf (stderr, " %ld rects, bounds: %ld %ld %ld %ld\n",
+            rd->rdh.nCount,
+            rd->rdh.rcBound.left,
+            rd->rdh.rcBound.top,
+            rd->rdh.rcBound.right - rd->rdh.rcBound.left,
+            rd->rdh.rcBound.bottom - rd->rdh.rcBound.top);
+
+    for (z = 0; z < rd->rdh.nCount; z++) {
+       RECT r = ((RECT*)rd->Buffer)[z];
+       fprintf (stderr, " [%d]: [%ld %ld %ld %ld]\n",
+                z, r.left, r.top, r.right - r.left, r.bottom - r.top);
+    }
+
+    free(rd);
+    fflush (stderr);
+}
diff --git a/src/win32/cairo-win32-device.c b/src/win32/cairo-win32-device.c
new file mode 100644 (file)
index 0000000..b3ee573
--- /dev/null
@@ -0,0 +1,189 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Owen Taylor <otaylor@redhat.com>
+ *     Stuart Parmenter <stuart@mozilla.com>
+ *     Vladimir Vukicevic <vladimir@pobox.com>
+ */
+
+#define WIN32_LEAN_AND_MEAN
+/* We require Windows 2000 features such as ETO_PDY */
+#if !defined(WINVER) || (WINVER < 0x0500)
+# define WINVER 0x0500
+#endif
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
+# define _WIN32_WINNT 0x0500
+#endif
+
+#include "cairoint.h"
+
+#include "cairo-atomic-private.h"
+#include "cairo-device-private.h"
+#include "cairo-win32-private.h"
+
+#include <wchar.h>
+#include <windows.h>
+
+static cairo_device_t *__cairo_win32_device;
+
+static cairo_status_t
+_cairo_win32_device_flush (void *device)
+{
+    GdiFlush ();
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_win32_device_finish (void *device)
+{
+}
+
+static void
+_cairo_win32_device_destroy (void *device)
+{
+    free (device);
+}
+
+static const cairo_device_backend_t _cairo_win32_device_backend = {
+    CAIRO_DEVICE_TYPE_WIN32,
+
+    NULL, NULL, /* lock, unlock */
+
+    _cairo_win32_device_flush,
+    _cairo_win32_device_finish,
+    _cairo_win32_device_destroy,
+};
+
+#if 0
+D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,
+                                                                  D2D1::PixelFormat(
+                                                                                    DXGI_FORMAT_B8G8R8A8_UNORM,
+                                                                                    D2D1_ALPHA_MODE_IGNORE),
+                                                                  0,
+                                                                  0,
+                                                                  D2D1_RENDER_TARGET_USAGE_NONE,
+                                                                  D2D1_FEATURE_LEVEL_DEFAULT
+                                                                 );
+
+hr = m_pD2DFactory->CreateDCRenderTarget(&props, &device->d2d);
+#endif
+
+static cairo_bool_t is_win98 (void)
+{
+    OSVERSIONINFO os;
+
+    os.dwOSVersionInfoSize = sizeof (os);
+    GetVersionEx (&os);
+
+    return (VER_PLATFORM_WIN32_WINDOWS != os.dwPlatformId &&
+           os.dwMajorVersion != 4 &&
+           os.dwMinorVersion != 10);
+}
+
+static void *
+_cairo_win32_device_get_alpha_blend (cairo_win32_device_t *device)
+{
+    void *func = NULL;
+
+    if (is_win98 ())
+       return NULL;
+
+    device->msimg32_dll = LoadLibraryW (L"msimg32");
+    if (device->msimg32_dll)
+       func = GetProcAddress (device->msimg32_dll, "AlphaBlend");
+
+    return func;
+}
+
+cairo_device_t *
+_cairo_win32_device_get (void)
+{
+    cairo_win32_device_t *device;
+
+    if (__cairo_win32_device)
+       return cairo_device_reference (__cairo_win32_device);
+
+    device = malloc (sizeof (*device));
+
+    _cairo_device_init (&device->base, &_cairo_win32_device_backend);
+
+    device->compositor = _cairo_win32_gdi_compositor_get ();
+
+    device->msimg32_dll = NULL;
+    device->alpha_blend = _cairo_win32_device_get_alpha_blend (device);
+
+    if (_cairo_atomic_ptr_cmpxchg ((void **)&__cairo_win32_device, NULL, device))
+       return cairo_device_reference(&device->base);
+
+    _cairo_win32_device_destroy (device);
+    return cairo_device_reference (__cairo_win32_device);
+}
+
+unsigned
+_cairo_win32_flags_for_dc (HDC dc)
+{
+    uint32_t flags = 0;
+    int cap;
+
+    cap = GetDeviceCaps(dc, RASTERCAPS);
+    if (cap & RC_BITBLT)
+       flags |= CAIRO_WIN32_SURFACE_CAN_BITBLT;
+    if (cap & RC_STRETCHBLT)
+       flags |= CAIRO_WIN32_SURFACE_CAN_STRETCHBLT;
+    if (cap & RC_STRETCHDIB)
+       flags |= CAIRO_WIN32_SURFACE_CAN_STRETCHDIB;
+
+    if (GetDeviceCaps(dc, TECHNOLOGY) == DT_RASDISPLAY) {
+       flags |= CAIRO_WIN32_SURFACE_IS_DISPLAY;
+
+       /* These will always be possible, but the actual GetDeviceCaps
+        * calls will return whether they're accelerated or not.
+        * We may want to use our own (pixman) routines sometimes
+        * if they're eventually faster, but for now have GDI do
+        * everything.
+        */
+#if 0
+       flags |= CAIRO_WIN32_SURFACE_CAN_BITBLT;
+       flags |= CAIRO_WIN32_SURFACE_CAN_ALPHABLEND;
+       flags |= CAIRO_WIN32_SURFACE_CAN_STRETCHBLT;
+       flags |= CAIRO_WIN32_SURFACE_CAN_STRETCHDIB;
+#endif
+    } else {
+       cap = GetDeviceCaps(dc, SHADEBLENDCAPS);
+       if (cap != SB_NONE)
+           flags |= CAIRO_WIN32_SURFACE_CAN_ALPHABLEND;
+    }
+
+    return flags;
+}
diff --git a/src/win32/cairo-win32-display-surface.c b/src/win32/cairo-win32-display-surface.c
new file mode 100644 (file)
index 0000000..7efa7d8
--- /dev/null
@@ -0,0 +1,1059 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Owen Taylor <otaylor@redhat.com>
+ *     Stuart Parmenter <stuart@mozilla.com>
+ *     Vladimir Vukicevic <vladimir@pobox.com>
+ */
+
+#define WIN32_LEAN_AND_MEAN
+/* We require Windows 2000 features such as ETO_PDY */
+#if !defined(WINVER) || (WINVER < 0x0500)
+# define WINVER 0x0500
+#endif
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
+# define _WIN32_WINNT 0x0500
+#endif
+
+#include "cairoint.h"
+
+#include "cairo-clip-private.h"
+#include "cairo-composite-rectangles-private.h"
+#include "cairo-compositor-private.h"
+#include "cairo-damage-private.h"
+#include "cairo-default-context-private.h"
+#include "cairo-error-private.h"
+#include "cairo-image-surface-inline.h"
+#include "cairo-paginated-private.h"
+#include "cairo-pattern-private.h"
+#include "cairo-win32-private.h"
+#include "cairo-scaled-font-subsets-private.h"
+#include "cairo-surface-fallback-private.h"
+#include "cairo-surface-backend-private.h"
+
+#include <wchar.h>
+#include <windows.h>
+
+#if defined(__MINGW32__) && !defined(ETO_PDY)
+# define ETO_PDY 0x2000
+#endif
+
+#define PELS_72DPI  ((LONG)(72. / 0.0254))
+
+/**
+ * SECTION:cairo-win32
+ * @Title: Win32 Surfaces
+ * @Short_Description: Microsoft Windows surface support
+ * @See_Also: #cairo_surface_t
+ *
+ * The Microsoft Windows surface is used to render cairo graphics to
+ * Microsoft Windows windows, bitmaps, and printing device contexts.
+ *
+ * The surface returned by cairo_win32_printing_surface_create() is of surface
+ * type %CAIRO_SURFACE_TYPE_WIN32_PRINTING and is a multi-page vector surface
+ * type.
+ *
+ * The surface returned by the other win32 constructors is of surface type
+ * %CAIRO_SURFACE_TYPE_WIN32 and is a raster surface type.
+ **/
+
+/**
+ * CAIRO_HAS_WIN32_SURFACE:
+ *
+ * Defined if the Microsoft Windows surface backend is available.
+ * This macro can be used to conditionally compile backend-specific code.
+ *
+ * Since: 1.0
+ **/
+
+static const cairo_surface_backend_t cairo_win32_display_surface_backend;
+
+static cairo_status_t
+_create_dc_and_bitmap (cairo_win32_display_surface_t *surface,
+                      HDC                    original_dc,
+                      cairo_format_t         format,
+                      int                    width,
+                      int                    height,
+                      unsigned char        **bits_out,
+                      int                   *rowstride_out)
+{
+    cairo_status_t status;
+
+    BITMAPINFO *bitmap_info = NULL;
+    struct {
+       BITMAPINFOHEADER bmiHeader;
+       RGBQUAD bmiColors[2];
+    } bmi_stack;
+    void *bits;
+
+    int num_palette = 0;       /* Quiet GCC */
+    int i;
+
+    surface->win32.dc = NULL;
+    surface->bitmap = NULL;
+    surface->is_dib = FALSE;
+
+    switch (format) {
+    default:
+    case CAIRO_FORMAT_INVALID:
+    case CAIRO_FORMAT_RGB16_565:
+    case CAIRO_FORMAT_RGB30:
+       return _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
+    case CAIRO_FORMAT_ARGB32:
+    case CAIRO_FORMAT_RGB24:
+       num_palette = 0;
+       break;
+
+    case CAIRO_FORMAT_A8:
+       num_palette = 256;
+       break;
+
+    case CAIRO_FORMAT_A1:
+       num_palette = 2;
+       break;
+    }
+
+    if (num_palette > 2) {
+       bitmap_info = _cairo_malloc_ab_plus_c (num_palette, sizeof(RGBQUAD), sizeof(BITMAPINFOHEADER));
+       if (!bitmap_info)
+           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+    } else {
+       bitmap_info = (BITMAPINFO *)&bmi_stack;
+    }
+
+    bitmap_info->bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
+    bitmap_info->bmiHeader.biWidth = width == 0 ? 1 : width;
+    bitmap_info->bmiHeader.biHeight = height == 0 ? -1 : - height; /* top-down */
+    bitmap_info->bmiHeader.biSizeImage = 0;
+    bitmap_info->bmiHeader.biXPelsPerMeter = PELS_72DPI; /* unused here */
+    bitmap_info->bmiHeader.biYPelsPerMeter = PELS_72DPI; /* unused here */
+    bitmap_info->bmiHeader.biPlanes = 1;
+
+    switch (format) {
+    case CAIRO_FORMAT_INVALID:
+    case CAIRO_FORMAT_RGB16_565:
+    case CAIRO_FORMAT_RGB30:
+       ASSERT_NOT_REACHED;
+    /* We can't create real RGB24 bitmaps because something seems to
+     * break if we do, especially if we don't set up an image
+     * fallback.  It could be a bug with using a 24bpp pixman image
+     * (and creating one with masks).  So treat them like 32bpp.
+     * Note: This causes problems when using BitBlt/AlphaBlend/etc!
+     * see end of file.
+     */
+    case CAIRO_FORMAT_RGB24:
+    case CAIRO_FORMAT_ARGB32:
+       bitmap_info->bmiHeader.biBitCount = 32;
+       bitmap_info->bmiHeader.biCompression = BI_RGB;
+       bitmap_info->bmiHeader.biClrUsed = 0;   /* unused */
+       bitmap_info->bmiHeader.biClrImportant = 0;
+       break;
+
+    case CAIRO_FORMAT_A8:
+       bitmap_info->bmiHeader.biBitCount = 8;
+       bitmap_info->bmiHeader.biCompression = BI_RGB;
+       bitmap_info->bmiHeader.biClrUsed = 256;
+       bitmap_info->bmiHeader.biClrImportant = 0;
+
+       for (i = 0; i < 256; i++) {
+           bitmap_info->bmiColors[i].rgbBlue = i;
+           bitmap_info->bmiColors[i].rgbGreen = i;
+           bitmap_info->bmiColors[i].rgbRed = i;
+           bitmap_info->bmiColors[i].rgbReserved = 0;
+       }
+       break;
+
+    case CAIRO_FORMAT_A1:
+       bitmap_info->bmiHeader.biBitCount = 1;
+       bitmap_info->bmiHeader.biCompression = BI_RGB;
+       bitmap_info->bmiHeader.biClrUsed = 2;
+       bitmap_info->bmiHeader.biClrImportant = 0;
+
+       for (i = 0; i < 2; i++) {
+           bitmap_info->bmiColors[i].rgbBlue = i * 255;
+           bitmap_info->bmiColors[i].rgbGreen = i * 255;
+           bitmap_info->bmiColors[i].rgbRed = i * 255;
+           bitmap_info->bmiColors[i].rgbReserved = 0;
+       }
+       break;
+    }
+
+    surface->win32.dc = CreateCompatibleDC (original_dc);
+    if (!surface->win32.dc)
+       goto FAIL;
+
+    surface->bitmap = CreateDIBSection (surface->win32.dc,
+                                       bitmap_info,
+                                       DIB_RGB_COLORS,
+                                       &bits,
+                                       NULL, 0);
+    if (!surface->bitmap)
+       goto FAIL;
+
+    surface->is_dib = TRUE;
+
+    GdiFlush();
+
+    surface->saved_dc_bitmap = SelectObject (surface->win32.dc,
+                                            surface->bitmap);
+    if (!surface->saved_dc_bitmap)
+       goto FAIL;
+
+    if (bitmap_info && num_palette > 2)
+       free (bitmap_info);
+
+    if (bits_out)
+       *bits_out = bits;
+
+    if (rowstride_out) {
+       /* Windows bitmaps are padded to 32-bit (dword) boundaries */
+       switch (format) {
+       case CAIRO_FORMAT_INVALID:
+       case CAIRO_FORMAT_RGB16_565:
+       case CAIRO_FORMAT_RGB30:
+           ASSERT_NOT_REACHED;
+       case CAIRO_FORMAT_ARGB32:
+       case CAIRO_FORMAT_RGB24:
+           *rowstride_out = 4 * width;
+           break;
+
+       case CAIRO_FORMAT_A8:
+           *rowstride_out = (width + 3) & ~3;
+           break;
+
+       case CAIRO_FORMAT_A1:
+           *rowstride_out = ((width + 31) & ~31) / 8;
+           break;
+       }
+    }
+
+    surface->win32.flags = _cairo_win32_flags_for_dc (surface->win32.dc);
+
+    return CAIRO_STATUS_SUCCESS;
+
+ FAIL:
+    status = _cairo_win32_print_gdi_error (__FUNCTION__);
+
+    if (bitmap_info && num_palette > 2)
+       free (bitmap_info);
+
+    if (surface->saved_dc_bitmap) {
+       SelectObject (surface->win32.dc, surface->saved_dc_bitmap);
+       surface->saved_dc_bitmap = NULL;
+    }
+
+    if (surface->bitmap) {
+       DeleteObject (surface->bitmap);
+       surface->bitmap = NULL;
+    }
+
+    if (surface->win32.dc) {
+       DeleteDC (surface->win32.dc);
+       surface->win32.dc = NULL;
+    }
+
+    return status;
+}
+
+static cairo_surface_t *
+_cairo_win32_display_surface_create_for_dc (HDC             original_dc,
+                                           cairo_format_t  format,
+                                           int             width,
+                                           int             height)
+{
+    cairo_status_t status;
+    cairo_device_t *device;
+    cairo_win32_display_surface_t *surface;
+    unsigned char *bits;
+    int rowstride;
+
+    surface = malloc (sizeof (*surface));
+    if (surface == NULL)
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+    surface->fallback = NULL;
+
+    status = _create_dc_and_bitmap (surface, original_dc, format,
+                                   width, height,
+                                   &bits, &rowstride);
+    if (status)
+       goto FAIL;
+
+    surface->image = cairo_image_surface_create_for_data (bits, format,
+                                                         width, height, rowstride);
+    status = surface->image->status;
+    if (status)
+       goto FAIL;
+
+    _cairo_image_surface_set_parent (to_image_surface(surface->image),
+                                    &surface->win32.base);
+
+    surface->win32.format = format;
+
+    surface->win32.extents.x = 0;
+    surface->win32.extents.y = 0;
+    surface->win32.extents.width = width;
+    surface->win32.extents.height = height;
+
+    surface->initial_clip_rgn = NULL;
+    surface->had_simple_clip = FALSE;
+
+    device = _cairo_win32_device_get ();
+
+    _cairo_surface_init (&surface->win32.base,
+                        &cairo_win32_display_surface_backend,
+                        device,
+                        _cairo_content_from_format (format));
+
+    cairo_device_destroy (device);
+
+    return &surface->win32.base;
+
+ FAIL:
+    if (surface->bitmap) {
+       SelectObject (surface->win32.dc, surface->saved_dc_bitmap);
+       DeleteObject (surface->bitmap);
+       DeleteDC (surface->win32.dc);
+    }
+    free (surface);
+
+    return _cairo_surface_create_in_error (status);
+}
+
+static cairo_surface_t *
+_cairo_win32_display_surface_create_similar (void          *abstract_src,
+                                            cairo_content_t content,
+                                            int             width,
+                                            int             height)
+{
+    cairo_win32_display_surface_t *src = abstract_src;
+    cairo_format_t format = _cairo_format_from_content (content);
+    cairo_surface_t *new_surf = NULL;
+
+    /* We force a DIB always if:
+     * - we need alpha; or
+     * - the parent is a DIB; or
+     * - the parent is for printing (because we don't care about the
+     *   bit depth at that point)
+     *
+     * We also might end up with a DIB even if a DDB is requested if
+     * DDB creation failed due to out of memory.
+     */
+    if (!(src->is_dib || content & CAIRO_CONTENT_ALPHA)) {
+       /* try to create a ddb */
+       new_surf = cairo_win32_surface_create_with_ddb (src->win32.dc, CAIRO_FORMAT_RGB24, width, height);
+
+       if (new_surf->status)
+           new_surf = NULL;
+    }
+
+    if (new_surf == NULL) {
+       new_surf = _cairo_win32_display_surface_create_for_dc (src->win32.dc, format, width, height);
+    }
+
+    return new_surf;
+}
+
+static cairo_surface_t *
+_cairo_win32_display_surface_create_similar_image (void            *abstract_other,
+                                                  cairo_format_t format,
+                                                  int       width,
+                                                  int       height)
+{
+    cairo_win32_display_surface_t *surface = abstract_other;
+
+    surface = (cairo_win32_display_surface_t *)
+       _cairo_win32_display_surface_create_for_dc (surface->win32.dc,
+                                                   format, width, height);
+    if (surface->win32.base.status)
+       return &surface->win32.base;
+
+    return surface->image;
+}
+
+static cairo_status_t
+_cairo_win32_display_surface_finish (void *abstract_surface)
+{
+    cairo_win32_display_surface_t *surface = abstract_surface;
+
+    if (surface->image) {
+       /* Unhook ourselves first to avoid the double-unref from the image */
+       to_image_surface(surface->image)->parent = NULL;
+       cairo_surface_finish (surface->image);
+       cairo_surface_destroy (surface->image);
+    }
+
+    /* If we created the Bitmap and DC, destroy them */
+    if (surface->bitmap) {
+       SelectObject (surface->win32.dc, surface->saved_dc_bitmap);
+       DeleteObject (surface->bitmap);
+       DeleteDC (surface->win32.dc);
+    }
+
+    if (surface->initial_clip_rgn)
+       DeleteObject (surface->initial_clip_rgn);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_surface_t *
+_cairo_win32_display_surface_map_to_image (void                    *abstract_surface,
+                                          const cairo_rectangle_int_t   *extents)
+{
+    cairo_win32_display_surface_t *surface = abstract_surface;
+    cairo_status_t status;
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, surface->win32.base.unique_id));
+
+    if (surface->image)
+       goto done;
+
+    if (surface->fallback == NULL) {
+       surface->fallback =
+           _cairo_win32_display_surface_create_for_dc (surface->win32.dc,
+                                                       surface->win32.format,
+                                                       surface->win32.extents.width,
+                                                       surface->win32.extents.height);
+       if (unlikely (status = surface->fallback->status))
+           goto err;
+
+       if (!BitBlt (to_win32_surface(surface->fallback)->dc,
+                    0, 0,
+                    surface->win32.extents.width,
+                    surface->win32.extents.height,
+                    surface->win32.dc,
+                    0, 0,
+                    SRCCOPY)) {
+           status = _cairo_error (CAIRO_STATUS_DEVICE_ERROR);
+           goto err;
+       }
+    }
+
+    surface = to_win32_display_surface (surface->fallback);
+done:
+    GdiFlush();
+    return _cairo_image_surface_map_to_image (surface->image, extents);
+
+err:
+    cairo_surface_destroy (surface->fallback);
+    surface->fallback = NULL;
+
+    return _cairo_surface_create_in_error (status);
+}
+
+static cairo_int_status_t
+_cairo_win32_display_surface_unmap_image (void                    *abstract_surface,
+                                         cairo_image_surface_t   *image)
+{
+    cairo_win32_display_surface_t *surface = abstract_surface;
+
+    /* Delay the download until the next flush, which means we also need
+     * to make sure our sources rare flushed.
+     */
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, to_win32_surface(surface)->base.unique_id));
+
+    if (surface->fallback) {
+       cairo_rectangle_int_t r;
+
+       r.x = image->base.device_transform_inverse.x0;
+       r.y = image->base.device_transform_inverse.y0;
+       r.width  = image->width;
+       r.height = image->height;
+
+       TRACE ((stderr, "%s: adding damage (%d,%d)x(%d,%d)\n",
+               __FUNCTION__, r.x, r.y, r.width, r.height));
+       surface->fallback->damage =
+           _cairo_damage_add_rectangle (surface->fallback->damage, &r);
+    }
+
+    return CAIRO_INT_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_display_surface_flush (void *abstract_surface)
+{
+    cairo_win32_display_surface_t *surface = abstract_surface;
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, surface->win32.base.unique_id));
+    if (surface->fallback == NULL)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (surface->fallback->damage) {
+       cairo_win32_display_surface_t *fallback;
+       cairo_damage_t *damage;
+
+       damage = _cairo_damage_reduce (surface->fallback->damage);
+       surface->fallback->damage = NULL;
+
+       fallback = to_win32_display_surface (surface->fallback);
+       assert (fallback->image);
+
+       TRACE ((stderr, "%s: flushing damage x %d\n", __FUNCTION__,
+               damage->region ? cairo_region_num_rectangles (damage->region) : 0));
+
+       if (damage->status) {
+           if (!BitBlt (surface->win32.dc,
+                        0, 0,
+                        surface->win32.extents.width,
+                        surface->win32.extents.height,
+                        fallback->win32.dc,
+                        0, 0,
+                        SRCCOPY))
+               status = _cairo_win32_print_gdi_error (__FUNCTION__);
+       } else if (damage->region) {
+           int n = cairo_region_num_rectangles (damage->region), i;
+           for (i = 0; i < n; i++) {
+               cairo_rectangle_int_t rect;
+
+               cairo_region_get_rectangle (damage->region, i, &rect);
+               TRACE ((stderr, "%s: damage (%d,%d)x(%d,%d)\n", __FUNCTION__,
+                       rect.x, rect.y,
+                       rect.width, rect.height));
+               if (!BitBlt (surface->win32.dc,
+                            rect.x, rect.y,
+                            rect.width, rect.height,
+                            fallback->win32.dc,
+                            rect.x, rect.y,
+                            SRCCOPY)) {
+                   status = _cairo_win32_print_gdi_error (__FUNCTION__);
+                   break;
+               }
+           }
+       }
+       _cairo_damage_destroy (damage);
+    } else {
+       cairo_surface_destroy (surface->fallback);
+       surface->fallback = NULL;
+    }
+
+    return status;
+}
+
+static cairo_status_t
+_cairo_win32_display_surface_mark_dirty (void *abstract_surface,
+                                        int x, int y, int width, int height)
+{
+    _cairo_win32_display_surface_discard_fallback (abstract_surface);
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
+_cairo_win32_save_initial_clip (HDC hdc, cairo_win32_display_surface_t *surface)
+{
+    RECT rect;
+    int clipBoxType;
+    int gm;
+    XFORM saved_xform;
+
+    /* GetClipBox/GetClipRgn and friends interact badly with a world transform
+     * set.  GetClipBox returns values in logical (transformed) coordinates;
+     * it's unclear what GetClipRgn returns, because the region is empty in the
+     * case of a SIMPLEREGION clip, but I assume device (untransformed) coordinates.
+     * Similarly, IntersectClipRect works in logical units, whereas SelectClipRgn
+     * works in device units.
+     *
+     * So, avoid the whole mess and get rid of the world transform
+     * while we store our initial data and when we restore initial coordinates.
+     *
+     * XXX we may need to modify x/y by the ViewportOrg or WindowOrg
+     * here in GM_COMPATIBLE; unclear.
+     */
+    gm = GetGraphicsMode (hdc);
+    if (gm == GM_ADVANCED) {
+       GetWorldTransform (hdc, &saved_xform);
+       ModifyWorldTransform (hdc, NULL, MWT_IDENTITY);
+    }
+
+    clipBoxType = GetClipBox (hdc, &rect);
+    if (clipBoxType == ERROR) {
+       _cairo_win32_print_gdi_error (__FUNCTION__);
+       SetGraphicsMode (hdc, gm);
+       /* XXX: Can we make a more reasonable guess at the error cause here? */
+       return _cairo_error (CAIRO_STATUS_DEVICE_ERROR);
+    }
+
+    surface->win32.extents.x = rect.left;
+    surface->win32.extents.y = rect.top;
+    surface->win32.extents.width = rect.right - rect.left;
+    surface->win32.extents.height = rect.bottom - rect.top;
+
+    surface->initial_clip_rgn = NULL;
+    surface->had_simple_clip = FALSE;
+
+    if (clipBoxType == COMPLEXREGION) {
+       surface->initial_clip_rgn = CreateRectRgn (0, 0, 0, 0);
+       if (GetClipRgn (hdc, surface->initial_clip_rgn) <= 0) {
+           DeleteObject(surface->initial_clip_rgn);
+           surface->initial_clip_rgn = NULL;
+       }
+    } else if (clipBoxType == SIMPLEREGION) {
+       surface->had_simple_clip = TRUE;
+    }
+
+    if (gm == GM_ADVANCED)
+       SetWorldTransform (hdc, &saved_xform);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_status_t
+_cairo_win32_display_surface_set_clip (cairo_win32_display_surface_t *surface,
+                                      cairo_clip_t *clip)
+{
+    char stack[512];
+    cairo_rectangle_int_t extents;
+    int num_rects;
+    RGNDATA *data;
+    size_t data_size;
+    RECT *rects;
+    int i;
+    HRGN gdi_region;
+    cairo_status_t status;
+    cairo_region_t *region;
+
+    /* The semantics we want is that any clip set by cairo combines
+     * is intersected with the clip on device context that the
+     * surface was created for. To implement this, we need to
+     * save the original clip when first setting a clip on surface.
+     */
+
+    assert (_cairo_clip_is_region (clip));
+    region = _cairo_clip_get_region (clip);
+    if (region == NULL)
+       return CAIRO_STATUS_SUCCESS;
+
+    cairo_region_get_extents (region, &extents);
+    num_rects = cairo_region_num_rectangles (region);
+
+    /* XXX see notes in _cairo_win32_save_initial_clip --
+     * this code will interact badly with a HDC which had an initial
+     * world transform -- we should probably manually transform the
+     * region rects, because SelectClipRgn takes device units, not
+     * logical units (unlike IntersectClipRect).
+     */
+
+    data_size = sizeof (RGNDATAHEADER) + num_rects * sizeof (RECT);
+    if (data_size > sizeof (stack)) {
+       data = malloc (data_size);
+       if (!data)
+           return _cairo_error(CAIRO_STATUS_NO_MEMORY);
+    } else
+       data = (RGNDATA *)stack;
+
+    data->rdh.dwSize = sizeof (RGNDATAHEADER);
+    data->rdh.iType = RDH_RECTANGLES;
+    data->rdh.nCount = num_rects;
+    data->rdh.nRgnSize = num_rects * sizeof (RECT);
+    data->rdh.rcBound.left = extents.x;
+    data->rdh.rcBound.top = extents.y;
+    data->rdh.rcBound.right = extents.x + extents.width;
+    data->rdh.rcBound.bottom = extents.y + extents.height;
+
+    rects = (RECT *)data->Buffer;
+    for (i = 0; i < num_rects; i++) {
+       cairo_rectangle_int_t rect;
+
+       cairo_region_get_rectangle (region, i, &rect);
+
+       rects[i].left   = rect.x;
+       rects[i].top    = rect.y;
+       rects[i].right  = rect.x + rect.width;
+       rects[i].bottom = rect.y + rect.height;
+    }
+
+    gdi_region = ExtCreateRegion (NULL, data_size, data);
+    if ((char *)data != stack)
+       free (data);
+
+    if (!gdi_region)
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+    /* AND the new region into our DC */
+    status = CAIRO_STATUS_SUCCESS;
+    if (ExtSelectClipRgn (surface->win32.dc, gdi_region, RGN_AND) == ERROR)
+       status = _cairo_win32_print_gdi_error (__FUNCTION__);
+
+    DeleteObject (gdi_region);
+
+    return status;
+}
+
+void
+_cairo_win32_display_surface_unset_clip (cairo_win32_display_surface_t *surface)
+{
+    XFORM saved_xform;
+    int gm = GetGraphicsMode (surface->win32.dc);
+    if (gm == GM_ADVANCED) {
+       GetWorldTransform (surface->win32.dc, &saved_xform);
+       ModifyWorldTransform (surface->win32.dc, NULL, MWT_IDENTITY);
+    }
+
+    /* initial_clip_rgn will either be a real region or NULL (which means reset to no clip region) */
+    SelectClipRgn (surface->win32.dc, surface->initial_clip_rgn);
+
+    if (surface->had_simple_clip) {
+       /* then if we had a simple clip, intersect */
+       IntersectClipRect (surface->win32.dc,
+                          surface->win32.extents.x,
+                          surface->win32.extents.y,
+                          surface->win32.extents.x + surface->win32.extents.width,
+                          surface->win32.extents.y + surface->win32.extents.height);
+    }
+
+    if (gm == GM_ADVANCED)
+       SetWorldTransform (surface->win32.dc, &saved_xform);
+}
+
+void
+_cairo_win32_display_surface_discard_fallback (cairo_win32_display_surface_t *surface)
+{
+    if (surface->fallback) {
+       TRACE ((stderr, "%s (surface=%d)\n",
+               __FUNCTION__, surface->win32.base.unique_id));
+
+       cairo_surface_destroy (surface->fallback);
+       surface->fallback = NULL;
+    }
+}
+
+static cairo_int_status_t
+_cairo_win32_display_surface_paint (void                       *surface,
+                                   cairo_operator_t             op,
+                                   const cairo_pattern_t       *source,
+                                   const cairo_clip_t          *clip)
+{
+    cairo_win32_device_t *device = to_win32_device_from_surface (surface);
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, to_win32_surface(surface)->base.unique_id));
+
+    if (clip == NULL &&
+       (op == CAIRO_OPERATOR_SOURCE || op == CAIRO_OPERATOR_CLEAR))
+       _cairo_win32_display_surface_discard_fallback (surface);
+
+    return _cairo_compositor_paint (device->compositor,
+                                   surface, op, source, clip);
+}
+
+static cairo_int_status_t
+_cairo_win32_display_surface_mask (void                                *surface,
+                                  cairo_operator_t              op,
+                                  const cairo_pattern_t        *source,
+                                  const cairo_pattern_t        *mask,
+                                  const cairo_clip_t           *clip)
+{
+    cairo_win32_device_t *device = to_win32_device_from_surface (surface);
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, to_win32_surface(surface)->base.unique_id));
+
+    if (clip == NULL && op == CAIRO_OPERATOR_SOURCE)
+       _cairo_win32_display_surface_discard_fallback (surface);
+
+    return _cairo_compositor_mask (device->compositor,
+                                  surface, op, source, mask, clip);
+}
+
+static cairo_int_status_t
+_cairo_win32_display_surface_stroke (void                      *surface,
+                                    cairo_operator_t            op,
+                                    const cairo_pattern_t      *source,
+                                    const cairo_path_fixed_t   *path,
+                                    const cairo_stroke_style_t *style,
+                                    const cairo_matrix_t       *ctm,
+                                    const cairo_matrix_t       *ctm_inverse,
+                                    double                      tolerance,
+                                    cairo_antialias_t           antialias,
+                                    const cairo_clip_t         *clip)
+{
+    cairo_win32_device_t *device = to_win32_device_from_surface (surface);
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, to_win32_surface(surface)->base.unique_id));
+
+    return _cairo_compositor_stroke (device->compositor, surface,
+                                    op, source, path,
+                                    style, ctm, ctm_inverse,
+                                    tolerance, antialias, clip);
+}
+
+static cairo_int_status_t
+_cairo_win32_display_surface_fill (void                                *surface,
+                                  cairo_operator_t              op,
+                                  const cairo_pattern_t        *source,
+                                  const cairo_path_fixed_t     *path,
+                                  cairo_fill_rule_t             fill_rule,
+                                  double                        tolerance,
+                                  cairo_antialias_t             antialias,
+                                  const cairo_clip_t           *clip)
+{
+    cairo_win32_device_t *device = to_win32_device_from_surface (surface);
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, to_win32_surface(surface)->base.unique_id));
+
+    return _cairo_compositor_fill (device->compositor, surface,
+                                  op, source, path,
+                                  fill_rule, tolerance, antialias,
+                                  clip);
+}
+
+static cairo_int_status_t
+_cairo_win32_display_surface_glyphs (void                      *surface,
+                                    cairo_operator_t            op,
+                                    const cairo_pattern_t      *source,
+                                    cairo_glyph_t              *glyphs,
+                                    int                         num_glyphs,
+                                    cairo_scaled_font_t        *scaled_font,
+                                    const cairo_clip_t         *clip)
+{
+    cairo_win32_device_t *device = to_win32_device_from_surface (surface);
+
+    TRACE ((stderr, "%s (surface=%d)\n",
+           __FUNCTION__, to_win32_surface(surface)->base.unique_id));
+
+    return _cairo_compositor_glyphs (device->compositor, surface,
+                                    op, source,
+                                    glyphs, num_glyphs, scaled_font,
+                                    clip);
+}
+
+static const cairo_surface_backend_t cairo_win32_display_surface_backend = {
+    CAIRO_SURFACE_TYPE_WIN32,
+    _cairo_win32_display_surface_finish,
+
+    _cairo_default_context_create,
+
+    _cairo_win32_display_surface_create_similar,
+    _cairo_win32_display_surface_create_similar_image,
+    _cairo_win32_display_surface_map_to_image,
+    _cairo_win32_display_surface_unmap_image,
+
+    _cairo_surface_default_source,
+    _cairo_surface_default_acquire_source_image,
+    _cairo_surface_default_release_source_image,
+    NULL,  /* snapshot */
+
+    NULL, /* copy_page */
+    NULL, /* show_page */
+
+    _cairo_win32_surface_get_extents,
+    NULL, /* get_font_options */
+
+    _cairo_win32_display_surface_flush,
+    _cairo_win32_display_surface_mark_dirty,
+
+    _cairo_win32_display_surface_paint,
+    _cairo_win32_display_surface_mask,
+    _cairo_win32_display_surface_stroke,
+    _cairo_win32_display_surface_fill,
+    NULL, /* fill/stroke */
+    _cairo_win32_display_surface_glyphs,
+};
+
+/* Notes:
+ *
+ * Win32 alpha-understanding functions
+ *
+ * BitBlt - will copy full 32 bits from a 32bpp DIB to result
+ *          (so it's safe to use for ARGB32->ARGB32 SOURCE blits)
+ *          (but not safe going RGB24->ARGB32, if RGB24 is also represented
+ *           as a 32bpp DIB, since the alpha isn't discarded!)
+ *
+ * AlphaBlend - if both the source and dest have alpha, even if AC_SRC_ALPHA isn't set,
+ *              it will still copy over the src alpha, because the SCA value (255) will be
+ *              multiplied by all the src components.
+ */
+
+/**
+ * cairo_win32_surface_create:
+ * @hdc: the DC to create a surface for
+ *
+ * Creates a cairo surface that targets the given DC.  The DC will be
+ * queried for its initial clip extents, and this will be used as the
+ * size of the cairo surface.  The resulting surface will always be of
+ * format %CAIRO_FORMAT_RGB24; should you need another surface format,
+ * you will need to create one through
+ * cairo_win32_surface_create_with_dib().
+ *
+ * Return value: the newly created surface
+ *
+ * Since: 1.0
+ **/
+cairo_surface_t *
+cairo_win32_surface_create (HDC hdc)
+{
+    cairo_win32_display_surface_t *surface;
+
+    cairo_format_t format;
+    cairo_status_t status;
+    cairo_device_t *device;
+
+    /* Assume that everything coming in as a HDC is RGB24 */
+    format = CAIRO_FORMAT_RGB24;
+
+    surface = malloc (sizeof (*surface));
+    if (surface == NULL)
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+    status = _cairo_win32_save_initial_clip (hdc, surface);
+    if (status) {
+       free (surface);
+       return _cairo_surface_create_in_error (status);
+    }
+
+    surface->image = NULL;
+    surface->fallback = NULL;
+    surface->win32.format = format;
+
+    surface->win32.dc = hdc;
+    surface->bitmap = NULL;
+    surface->is_dib = FALSE;
+    surface->saved_dc_bitmap = NULL;
+
+    surface->win32.flags = _cairo_win32_flags_for_dc (surface->win32.dc);
+
+    device = _cairo_win32_device_get ();
+
+    _cairo_surface_init (&surface->win32.base,
+                        &cairo_win32_display_surface_backend,
+                        device,
+                        _cairo_content_from_format (format));
+
+    cairo_device_destroy (device);
+
+    return &surface->win32.base;
+}
+
+/**
+ * cairo_win32_surface_create_with_dib:
+ * @format: format of pixels in the surface to create
+ * @width: width of the surface, in pixels
+ * @height: height of the surface, in pixels
+ *
+ * Creates a device-independent-bitmap surface not associated with
+ * any particular existing surface or device context. The created
+ * bitmap will be uninitialized.
+ *
+ * Return value: the newly created surface
+ *
+ * Since: 1.2
+ **/
+cairo_surface_t *
+cairo_win32_surface_create_with_dib (cairo_format_t format,
+                                    int            width,
+                                    int            height)
+{
+    if (! CAIRO_FORMAT_VALID (format))
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
+
+    return _cairo_win32_display_surface_create_for_dc (NULL, format, width, height);
+}
+
+/**
+ * cairo_win32_surface_create_with_ddb:
+ * @hdc: a DC compatible with the surface to create
+ * @format: format of pixels in the surface to create
+ * @width: width of the surface, in pixels
+ * @height: height of the surface, in pixels
+ *
+ * Creates a device-dependent-bitmap surface not associated with
+ * any particular existing surface or device context. The created
+ * bitmap will be uninitialized.
+ *
+ * Return value: the newly created surface
+ *
+ * Since: 1.4
+ **/
+cairo_surface_t *
+cairo_win32_surface_create_with_ddb (HDC hdc,
+                                    cairo_format_t format,
+                                    int width,
+                                    int height)
+{
+    cairo_win32_display_surface_t *new_surf;
+    HBITMAP ddb;
+    HDC screen_dc, ddb_dc;
+    HBITMAP saved_dc_bitmap;
+
+    if (format != CAIRO_FORMAT_RGB24)
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
+/* XXX handle these eventually
+       format != CAIRO_FORMAT_A8 ||
+       format != CAIRO_FORMAT_A1)
+*/
+
+    if (!hdc) {
+       screen_dc = GetDC (NULL);
+       hdc = screen_dc;
+    } else {
+       screen_dc = NULL;
+    }
+
+    ddb_dc = CreateCompatibleDC (hdc);
+    if (ddb_dc == NULL) {
+       new_surf = (cairo_win32_display_surface_t*) _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+       goto FINISH;
+    }
+
+    ddb = CreateCompatibleBitmap (hdc, width, height);
+    if (ddb == NULL) {
+       DeleteDC (ddb_dc);
+
+       /* Note that if an app actually does hit this out of memory
+        * condition, it's going to have lots of other issues, as
+        * video memory is probably exhausted.  However, it can often
+        * continue using DIBs instead of DDBs.
+        */
+       new_surf = (cairo_win32_display_surface_t*) _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+       goto FINISH;
+    }
+
+    saved_dc_bitmap = SelectObject (ddb_dc, ddb);
+
+    new_surf = (cairo_win32_display_surface_t*) cairo_win32_surface_create (ddb_dc);
+    new_surf->bitmap = ddb;
+    new_surf->saved_dc_bitmap = saved_dc_bitmap;
+    new_surf->is_dib = FALSE;
+
+FINISH:
+    if (screen_dc)
+       ReleaseDC (NULL, screen_dc);
+
+    return &new_surf->win32.base;
+}
diff --git a/src/win32/cairo-win32-font.c b/src/win32/cairo-win32-font.c
new file mode 100644 (file)
index 0000000..a65d81b
--- /dev/null
@@ -0,0 +1,2313 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ */
+
+#define WIN32_LEAN_AND_MEAN
+/* We require Windows 2000 features such as GetGlyphIndices */
+#if !defined(WINVER) || (WINVER < 0x0500)
+# define WINVER 0x0500
+#endif
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
+# define _WIN32_WINNT 0x0500
+#endif
+
+#include "cairoint.h"
+
+#include "cairo-win32-private.h"
+
+#include "cairo-array-private.h"
+#include "cairo-error-private.h"
+#include "cairo-image-surface-private.h"
+#include "cairo-pattern-private.h"
+#include "cairo-scaled-font-subsets-private.h"
+
+#include <wchar.h>
+
+#ifndef SPI_GETFONTSMOOTHINGTYPE
+#define SPI_GETFONTSMOOTHINGTYPE 0x200a
+#endif
+#ifndef FE_FONTSMOOTHINGCLEARTYPE
+#define FE_FONTSMOOTHINGCLEARTYPE 2
+#endif
+#ifndef CLEARTYPE_QUALITY
+#define CLEARTYPE_QUALITY 5
+#endif
+#ifndef TT_PRIM_CSPLINE
+#define TT_PRIM_CSPLINE 3
+#endif
+
+#define CMAP_TAG 0x70616d63
+
+/**
+ * SECTION:cairo-win32-fonts
+ * @Title: Win32 Fonts
+ * @Short_Description: Font support for Microsoft Windows
+ * @See_Also: #cairo_font_face_t
+ *
+ * The Microsoft Windows font backend is primarily used to render text on
+ * Microsoft Windows systems.
+ **/
+
+/**
+ * CAIRO_HAS_WIN32_FONT:
+ *
+ * Defined if the Microsoft Windows font backend is available.
+ * This macro can be used to conditionally compile backend-specific code.
+ *
+ * Since: 1.8
+ **/
+
+const cairo_scaled_font_backend_t _cairo_win32_scaled_font_backend;
+
+typedef struct {
+    cairo_scaled_font_t base;
+
+    LOGFONTW logfont;
+
+    BYTE quality;
+
+    /* We do drawing and metrics computation in a "logical space" which
+     * is similar to font space, except that it is scaled by a factor
+     * of the (desired font size) * (WIN32_FONT_LOGICAL_SCALE). The multiplication
+     * by WIN32_FONT_LOGICAL_SCALE allows for sub-pixel precision.
+     */
+    double logical_scale;
+
+    /* The size we should actually request the font at from Windows; differs
+     * from the logical_scale because it is quantized for orthogonal
+     * transformations
+     */
+    double logical_size;
+
+    /* Transformations from device <=> logical space
+     */
+    cairo_matrix_t logical_to_device;
+    cairo_matrix_t device_to_logical;
+
+    /* We special case combinations of 90-degree-rotations, scales and
+     * flips ... that is transformations that take the axes to the
+     * axes. If preserve_axes is true, then swap_axes/swap_x/swap_y
+     * encode the 8 possibilities for orientation (4 rotation angles with
+     * and without a flip), and scale_x, scale_y the scale components.
+     */
+    cairo_bool_t preserve_axes;
+    cairo_bool_t swap_axes;
+    cairo_bool_t swap_x;
+    cairo_bool_t swap_y;
+    double x_scale;
+    double y_scale;
+
+    /* The size of the design unit of the font
+     */
+    int em_square;
+
+    HFONT scaled_hfont;
+    HFONT unscaled_hfont;
+
+    cairo_bool_t is_bitmap;
+    cairo_bool_t is_type1;
+    cairo_bool_t delete_scaled_hfont;
+    cairo_bool_t has_type1_notdef_index;
+    unsigned long type1_notdef_index;
+} cairo_win32_scaled_font_t;
+
+static cairo_status_t
+_cairo_win32_scaled_font_set_metrics (cairo_win32_scaled_font_t *scaled_font);
+
+static cairo_status_t
+_cairo_win32_scaled_font_init_glyph_metrics (cairo_win32_scaled_font_t *scaled_font,
+                                            cairo_scaled_glyph_t      *scaled_glyph);
+
+static cairo_status_t
+_cairo_win32_scaled_font_init_glyph_surface (cairo_win32_scaled_font_t *scaled_font,
+                                             cairo_scaled_glyph_t      *scaled_glyph);
+
+static cairo_status_t
+_cairo_win32_scaled_font_init_glyph_path (cairo_win32_scaled_font_t *scaled_font,
+                                         cairo_scaled_glyph_t      *scaled_glyph);
+
+static void
+_cairo_win32_font_face_destroy (void *abstract_face);
+
+
+#define NEARLY_ZERO(d) (fabs(d) < (1. / 65536.))
+
+static HDC
+_get_global_font_dc (void)
+{
+    static HDC hdc;
+
+    if (!hdc) {
+       hdc = CreateCompatibleDC (NULL);
+       if (!hdc) {
+           _cairo_win32_print_gdi_error ("_get_global_font_dc");
+           return NULL;
+       }
+
+       if (!SetGraphicsMode (hdc, GM_ADVANCED)) {
+           _cairo_win32_print_gdi_error ("_get_global_font_dc");
+           DeleteDC (hdc);
+           return NULL;
+       }
+    }
+
+    return hdc;
+}
+
+static cairo_status_t
+_compute_transform (cairo_win32_scaled_font_t *scaled_font,
+                   cairo_matrix_t            *sc)
+{
+    cairo_status_t status;
+
+    if (NEARLY_ZERO (sc->yx) && NEARLY_ZERO (sc->xy) &&
+           !NEARLY_ZERO(sc->xx) && !NEARLY_ZERO(sc->yy)) {
+       scaled_font->preserve_axes = TRUE;
+       scaled_font->x_scale = sc->xx;
+       scaled_font->swap_x = (sc->xx < 0);
+       scaled_font->y_scale = sc->yy;
+       scaled_font->swap_y = (sc->yy < 0);
+       scaled_font->swap_axes = FALSE;
+
+    } else if (NEARLY_ZERO (sc->xx) && NEARLY_ZERO (sc->yy) &&
+           !NEARLY_ZERO(sc->yx) && !NEARLY_ZERO(sc->xy)) {
+       scaled_font->preserve_axes = TRUE;
+       scaled_font->x_scale = sc->yx;
+       scaled_font->swap_x = (sc->yx < 0);
+       scaled_font->y_scale = sc->xy;
+       scaled_font->swap_y = (sc->xy < 0);
+       scaled_font->swap_axes = TRUE;
+
+    } else {
+       scaled_font->preserve_axes = FALSE;
+       scaled_font->swap_x = scaled_font->swap_y = scaled_font->swap_axes = FALSE;
+    }
+
+    if (scaled_font->preserve_axes) {
+       if (scaled_font->swap_x)
+           scaled_font->x_scale = - scaled_font->x_scale;
+       if (scaled_font->swap_y)
+           scaled_font->y_scale = - scaled_font->y_scale;
+
+       scaled_font->logical_scale = WIN32_FONT_LOGICAL_SCALE * scaled_font->y_scale;
+       scaled_font->logical_size = WIN32_FONT_LOGICAL_SCALE *
+                                    _cairo_lround (scaled_font->y_scale);
+    }
+
+    /* The font matrix has x and y "scale" components which we extract and
+     * use as character scale values.
+     */
+    cairo_matrix_init (&scaled_font->logical_to_device,
+                      sc->xx, sc->yx, sc->xy, sc->yy, 0, 0);
+
+    if (!scaled_font->preserve_axes) {
+       status = _cairo_matrix_compute_basis_scale_factors (&scaled_font->logical_to_device,
+                                                     &scaled_font->x_scale, &scaled_font->y_scale,
+                                                     TRUE);    /* XXX: Handle vertical text */
+       if (status)
+           return status;
+
+       scaled_font->logical_size =
+           _cairo_lround (WIN32_FONT_LOGICAL_SCALE * scaled_font->y_scale);
+       scaled_font->logical_scale =
+           WIN32_FONT_LOGICAL_SCALE * scaled_font->y_scale;
+    }
+
+    cairo_matrix_scale (&scaled_font->logical_to_device,
+                       1.0 / scaled_font->logical_scale,
+                       1.0 / scaled_font->logical_scale);
+
+    scaled_font->device_to_logical = scaled_font->logical_to_device;
+
+    status = cairo_matrix_invert (&scaled_font->device_to_logical);
+    if (status)
+       cairo_matrix_init_identity (&scaled_font->device_to_logical);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_bool_t
+_have_cleartype_quality (void)
+{
+    OSVERSIONINFO version_info;
+
+    version_info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
+
+    if (!GetVersionEx (&version_info)) {
+       _cairo_win32_print_gdi_error ("_have_cleartype_quality");
+       return FALSE;
+    }
+
+    return (version_info.dwMajorVersion > 5 ||
+           (version_info.dwMajorVersion == 5 &&
+            version_info.dwMinorVersion >= 1));        /* XP or newer */
+}
+
+static BYTE
+_get_system_quality (void)
+{
+    BOOL font_smoothing;
+    UINT smoothing_type;
+
+    if (!SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &font_smoothing, 0)) {
+       _cairo_win32_print_gdi_error ("_get_system_quality");
+       return DEFAULT_QUALITY;
+    }
+
+    if (font_smoothing) {
+       if (_have_cleartype_quality ()) {
+           if (!SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE,
+                                      0, &smoothing_type, 0)) {
+               _cairo_win32_print_gdi_error ("_get_system_quality");
+               return DEFAULT_QUALITY;
+           }
+
+           if (smoothing_type == FE_FONTSMOOTHINGCLEARTYPE)
+               return CLEARTYPE_QUALITY;
+       }
+
+       return ANTIALIASED_QUALITY;
+    } else {
+       return DEFAULT_QUALITY;
+    }
+}
+
+/* If face_hfont is non-%NULL then font_matrix must be a simple scale by some
+ * factor S, ctm must be the identity, logfont->lfHeight must be -S,
+ * logfont->lfWidth, logfont->lfEscapement, logfont->lfOrientation must
+ * all be 0, and face_hfont is the result of calling CreateFontIndirectW on
+ * logfont.
+ */
+static cairo_status_t
+_win32_scaled_font_create (LOGFONTW                   *logfont,
+                          HFONT                      face_hfont,
+                          cairo_font_face_t          *font_face,
+                          const cairo_matrix_t       *font_matrix,
+                          const cairo_matrix_t       *ctm,
+                          const cairo_font_options_t *options,
+                          cairo_scaled_font_t       **font_out)
+{
+    HDC hdc;
+    cairo_win32_scaled_font_t *f;
+    cairo_matrix_t scale;
+    cairo_status_t status;
+
+    hdc = _get_global_font_dc ();
+    if (hdc == NULL)
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+    f = malloc (sizeof(cairo_win32_scaled_font_t));
+    if (f == NULL)
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+    f->logfont = *logfont;
+
+    /* We don't have any control over the hinting style or subpixel
+     * order in the Win32 font API, so we ignore those parts of
+     * cairo_font_options_t. We use the 'antialias' field to set
+     * the 'quality'.
+     *
+     * XXX: The other option we could pay attention to, but don't
+     *      here is the hint_metrics options.
+     */
+    if (options->antialias == CAIRO_ANTIALIAS_DEFAULT)
+       f->quality = _get_system_quality ();
+    else {
+       switch (options->antialias) {
+       case CAIRO_ANTIALIAS_NONE:
+           f->quality = NONANTIALIASED_QUALITY;
+           break;
+       case CAIRO_ANTIALIAS_GRAY:
+       case CAIRO_ANTIALIAS_FAST:
+       case CAIRO_ANTIALIAS_GOOD:
+           f->quality = ANTIALIASED_QUALITY;
+           break;
+       case CAIRO_ANTIALIAS_SUBPIXEL:
+       case CAIRO_ANTIALIAS_BEST:
+           if (_have_cleartype_quality ())
+               f->quality = CLEARTYPE_QUALITY;
+           else
+               f->quality = ANTIALIASED_QUALITY;
+           break;
+       case CAIRO_ANTIALIAS_DEFAULT:
+           ASSERT_NOT_REACHED;
+       }
+    }
+
+    f->em_square = 0;
+    f->scaled_hfont = NULL;
+    f->unscaled_hfont = NULL;
+    f->has_type1_notdef_index = FALSE;
+
+    if (f->quality == logfont->lfQuality ||
+        (logfont->lfQuality == DEFAULT_QUALITY &&
+         options->antialias == CAIRO_ANTIALIAS_DEFAULT)) {
+        /* If face_hfont is non-NULL, then we can use it to avoid creating our
+         * own --- because the constraints on face_hfont mentioned above
+         * guarantee it was created in exactly the same way that
+         * _win32_scaled_font_get_scaled_hfont would create it.
+         */
+        f->scaled_hfont = face_hfont;
+    }
+    /* don't delete the hfont if we're using the one passed in to us */
+    f->delete_scaled_hfont = !f->scaled_hfont;
+
+    cairo_matrix_multiply (&scale, font_matrix, ctm);
+    status = _compute_transform (f, &scale);
+    if (status)
+       goto FAIL;
+
+    status = _cairo_scaled_font_init (&f->base, font_face,
+                                     font_matrix, ctm, options,
+                                     &_cairo_win32_scaled_font_backend);
+    if (status)
+       goto FAIL;
+
+    status = _cairo_win32_scaled_font_set_metrics (f);
+    if (status) {
+       _cairo_scaled_font_fini (&f->base);
+       goto FAIL;
+    }
+
+    *font_out = &f->base;
+    return CAIRO_STATUS_SUCCESS;
+
+ FAIL:
+    free (f);
+    return status;
+}
+
+static cairo_status_t
+_win32_scaled_font_set_world_transform (cairo_win32_scaled_font_t *scaled_font,
+                                       HDC                        hdc)
+{
+    XFORM xform;
+
+    _cairo_matrix_to_win32_xform (&scaled_font->logical_to_device, &xform);
+
+    if (!SetWorldTransform (hdc, &xform))
+       return _cairo_win32_print_gdi_error ("_win32_scaled_font_set_world_transform");
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_win32_scaled_font_set_identity_transform (HDC hdc)
+{
+    if (!ModifyWorldTransform (hdc, NULL, MWT_IDENTITY))
+       return _cairo_win32_print_gdi_error ("_win32_scaled_font_set_identity_transform");
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_win32_scaled_font_get_scaled_hfont (cairo_win32_scaled_font_t *scaled_font,
+                                    HFONT *hfont_out)
+{
+    if (!scaled_font->scaled_hfont) {
+       LOGFONTW logfont = scaled_font->logfont;
+       logfont.lfHeight = -scaled_font->logical_size;
+       logfont.lfWidth = 0;
+       logfont.lfEscapement = 0;
+       logfont.lfOrientation = 0;
+       logfont.lfQuality = scaled_font->quality;
+
+       scaled_font->scaled_hfont = CreateFontIndirectW (&logfont);
+       if (!scaled_font->scaled_hfont)
+           return _cairo_win32_print_gdi_error ("_win32_scaled_font_get_scaled_hfont");
+    }
+
+    *hfont_out = scaled_font->scaled_hfont;
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_win32_scaled_font_get_unscaled_hfont (cairo_win32_scaled_font_t *scaled_font,
+                                      HDC                        hdc,
+                                      HFONT                     *hfont_out)
+{
+    if (scaled_font->unscaled_hfont == NULL) {
+       OUTLINETEXTMETRIC *otm;
+       unsigned int otm_size;
+       HFONT scaled_hfont;
+       LOGFONTW logfont;
+       cairo_status_t status;
+
+       status = _win32_scaled_font_get_scaled_hfont (scaled_font,
+                                                     &scaled_hfont);
+       if (status)
+           return status;
+
+       if (! SelectObject (hdc, scaled_hfont))
+           return _cairo_win32_print_gdi_error ("_win32_scaled_font_get_unscaled_hfont:SelectObject");
+
+       otm_size = GetOutlineTextMetrics (hdc, 0, NULL);
+       if (! otm_size)
+           return _cairo_win32_print_gdi_error ("_win32_scaled_font_get_unscaled_hfont:GetOutlineTextMetrics");
+
+       otm = malloc (otm_size);
+       if (otm == NULL)
+           return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+       if (! GetOutlineTextMetrics (hdc, otm_size, otm)) {
+           status = _cairo_win32_print_gdi_error ("_win32_scaled_font_get_unscaled_hfont:GetOutlineTextMetrics");
+           free (otm);
+           return status;
+       }
+
+       scaled_font->em_square = otm->otmEMSquare;
+       free (otm);
+
+       logfont = scaled_font->logfont;
+       logfont.lfHeight = -scaled_font->em_square;
+       logfont.lfWidth = 0;
+       logfont.lfEscapement = 0;
+       logfont.lfOrientation = 0;
+       logfont.lfQuality = scaled_font->quality;
+
+       scaled_font->unscaled_hfont = CreateFontIndirectW (&logfont);
+       if (! scaled_font->unscaled_hfont)
+           return _cairo_win32_print_gdi_error ("_win32_scaled_font_get_unscaled_hfont:CreateIndirect");
+    }
+
+    *hfont_out = scaled_font->unscaled_hfont;
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_scaled_font_select_unscaled_font (cairo_scaled_font_t *scaled_font,
+                                              HDC                  hdc)
+{
+    cairo_status_t status;
+    HFONT hfont;
+    HFONT old_hfont = NULL;
+
+    status = _win32_scaled_font_get_unscaled_hfont ((cairo_win32_scaled_font_t *)scaled_font, hdc, &hfont);
+    if (status)
+       return status;
+
+    old_hfont = SelectObject (hdc, hfont);
+    if (!old_hfont)
+       return _cairo_win32_print_gdi_error ("_cairo_win32_scaled_font_select_unscaled_font");
+
+    status = _win32_scaled_font_set_identity_transform (hdc);
+    if (status) {
+       SelectObject (hdc, old_hfont);
+       return status;
+    }
+
+    SetMapMode (hdc, MM_TEXT);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+cairo_bool_t
+_cairo_win32_scaled_font_is_type1 (cairo_scaled_font_t *scaled_font)
+{
+    cairo_win32_scaled_font_t *win32_scaled_font;
+
+    win32_scaled_font = (cairo_win32_scaled_font_t *) scaled_font;
+
+    return win32_scaled_font->is_type1;
+}
+
+cairo_bool_t
+_cairo_win32_scaled_font_is_bitmap (cairo_scaled_font_t *scaled_font)
+{
+    cairo_win32_scaled_font_t *win32_scaled_font;
+
+    win32_scaled_font = (cairo_win32_scaled_font_t *) scaled_font;
+
+    return win32_scaled_font->is_bitmap;
+}
+
+static void
+_cairo_win32_scaled_font_done_unscaled_font (cairo_scaled_font_t *scaled_font)
+{
+}
+
+/* implement the font backend interface */
+
+static cairo_status_t
+_cairo_win32_font_face_create_for_toy (cairo_toy_font_face_t   *toy_face,
+                                      cairo_font_face_t      **font_face)
+{
+    LOGFONTW logfont;
+    uint16_t *face_name;
+    int face_name_len;
+    cairo_status_t status;
+
+    status = _cairo_utf8_to_utf16 (toy_face->family, -1,
+                                  &face_name, &face_name_len);
+    if (status)
+       return status;
+
+    if (face_name_len > LF_FACESIZE - 1)
+       face_name_len = LF_FACESIZE - 1;
+
+    memcpy (logfont.lfFaceName, face_name, sizeof (uint16_t) * face_name_len);
+    logfont.lfFaceName[face_name_len] = 0;
+    free (face_name);
+
+    logfont.lfHeight = 0;      /* filled in later */
+    logfont.lfWidth = 0;       /* filled in later */
+    logfont.lfEscapement = 0;  /* filled in later */
+    logfont.lfOrientation = 0; /* filled in later */
+
+    switch (toy_face->weight) {
+    case CAIRO_FONT_WEIGHT_NORMAL:
+    default:
+       logfont.lfWeight = FW_NORMAL;
+       break;
+    case CAIRO_FONT_WEIGHT_BOLD:
+       logfont.lfWeight = FW_BOLD;
+       break;
+    }
+
+    switch (toy_face->slant) {
+    case CAIRO_FONT_SLANT_NORMAL:
+    default:
+       logfont.lfItalic = FALSE;
+       break;
+    case CAIRO_FONT_SLANT_ITALIC:
+    case CAIRO_FONT_SLANT_OBLIQUE:
+       logfont.lfItalic = TRUE;
+       break;
+    }
+
+    logfont.lfUnderline = FALSE;
+    logfont.lfStrikeOut = FALSE;
+    /* The docs for LOGFONT discourage using this, since the
+     * interpretation is locale-specific, but it's not clear what
+     * would be a better alternative.
+     */
+    logfont.lfCharSet = DEFAULT_CHARSET;
+    logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
+    logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+    logfont.lfQuality = DEFAULT_QUALITY; /* filled in later */
+    logfont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
+
+    *font_face = cairo_win32_font_face_create_for_logfontw (&logfont);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_win32_scaled_font_fini (void *abstract_font)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+
+    if (scaled_font == NULL)
+       return;
+
+    if (scaled_font->scaled_hfont && scaled_font->delete_scaled_hfont)
+       DeleteObject (scaled_font->scaled_hfont);
+
+    if (scaled_font->unscaled_hfont)
+       DeleteObject (scaled_font->unscaled_hfont);
+}
+
+static cairo_int_status_t
+_cairo_win32_scaled_font_type1_text_to_glyphs (cairo_win32_scaled_font_t *scaled_font,
+                                              double                     x,
+                                              double                     y,
+                                              const char                *utf8,
+                                              cairo_glyph_t            **glyphs,
+                                              int                       *num_glyphs)
+{
+    uint16_t *utf16;
+    int n16;
+    int i;
+    WORD *glyph_indices = NULL;
+    cairo_status_t status;
+    double x_pos, y_pos;
+    HDC hdc = NULL;
+    cairo_matrix_t mat;
+
+    status = _cairo_utf8_to_utf16 (utf8, -1, &utf16, &n16);
+    if (status)
+       return status;
+
+    glyph_indices = _cairo_malloc_ab (n16 + 1, sizeof (WORD));
+    if (!glyph_indices) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto FAIL1;
+    }
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+    if (status)
+       goto FAIL2;
+
+    if (GetGlyphIndicesW (hdc, utf16, n16, glyph_indices, 0) == GDI_ERROR) {
+       status = _cairo_win32_print_gdi_error ("_cairo_win32_scaled_font_type1_text_to_glyphs:GetGlyphIndicesW");
+       goto FAIL3;
+    }
+
+    *num_glyphs = n16;
+    *glyphs = _cairo_malloc_ab (n16, sizeof (cairo_glyph_t));
+    if (!*glyphs) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto FAIL3;
+    }
+
+    x_pos = x;
+    y_pos = y;
+
+    mat = scaled_font->base.ctm;
+    status = cairo_matrix_invert (&mat);
+    assert (status == CAIRO_STATUS_SUCCESS);
+
+    _cairo_scaled_font_freeze_cache (&scaled_font->base);
+
+    for (i = 0; i < n16; i++) {
+       cairo_scaled_glyph_t *scaled_glyph;
+
+       (*glyphs)[i].index = glyph_indices[i];
+       (*glyphs)[i].x = x_pos;
+       (*glyphs)[i].y = y_pos;
+
+       status = _cairo_scaled_glyph_lookup (&scaled_font->base,
+                                            glyph_indices[i],
+                                            CAIRO_SCALED_GLYPH_INFO_METRICS,
+                                            &scaled_glyph);
+       if (status) {
+           free (*glyphs);
+           *glyphs = NULL;
+           break;
+       }
+
+       x = scaled_glyph->x_advance;
+       y = scaled_glyph->y_advance;
+       cairo_matrix_transform_distance (&mat, &x, &y);
+       x_pos += x;
+       y_pos += y;
+    }
+
+    _cairo_scaled_font_thaw_cache (&scaled_font->base);
+
+FAIL3:
+    cairo_win32_scaled_font_done_font (&scaled_font->base);
+FAIL2:
+    free (glyph_indices);
+FAIL1:
+    free (utf16);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_scaled_font_text_to_glyphs (void          *abstract_font,
+                                        double         x,
+                                        double         y,
+                                        const char     *utf8,
+                                        cairo_glyph_t **glyphs,
+                                        int            *num_glyphs)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    uint16_t *utf16;
+    int n16;
+    GCP_RESULTSW gcp_results;
+    unsigned int buffer_size, i;
+    WCHAR *glyph_indices = NULL;
+    int *dx = NULL;
+    cairo_status_t status;
+    double x_pos, y_pos;
+    double x_incr, y_incr;
+    HDC hdc = NULL;
+
+    /* GetCharacterPlacement() returns utf16 instead of glyph indices
+     * for Type 1 fonts. Use GetGlyphIndices for Type 1 fonts. */
+    if (scaled_font->is_type1)
+        return _cairo_win32_scaled_font_type1_text_to_glyphs (scaled_font,
+                                                              x,
+                                                              y,
+                                                              utf8,
+                                                              glyphs,
+                                                              num_glyphs);
+
+    /* Compute a vector in user space along the baseline of length one logical space unit */
+    x_incr = 1;
+    y_incr = 0;
+    cairo_matrix_transform_distance (&scaled_font->base.font_matrix, &x_incr, &y_incr);
+    x_incr /= scaled_font->logical_scale;
+    y_incr /= scaled_font->logical_scale;
+
+    status = _cairo_utf8_to_utf16 (utf8, -1, &utf16, &n16);
+    if (status)
+       return status;
+
+    gcp_results.lStructSize = sizeof (GCP_RESULTS);
+    gcp_results.lpOutString = NULL;
+    gcp_results.lpOrder = NULL;
+    gcp_results.lpCaretPos = NULL;
+    gcp_results.lpClass = NULL;
+
+    buffer_size = MAX (n16 * 1.2, 16);         /* Initially guess number of chars plus a few */
+    if (buffer_size > INT_MAX) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto FAIL1;
+    }
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+    if (status)
+       goto FAIL1;
+
+    while (TRUE) {
+       free (glyph_indices);
+       glyph_indices = NULL;
+
+       free (dx);
+       dx = NULL;
+
+       glyph_indices = _cairo_malloc_ab (buffer_size, sizeof (WCHAR));
+       dx = _cairo_malloc_ab (buffer_size, sizeof (int));
+       if (!glyph_indices || !dx) {
+           status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+           goto FAIL2;
+       }
+
+       gcp_results.nGlyphs = buffer_size;
+       gcp_results.lpDx = dx;
+       gcp_results.lpGlyphs = glyph_indices;
+
+       if (!GetCharacterPlacementW (hdc, utf16, n16,
+                                    0,
+                                    &gcp_results,
+                                    GCP_DIACRITIC | GCP_LIGATE | GCP_GLYPHSHAPE | GCP_REORDER)) {
+           status = _cairo_win32_print_gdi_error ("_cairo_win32_scaled_font_text_to_glyphs");
+           goto FAIL2;
+       }
+
+       if (gcp_results.lpDx && gcp_results.lpGlyphs)
+           break;
+
+       /* Too small a buffer, try again */
+
+       buffer_size += buffer_size / 2;
+       if (buffer_size > INT_MAX) {
+           status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+           goto FAIL2;
+       }
+    }
+
+    *num_glyphs = gcp_results.nGlyphs;
+    *glyphs = _cairo_malloc_ab (gcp_results.nGlyphs, sizeof (cairo_glyph_t));
+    if (!*glyphs) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto FAIL2;
+    }
+
+    x_pos = x;
+    y_pos = y;
+
+    for (i = 0; i < gcp_results.nGlyphs; i++) {
+       (*glyphs)[i].index = glyph_indices[i];
+       (*glyphs)[i].x = x_pos ;
+       (*glyphs)[i].y = y_pos;
+
+       x_pos += x_incr * dx[i];
+       y_pos += y_incr * dx[i];
+    }
+
+ FAIL2:
+    free (glyph_indices);
+    free (dx);
+
+    cairo_win32_scaled_font_done_font (&scaled_font->base);
+
+ FAIL1:
+    free (utf16);
+
+    return status;
+}
+
+static unsigned long
+_cairo_win32_scaled_font_ucs4_to_index (void           *abstract_font,
+                                       uint32_t         ucs4)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    wchar_t unicode[2];
+    WORD glyph_index;
+    HDC hdc = NULL;
+    cairo_status_t status;
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+    if (status)
+       return 0;
+
+    unicode[0] = ucs4;
+    unicode[1] = 0;
+    if (GetGlyphIndicesW (hdc, unicode, 1, &glyph_index, 0) == GDI_ERROR) {
+       _cairo_win32_print_gdi_error ("_cairo_win32_scaled_font_ucs4_to_index:GetGlyphIndicesW");
+       glyph_index = 0;
+    }
+
+    cairo_win32_scaled_font_done_font (&scaled_font->base);
+
+    return glyph_index;
+}
+
+static cairo_status_t
+_cairo_win32_scaled_font_set_metrics (cairo_win32_scaled_font_t *scaled_font)
+{
+    cairo_status_t status;
+    cairo_font_extents_t extents;
+
+    TEXTMETRIC metrics;
+    HDC hdc;
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    if (scaled_font->preserve_axes || scaled_font->base.options.hint_metrics == CAIRO_HINT_METRICS_OFF) {
+       /* For 90-degree rotations (including 0), we get the metrics
+        * from the GDI in logical space, then convert back to font space
+        */
+       status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+       if (status)
+           return status;
+       GetTextMetrics (hdc, &metrics);
+       cairo_win32_scaled_font_done_font (&scaled_font->base);
+
+       extents.ascent = metrics.tmAscent / scaled_font->logical_scale;
+       extents.descent = metrics.tmDescent / scaled_font->logical_scale;
+
+       extents.height = (metrics.tmHeight + metrics.tmExternalLeading) / scaled_font->logical_scale;
+       extents.max_x_advance = metrics.tmMaxCharWidth / scaled_font->logical_scale;
+       extents.max_y_advance = 0;
+
+    } else {
+       /* For all other transformations, we use the design metrics
+        * of the font. The GDI results from GetTextMetrics() on a
+        * transformed font are inexplicably large and we want to
+        * avoid them.
+        */
+       status = _cairo_win32_scaled_font_select_unscaled_font (&scaled_font->base, hdc);
+       if (status)
+           return status;
+       GetTextMetrics (hdc, &metrics);
+       _cairo_win32_scaled_font_done_unscaled_font (&scaled_font->base);
+
+       extents.ascent = (double)metrics.tmAscent / scaled_font->em_square;
+       extents.descent = (double)metrics.tmDescent / scaled_font->em_square;
+       extents.height = (double)(metrics.tmHeight + metrics.tmExternalLeading) / scaled_font->em_square;
+       extents.max_x_advance = (double)(metrics.tmMaxCharWidth) / scaled_font->em_square;
+       extents.max_y_advance = 0;
+
+    }
+
+    scaled_font->is_bitmap = !(metrics.tmPitchAndFamily & TMPF_VECTOR);
+
+    /* Need to determine if this is a Type 1 font for the special
+     * handling in _text_to_glyphs.  Unlike TrueType or OpenType,
+     * Type1 fonts do not have a "cmap" table (or any other table).
+     * However GetFontData() will retrieve a Type1 font when
+     * requesting that GetFontData() retrieve data from the start of
+     * the file. This is to distinguish Type1 from stroke fonts such
+     * as "Script" and "Modern". The TMPF_TRUETYPE test is redundant
+     * but improves performance for the most common fonts.
+     */
+    scaled_font->is_type1 = FALSE;
+    if (!(metrics.tmPitchAndFamily & TMPF_TRUETYPE) &&
+       (metrics.tmPitchAndFamily & TMPF_VECTOR))
+    {
+        if ((GetFontData (hdc, CMAP_TAG, 0, NULL, 0) == GDI_ERROR) &&
+            (GetFontData (hdc, 0, 0, NULL, 0) != GDI_ERROR))
+        {
+             scaled_font->is_type1 = TRUE;
+        }
+    }
+
+    return _cairo_scaled_font_set_metrics (&scaled_font->base, &extents);
+}
+
+static cairo_status_t
+_cairo_win32_scaled_font_init_glyph_metrics (cairo_win32_scaled_font_t *scaled_font,
+                                            cairo_scaled_glyph_t      *scaled_glyph)
+{
+    static const MAT2 matrix = { { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, 1 } };
+    GLYPHMETRICS metrics;
+    cairo_status_t status;
+    cairo_text_extents_t extents;
+    HDC hdc;
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    if (scaled_font->is_bitmap) {
+       /* GetGlyphOutline will not work. Assume that the glyph does not extend outside the font box. */
+       cairo_font_extents_t font_extents;
+       INT width = 0;
+       UINT charIndex = _cairo_scaled_glyph_index (scaled_glyph);
+
+       cairo_scaled_font_extents (&scaled_font->base, &font_extents);
+
+       status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+       if (status)
+           return status;
+
+       if (!GetCharWidth32(hdc, charIndex, charIndex, &width)) {
+           status = _cairo_win32_print_gdi_error ("_cairo_win32_scaled_font_init_glyph_metrics:GetCharWidth32");
+           width = 0;
+       }
+       cairo_win32_scaled_font_done_font (&scaled_font->base);
+       if (status)
+           return status;
+
+       extents.x_bearing = 0;
+       extents.y_bearing = scaled_font->base.ctm.yy * (-font_extents.ascent / scaled_font->y_scale);
+       extents.width = width / (WIN32_FONT_LOGICAL_SCALE * scaled_font->x_scale);
+       extents.height = scaled_font->base.ctm.yy * (font_extents.ascent + font_extents.descent) / scaled_font->y_scale;
+       extents.x_advance = extents.width;
+       extents.y_advance = 0;
+    } else if (scaled_font->preserve_axes && scaled_font->base.options.hint_metrics != CAIRO_HINT_METRICS_OFF) {
+       /* If we aren't rotating / skewing the axes, then we get the metrics
+        * from the GDI in device space and convert to font space.
+        */
+       status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+       if (status)
+           return status;
+
+       if (GetGlyphOutlineW (hdc, _cairo_scaled_glyph_index (scaled_glyph),
+                             GGO_METRICS | GGO_GLYPH_INDEX,
+                             &metrics, 0, NULL, &matrix) == GDI_ERROR) {
+           memset (&metrics, 0, sizeof (GLYPHMETRICS));
+       } else {
+           if (metrics.gmBlackBoxX > 0 && scaled_font->base.options.antialias != CAIRO_ANTIALIAS_NONE) {
+               /* The bounding box reported by Windows supposedly contains the glyph's "black" area;
+                * however, antialiasing (especially with ClearType) means that the actual image that
+                * needs to be rendered may "bleed" into the adjacent pixels, mainly on the right side.
+                * To avoid clipping the glyphs when drawn by _cairo_surface_fallback_show_glyphs,
+                * for example, or other code that uses glyph extents to determine the area to update,
+                * we add a pixel of "slop" to left side of the nominal "black" area returned by GDI,
+                * and two pixels to the right (as tests show some glyphs bleed into this column).
+                */
+               metrics.gmptGlyphOrigin.x -= 1;
+               metrics.gmBlackBoxX += 3;
+           }
+       }
+       cairo_win32_scaled_font_done_font (&scaled_font->base);
+
+       if (scaled_font->swap_axes) {
+           extents.x_bearing = - metrics.gmptGlyphOrigin.y / scaled_font->y_scale;
+           extents.y_bearing = metrics.gmptGlyphOrigin.x / scaled_font->x_scale;
+           extents.width = metrics.gmBlackBoxY / scaled_font->y_scale;
+           extents.height = metrics.gmBlackBoxX / scaled_font->x_scale;
+           extents.x_advance = metrics.gmCellIncY / scaled_font->x_scale;
+           extents.y_advance = metrics.gmCellIncX / scaled_font->y_scale;
+       } else {
+           extents.x_bearing = metrics.gmptGlyphOrigin.x / scaled_font->x_scale;
+           extents.y_bearing = - metrics.gmptGlyphOrigin.y / scaled_font->y_scale;
+           extents.width = metrics.gmBlackBoxX / scaled_font->x_scale;
+           extents.height = metrics.gmBlackBoxY / scaled_font->y_scale;
+           extents.x_advance = metrics.gmCellIncX / scaled_font->x_scale;
+           extents.y_advance = metrics.gmCellIncY / scaled_font->y_scale;
+       }
+
+       if (scaled_font->swap_x) {
+           extents.x_bearing = (- extents.x_bearing - extents.width);
+           extents.x_advance = - extents.x_advance;
+       }
+
+       if (scaled_font->swap_y) {
+           extents.y_bearing = (- extents.y_bearing - extents.height);
+           extents.y_advance = - extents.y_advance;
+       }
+    } else {
+       /* For all other transformations, we use the design metrics
+        * of the font.
+        */
+       status = _cairo_win32_scaled_font_select_unscaled_font (&scaled_font->base, hdc);
+       if (status)
+           return status;
+
+       if (GetGlyphOutlineW (hdc, _cairo_scaled_glyph_index (scaled_glyph),
+                             GGO_METRICS | GGO_GLYPH_INDEX,
+                             &metrics, 0, NULL, &matrix) == GDI_ERROR) {
+           memset (&metrics, 0, sizeof (GLYPHMETRICS));
+       }
+       _cairo_win32_scaled_font_done_unscaled_font (&scaled_font->base);
+
+       extents.x_bearing = (double)metrics.gmptGlyphOrigin.x / scaled_font->em_square;
+       extents.y_bearing = - (double)metrics.gmptGlyphOrigin.y / scaled_font->em_square;
+       extents.width = (double)metrics.gmBlackBoxX / scaled_font->em_square;
+       extents.height = (double)metrics.gmBlackBoxY / scaled_font->em_square;
+       extents.x_advance = (double)metrics.gmCellIncX / scaled_font->em_square;
+       extents.y_advance = (double)metrics.gmCellIncY / scaled_font->em_square;
+    }
+
+    _cairo_scaled_glyph_set_metrics (scaled_glyph,
+                                    &scaled_font->base,
+                                    &extents);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+/* Not currently used code, but may be useful in the future if we add
+ * back the capability to the scaled font backend interface to get the
+ * actual device space bbox rather than computing it from the
+ * font-space metrics.
+ */
+#if 0
+static cairo_status_t
+_cairo_win32_scaled_font_glyph_bbox (void               *abstract_font,
+                                    const cairo_glyph_t *glyphs,
+                                    int                  num_glyphs,
+                                    cairo_box_t         *bbox)
+{
+    static const MAT2 matrix = { { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, 1 } };
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    int x1 = 0, x2 = 0, y1 = 0, y2 = 0;
+
+    if (num_glyphs > 0) {
+       HDC hdc;
+       GLYPHMETRICS metrics;
+       cairo_status_t status;
+       int i;
+
+       hdc = _get_global_font_dc ();
+       assert (hdc != NULL);
+
+       status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+       if (status)
+           return status;
+
+       for (i = 0; i < num_glyphs; i++) {
+           int x = _cairo_lround (glyphs[i].x);
+           int y = _cairo_lround (glyphs[i].y);
+
+           GetGlyphOutlineW (hdc, glyphs[i].index, GGO_METRICS | GGO_GLYPH_INDEX,
+                            &metrics, 0, NULL, &matrix);
+
+           if (i == 0 || x1 > x + metrics.gmptGlyphOrigin.x)
+               x1 = x + metrics.gmptGlyphOrigin.x;
+           if (i == 0 || y1 > y - metrics.gmptGlyphOrigin.y)
+               y1 = y - metrics.gmptGlyphOrigin.y;
+           if (i == 0 || x2 < x + metrics.gmptGlyphOrigin.x + (int)metrics.gmBlackBoxX)
+               x2 = x + metrics.gmptGlyphOrigin.x + (int)metrics.gmBlackBoxX;
+           if (i == 0 || y2 < y - metrics.gmptGlyphOrigin.y + (int)metrics.gmBlackBoxY)
+               y2 = y - metrics.gmptGlyphOrigin.y + (int)metrics.gmBlackBoxY;
+       }
+
+       cairo_win32_scaled_font_done_font (&scaled_font->base);
+    }
+
+    bbox->p1.x = _cairo_fixed_from_int (x1);
+    bbox->p1.y = _cairo_fixed_from_int (y1);
+    bbox->p2.x = _cairo_fixed_from_int (x2);
+    bbox->p2.y = _cairo_fixed_from_int (y2);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+#endif
+
+typedef struct {
+    cairo_win32_scaled_font_t *scaled_font;
+    HDC hdc;
+
+    cairo_array_t glyphs;
+    cairo_array_t dx;
+
+    int start_x;
+    int last_x;
+    int last_y;
+} cairo_glyph_state_t;
+
+static void
+_start_glyphs (cairo_glyph_state_t        *state,
+              cairo_win32_scaled_font_t  *scaled_font,
+              HDC                         hdc)
+{
+    state->hdc = hdc;
+    state->scaled_font = scaled_font;
+
+    _cairo_array_init (&state->glyphs, sizeof (WCHAR));
+    _cairo_array_init (&state->dx, sizeof (int));
+}
+
+static cairo_status_t
+_flush_glyphs (cairo_glyph_state_t *state)
+{
+    cairo_status_t status;
+    int dx = 0;
+    WCHAR * elements;
+    int * dx_elements;
+
+    status = _cairo_array_append (&state->dx, &dx);
+    if (status)
+       return status;
+
+    elements = _cairo_array_index (&state->glyphs, 0);
+    dx_elements = _cairo_array_index (&state->dx, 0);
+    if (!ExtTextOutW (state->hdc,
+                     state->start_x, state->last_y,
+                     ETO_GLYPH_INDEX,
+                     NULL,
+                     elements,
+                     state->glyphs.num_elements,
+                     dx_elements)) {
+       return _cairo_win32_print_gdi_error ("_flush_glyphs");
+    }
+
+    _cairo_array_truncate (&state->glyphs, 0);
+    _cairo_array_truncate (&state->dx, 0);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_add_glyph (cairo_glyph_state_t *state,
+           unsigned long        index,
+           double               device_x,
+           double               device_y)
+{
+    cairo_status_t status;
+    double user_x = device_x;
+    double user_y = device_y;
+    WCHAR glyph_index = index;
+    int logical_x, logical_y;
+
+    cairo_matrix_transform_point (&state->scaled_font->device_to_logical, &user_x, &user_y);
+
+    logical_x = _cairo_lround (user_x);
+    logical_y = _cairo_lround (user_y);
+
+    if (state->glyphs.num_elements > 0) {
+       int dx;
+
+       if (logical_y != state->last_y) {
+           status = _flush_glyphs (state);
+           if (status)
+               return status;
+           state->start_x = logical_x;
+       } else {
+           dx = logical_x - state->last_x;
+           status = _cairo_array_append (&state->dx, &dx);
+           if (status)
+               return status;
+       }
+    } else {
+       state->start_x = logical_x;
+    }
+
+    state->last_x = logical_x;
+    state->last_y = logical_y;
+
+    status = _cairo_array_append (&state->glyphs, &glyph_index);
+    if (status)
+       return status;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_finish_glyphs (cairo_glyph_state_t *state)
+{
+    cairo_status_t status;
+
+    status = _flush_glyphs (state);
+
+    _cairo_array_fini (&state->glyphs);
+    _cairo_array_fini (&state->dx);
+
+    return status;
+}
+
+static cairo_status_t
+_draw_glyphs_on_surface (cairo_win32_surface_t     *surface,
+                        cairo_win32_scaled_font_t *scaled_font,
+                        COLORREF                   color,
+                        int                        x_offset,
+                        int                        y_offset,
+                        const cairo_glyph_t       *glyphs,
+                        int                        num_glyphs)
+{
+    cairo_glyph_state_t state;
+    cairo_status_t status, status2;
+    int i;
+
+    if (!SaveDC (surface->dc))
+       return _cairo_win32_print_gdi_error ("_draw_glyphs_on_surface:SaveDC");
+
+    status = cairo_win32_scaled_font_select_font (&scaled_font->base, surface->dc);
+    if (status)
+       goto FAIL1;
+
+    SetTextColor (surface->dc, color);
+    SetTextAlign (surface->dc, TA_BASELINE | TA_LEFT);
+    SetBkMode (surface->dc, TRANSPARENT);
+
+    _start_glyphs (&state, scaled_font, surface->dc);
+
+    for (i = 0; i < num_glyphs; i++) {
+       status = _add_glyph (&state, glyphs[i].index,
+                            glyphs[i].x - x_offset, glyphs[i].y - y_offset);
+       if (status)
+           goto FAIL2;
+    }
+
+ FAIL2:
+    status2 = _finish_glyphs (&state);
+    if (status == CAIRO_STATUS_SUCCESS)
+       status = status2;
+
+    cairo_win32_scaled_font_done_font (&scaled_font->base);
+ FAIL1:
+    RestoreDC (surface->dc, -1);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_scaled_font_glyph_init (void                     *abstract_font,
+                                    cairo_scaled_glyph_t      *scaled_glyph,
+                                    cairo_scaled_glyph_info_t  info)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    cairo_status_t status;
+
+    if ((info & CAIRO_SCALED_GLYPH_INFO_METRICS) != 0) {
+       status = _cairo_win32_scaled_font_init_glyph_metrics (scaled_font, scaled_glyph);
+       if (status)
+           return status;
+    }
+
+    if (info & CAIRO_SCALED_GLYPH_INFO_SURFACE) {
+       status = _cairo_win32_scaled_font_init_glyph_surface (scaled_font, scaled_glyph);
+       if (status)
+           return status;
+    }
+
+    if ((info & CAIRO_SCALED_GLYPH_INFO_PATH) != 0) {
+       status = _cairo_win32_scaled_font_init_glyph_path (scaled_font, scaled_glyph);
+       if (status)
+           return status;
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
+_cairo_win32_scaled_font_load_truetype_table (void            *abstract_font,
+                                             unsigned long      tag,
+                                             long               offset,
+                                             unsigned char     *buffer,
+                                             unsigned long     *length)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    HDC hdc;
+    cairo_status_t status;
+    DWORD ret;
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    tag = (tag&0x000000ff)<<24 | (tag&0x0000ff00)<<8 | (tag&0x00ff0000)>>8 | (tag&0xff000000)>>24;
+    status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+    if (status)
+       return status;
+
+    ret = GetFontData (hdc, tag, offset, buffer, *length);
+    if (ret == GDI_ERROR || (buffer && ret != *length))
+        status = CAIRO_INT_STATUS_UNSUPPORTED;
+    else
+       *length = ret;
+
+    cairo_win32_scaled_font_done_font (&scaled_font->base);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_scaled_font_index_to_ucs4 (void           *abstract_font,
+                                       unsigned long    index,
+                                       uint32_t        *ucs4)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    GLYPHSET *glyph_set;
+    uint16_t *utf16 = NULL;
+    WORD *glyph_indices = NULL;
+    HDC hdc = NULL;
+    int res;
+    unsigned int i, j, num_glyphs;
+    cairo_status_t status;
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+    if (status)
+       return status;
+
+    res = GetFontUnicodeRanges(hdc, NULL);
+    if (res == 0) {
+       status = _cairo_win32_print_gdi_error (
+           "_cairo_win32_scaled_font_index_to_ucs4:GetFontUnicodeRanges");
+       goto exit1;
+    }
+
+    glyph_set = malloc (res);
+    if (glyph_set == NULL) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto exit1;
+    }
+
+    res = GetFontUnicodeRanges(hdc, glyph_set);
+    if (res == 0) {
+       status = _cairo_win32_print_gdi_error (
+           "_cairo_win32_scaled_font_index_to_ucs4:GetFontUnicodeRanges");
+       goto exit1;
+    }
+
+    *ucs4 = (uint32_t) -1;
+    for (i = 0; i < glyph_set->cRanges; i++) {
+       num_glyphs = glyph_set->ranges[i].cGlyphs;
+
+       utf16 = _cairo_malloc_ab (num_glyphs + 1, sizeof (uint16_t));
+       if (utf16 == NULL) {
+           status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+           goto exit1;
+       }
+
+       glyph_indices = _cairo_malloc_ab (num_glyphs + 1, sizeof (WORD));
+       if (glyph_indices == NULL) {
+           status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+           goto exit2;
+       }
+
+       for (j = 0; j < num_glyphs; j++)
+           utf16[j] = glyph_set->ranges[i].wcLow + j;
+       utf16[j] = 0;
+
+       if (GetGlyphIndicesW (hdc, utf16, num_glyphs, glyph_indices, 0) == GDI_ERROR) {
+           status = _cairo_win32_print_gdi_error (
+               "_cairo_win32_scaled_font_index_to_ucs4:GetGlyphIndicesW");
+           goto exit2;
+       }
+
+       for (j = 0; j < num_glyphs; j++) {
+           if (glyph_indices[j] == index) {
+               *ucs4 = utf16[j];
+               goto exit2;
+           }
+       }
+
+       free (glyph_indices);
+       glyph_indices = NULL;
+       free (utf16);
+       utf16 = NULL;
+    }
+
+exit2:
+    free (glyph_indices);
+    free (utf16);
+    free (glyph_set);
+exit1:
+    cairo_win32_scaled_font_done_font (&scaled_font->base);
+
+    return status;
+}
+
+static cairo_bool_t
+_cairo_win32_scaled_font_is_synthetic (void           *abstract_font)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    cairo_status_t status;
+    int        weight;
+    cairo_bool_t bold;
+    cairo_bool_t italic;
+
+    status = _cairo_truetype_get_style (&scaled_font->base,
+                                       &weight,
+                                       &bold,
+                                       &italic);
+    /* If this doesn't work assume it is not synthetic to avoid
+     * unnecessary subsetting fallbacks. */
+    if (status != CAIRO_STATUS_SUCCESS)
+       return FALSE;
+
+    if (scaled_font->logfont.lfWeight != weight ||
+       scaled_font->logfont.lfItalic != italic)
+       return TRUE;
+
+    return FALSE;
+}
+
+static cairo_int_status_t
+_cairo_win32_scaled_font_index_to_glyph_name (void             *abstract_font,
+                                             char             **glyph_names,
+                                             int                num_glyph_names,
+                                             unsigned long      glyph_index,
+                                             unsigned long     *glyph_array_index)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+    int i;
+
+    /* Windows puts .notdef at index 0 then numbers the remaining
+     * glyphs starting from 1 in the order they appear in the font. */
+
+    /* Find the position of .notdef in the list of glyph names. We
+     * only need to do this once per scaled font. */
+    if (! scaled_font->has_type1_notdef_index) {
+       for (i = 0; i < num_glyph_names; i++) {
+           if (strcmp (glyph_names[i], ".notdef") == 0) {
+               scaled_font->type1_notdef_index = i;
+               scaled_font->has_type1_notdef_index = TRUE;
+               break;
+           }
+       }
+       if (! scaled_font->has_type1_notdef_index)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+
+    /* Once we know the position of .notdef the position of any glyph
+     * in the font can easily be obtained. */
+    if (glyph_index == 0)
+       *glyph_array_index = scaled_font->type1_notdef_index;
+    else if (glyph_index <= scaled_font->type1_notdef_index)
+       *glyph_array_index = glyph_index - 1;
+    else if (glyph_index < (unsigned long)num_glyph_names)
+       *glyph_array_index = glyph_index;
+    else
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
+_cairo_win32_scaled_font_load_type1_data (void             *abstract_font,
+                                         long               offset,
+                                         unsigned char     *buffer,
+                                         unsigned long     *length)
+{
+    cairo_win32_scaled_font_t *scaled_font = abstract_font;
+
+    if (! scaled_font->is_type1)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    /* Using the tag 0 retrieves the entire font file. This works with
+     * Type 1 fonts as well as TTF/OTF fonts. */
+    return _cairo_win32_scaled_font_load_truetype_table (scaled_font,
+                                                        0,
+                                                        offset,
+                                                        buffer,
+                                                        length);
+}
+
+static cairo_surface_t *
+_compute_mask (cairo_surface_t *surface,
+              int quality)
+{
+    cairo_image_surface_t *glyph;
+    cairo_image_surface_t *mask;
+    int i, j;
+
+    glyph = (cairo_image_surface_t *)cairo_surface_map_to_image (surface, NULL);
+    if (unlikely (glyph->base.status))
+       return &glyph->base;
+
+    if (quality == CLEARTYPE_QUALITY) {
+       /* Duplicate the green channel of a 4-channel mask into the
+        * alpha channel, then invert the whole mask.
+        */
+       mask = (cairo_image_surface_t *)
+           cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       glyph->width, glyph->height);
+       if (likely (mask->base.status == CAIRO_STATUS_SUCCESS)) {
+           for (i = 0; i < glyph->height; i++) {
+               uint32_t *p = (uint32_t *) (glyph->data + i * glyph->stride);
+               uint32_t *q = (uint32_t *) (mask->data + i * mask->stride);
+
+               for (j = 0; j < glyph->width; j++) {
+                   *q++ = 0xffffffff ^ (*p | ((*p & 0x0000ff00) << 16));
+                   p++;
+               }
+           }
+       }
+    } else {
+       /* Compute an alpha-mask from a using the green channel of a
+        * (presumed monochrome) RGB24 image.
+        */
+       mask = (cairo_image_surface_t *)
+           cairo_image_surface_create (CAIRO_FORMAT_A8,
+                                       glyph->width, glyph->height);
+       if (likely (mask->base.status == CAIRO_STATUS_SUCCESS)) {
+           for (i = 0; i < glyph->height; i++) {
+               uint32_t *p = (uint32_t *) (glyph->data + i * glyph->stride);
+               uint8_t *q = (uint8_t *) (mask->data + i * mask->stride);
+
+               for (j = 0; j < glyph->width; j++)
+                   *q++ = 255 - ((*p++ & 0x0000ff00) >> 8);
+           }
+       }
+    }
+
+    cairo_surface_unmap_image (surface, &glyph->base);
+    return &mask->base;
+}
+
+static cairo_status_t
+_cairo_win32_scaled_font_init_glyph_surface (cairo_win32_scaled_font_t *scaled_font,
+                                             cairo_scaled_glyph_t      *scaled_glyph)
+{
+    cairo_status_t status;
+    cairo_glyph_t glyph;
+    cairo_surface_t *surface;
+    cairo_surface_t *image;
+    int width, height;
+    int x1, y1, x2, y2;
+
+    x1 = _cairo_fixed_integer_floor (scaled_glyph->bbox.p1.x);
+    y1 = _cairo_fixed_integer_floor (scaled_glyph->bbox.p1.y);
+    x2 = _cairo_fixed_integer_ceil (scaled_glyph->bbox.p2.x);
+    y2 = _cairo_fixed_integer_ceil (scaled_glyph->bbox.p2.y);
+    width = x2 - x1;
+    height = y2 - y1;
+
+    surface = cairo_win32_surface_create_with_dib (CAIRO_FORMAT_RGB24,
+                                                  width, height);
+    status = _cairo_surface_paint (surface, CAIRO_OPERATOR_SOURCE,
+                                  &_cairo_pattern_white.base, NULL);
+    if (status)
+       goto FAIL;
+
+    glyph.index = _cairo_scaled_glyph_index (scaled_glyph);
+    glyph.x = -x1;
+    glyph.y = -y1;
+    status = _draw_glyphs_on_surface (to_win32_surface (surface),
+                                     scaled_font, RGB(0,0,0),
+                                      0, 0, &glyph, 1);
+    if (status)
+       goto FAIL;
+
+    image = _compute_mask (surface, scaled_font->quality);
+    status = image->status;
+    if (status)
+       goto FAIL;
+
+    cairo_surface_set_device_offset (image, -x1, -y1);
+    _cairo_scaled_glyph_set_surface (scaled_glyph,
+                                     &scaled_font->base,
+                                     (cairo_image_surface_t *) image);
+
+  FAIL:
+    cairo_surface_destroy (surface);
+
+    return status;
+}
+
+static void
+_cairo_win32_transform_FIXED_to_fixed (cairo_matrix_t *matrix,
+                                       FIXED Fx, FIXED Fy,
+                                       cairo_fixed_t *fx, cairo_fixed_t *fy)
+{
+    double x = Fx.value + Fx.fract / 65536.0;
+    double y = Fy.value + Fy.fract / 65536.0;
+    cairo_matrix_transform_point (matrix, &x, &y);
+    *fx = _cairo_fixed_from_double (x);
+    *fy = _cairo_fixed_from_double (y);
+}
+
+static cairo_status_t
+_cairo_win32_scaled_font_init_glyph_path (cairo_win32_scaled_font_t *scaled_font,
+                                         cairo_scaled_glyph_t      *scaled_glyph)
+{
+    static const MAT2 matrix = { { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, -1 } };
+    cairo_status_t status;
+    GLYPHMETRICS metrics;
+    HDC hdc;
+    DWORD bytesGlyph;
+    unsigned char *buffer, *ptr;
+    cairo_path_fixed_t *path;
+    cairo_matrix_t transform;
+    cairo_fixed_t x, y;
+
+    if (scaled_font->is_bitmap)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    hdc = _get_global_font_dc ();
+    assert (hdc != NULL);
+
+    path = _cairo_path_fixed_create ();
+    if (!path)
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+    if (scaled_font->base.options.hint_style == CAIRO_HINT_STYLE_NONE) {
+        status = _cairo_win32_scaled_font_select_unscaled_font (&scaled_font->base, hdc);
+        transform = scaled_font->base.scale;
+        cairo_matrix_scale (&transform, 1.0/scaled_font->em_square, 1.0/scaled_font->em_square);
+    } else {
+        status = cairo_win32_scaled_font_select_font (&scaled_font->base, hdc);
+        cairo_matrix_init_identity(&transform);
+    }
+    if (status)
+        goto CLEANUP_PATH;
+
+    bytesGlyph = GetGlyphOutlineW (hdc, _cairo_scaled_glyph_index (scaled_glyph),
+                                  GGO_NATIVE | GGO_GLYPH_INDEX,
+                                  &metrics, 0, NULL, &matrix);
+
+    if (bytesGlyph == GDI_ERROR) {
+       status = _cairo_win32_print_gdi_error ("_cairo_win32_scaled_font_glyph_path");
+       goto CLEANUP_FONT;
+    }
+
+    ptr = buffer = malloc (bytesGlyph);
+    if (!buffer) {
+       status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
+       goto CLEANUP_FONT;
+    }
+
+    if (GetGlyphOutlineW (hdc, _cairo_scaled_glyph_index (scaled_glyph),
+                         GGO_NATIVE | GGO_GLYPH_INDEX,
+                         &metrics, bytesGlyph, buffer, &matrix) == GDI_ERROR) {
+       status = _cairo_win32_print_gdi_error ("_cairo_win32_scaled_font_glyph_path");
+       goto CLEANUP_BUFFER;
+    }
+
+    while (ptr < buffer + bytesGlyph) {
+       TTPOLYGONHEADER *header = (TTPOLYGONHEADER *)ptr;
+       unsigned char *endPoly = ptr + header->cb;
+
+       ptr += sizeof (TTPOLYGONHEADER);
+
+        _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                               header->pfxStart.x,
+                                               header->pfxStart.y,
+                                               &x, &y);
+        status = _cairo_path_fixed_move_to (path, x, y);
+       if (status)
+           goto CLEANUP_BUFFER;
+
+       while (ptr < endPoly) {
+           TTPOLYCURVE *curve = (TTPOLYCURVE *)ptr;
+           POINTFX *points = curve->apfx;
+           int i;
+           switch (curve->wType) {
+           case TT_PRIM_LINE:
+               for (i = 0; i < curve->cpfx; i++) {
+                    _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                                           points[i].x,
+                                                           points[i].y,
+                                                           &x, &y);
+                   status = _cairo_path_fixed_line_to (path, x, y);
+                   if (status)
+                       goto CLEANUP_BUFFER;
+               }
+               break;
+           case TT_PRIM_QSPLINE:
+               for (i = 0; i < curve->cpfx - 1; i++) {
+                   cairo_fixed_t p1x, p1y, p2x, p2y, cx, cy, c1x, c1y, c2x, c2y;
+                   if (! _cairo_path_fixed_get_current_point (path, &p1x, &p1y))
+                       goto CLEANUP_BUFFER;
+                    _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                                           points[i].x,
+                                                           points[i].y,
+                                                           &cx, &cy);
+
+                   if (i + 1 == curve->cpfx - 1) {
+                        _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                                               points[i + 1].x,
+                                                               points[i + 1].y,
+                                                               &p2x, &p2y);
+                   } else {
+                       /* records with more than one curve use interpolation for
+                          control points, per http://support.microsoft.com/kb/q87115/ */
+                        _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                                               points[i + 1].x,
+                                                               points[i + 1].y,
+                                                               &x, &y);
+                        p2x = (cx + x) / 2;
+                       p2y = (cy + y) / 2;
+                   }
+
+                   c1x = 2 * cx / 3 + p1x / 3;
+                   c1y = 2 * cy / 3 + p1y / 3;
+                   c2x = 2 * cx / 3 + p2x / 3;
+                   c2y = 2 * cy / 3 + p2y / 3;
+
+                   status = _cairo_path_fixed_curve_to (path, c1x, c1y, c2x, c2y, p2x, p2y);
+                   if (status)
+                       goto CLEANUP_BUFFER;
+               }
+               break;
+           case TT_PRIM_CSPLINE:
+               for (i = 0; i < curve->cpfx - 2; i += 2) {
+                   cairo_fixed_t x1, y1, x2, y2;
+                    _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                                           points[i].x,
+                                                           points[i].y,
+                                                           &x, &y);
+                    _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                                           points[i + 1].x,
+                                                           points[i + 1].y,
+                                                           &x1, &y1);
+                    _cairo_win32_transform_FIXED_to_fixed (&transform,
+                                                           points[i + 2].x,
+                                                           points[i + 2].y,
+                                                           &x2, &y2);
+                   status = _cairo_path_fixed_curve_to (path, x, y, x1, y1, x2, y2);
+                   if (status)
+                       goto CLEANUP_BUFFER;
+               }
+               break;
+           }
+           ptr += sizeof(TTPOLYCURVE) + sizeof (POINTFX) * (curve->cpfx - 1);
+       }
+       status = _cairo_path_fixed_close_path (path);
+       if (status)
+           goto CLEANUP_BUFFER;
+    }
+
+    _cairo_scaled_glyph_set_path (scaled_glyph,
+                                 &scaled_font->base,
+                                 path);
+
+ CLEANUP_BUFFER:
+    free (buffer);
+
+ CLEANUP_FONT:
+    if (scaled_font->base.options.hint_style == CAIRO_HINT_STYLE_NONE)
+       _cairo_win32_scaled_font_done_unscaled_font (&scaled_font->base);
+    else
+       cairo_win32_scaled_font_done_font (&scaled_font->base);
+
+ CLEANUP_PATH:
+    if (status != CAIRO_STATUS_SUCCESS)
+       _cairo_path_fixed_destroy (path);
+
+    return status;
+}
+
+const cairo_scaled_font_backend_t _cairo_win32_scaled_font_backend = {
+    CAIRO_FONT_TYPE_WIN32,
+    _cairo_win32_scaled_font_fini,
+    _cairo_win32_scaled_font_glyph_init,
+    NULL, /* _cairo_win32_scaled_font_text_to_glyphs, FIXME */
+    _cairo_win32_scaled_font_ucs4_to_index,
+    _cairo_win32_scaled_font_load_truetype_table,
+    _cairo_win32_scaled_font_index_to_ucs4,
+    _cairo_win32_scaled_font_is_synthetic,
+    _cairo_win32_scaled_font_index_to_glyph_name,
+    _cairo_win32_scaled_font_load_type1_data
+};
+
+/* #cairo_win32_font_face_t */
+
+typedef struct _cairo_win32_font_face cairo_win32_font_face_t;
+
+/* If hfont is non-%NULL then logfont->lfHeight must be -S for some S,
+ * logfont->lfWidth, logfont->lfEscapement, logfont->lfOrientation must
+ * all be 0, and hfont is the result of calling CreateFontIndirectW on
+ * logfont.
+ */
+struct _cairo_win32_font_face {
+    cairo_font_face_t base;
+    LOGFONTW logfont;
+    HFONT hfont;
+};
+
+/* implement the platform-specific interface */
+
+static cairo_bool_t
+_is_scale (const cairo_matrix_t *matrix, double scale)
+{
+    return matrix->xx == scale && matrix->yy == scale &&
+           matrix->xy == 0. && matrix->yx == 0. &&
+           matrix->x0 == 0. && matrix->y0 == 0.;
+}
+
+static cairo_status_t
+_cairo_win32_font_face_scaled_font_create (void                        *abstract_face,
+                                          const cairo_matrix_t *font_matrix,
+                                          const cairo_matrix_t *ctm,
+                                          const cairo_font_options_t *options,
+                                          cairo_scaled_font_t **font)
+{
+    HFONT hfont = NULL;
+
+    cairo_win32_font_face_t *font_face = abstract_face;
+
+    if (font_face->hfont) {
+        /* Check whether it's OK to go ahead and use the font-face's HFONT. */
+        if (_is_scale (ctm, 1.) &&
+            _is_scale (font_matrix, -font_face->logfont.lfHeight)) {
+            hfont = font_face->hfont;
+        }
+    }
+
+    return _win32_scaled_font_create (&font_face->logfont,
+                                     hfont,
+                                     &font_face->base,
+                                     font_matrix, ctm, options,
+                                     font);
+}
+
+const cairo_font_face_backend_t _cairo_win32_font_face_backend = {
+    CAIRO_FONT_TYPE_WIN32,
+    _cairo_win32_font_face_create_for_toy,
+    _cairo_win32_font_face_destroy,
+    _cairo_win32_font_face_scaled_font_create
+};
+
+/* We maintain a hash table from LOGFONT,HFONT => #cairo_font_face_t.
+ * The primary purpose of this mapping is to provide unique
+ * #cairo_font_face_t values so that our cache and mapping from
+ * #cairo_font_face_t => #cairo_scaled_font_t works. Once the
+ * corresponding #cairo_font_face_t objects fall out of downstream
+ * caches, we don't need them in this hash table anymore.
+ *
+ * Modifications to this hash table are protected by
+ * _cairo_win32_font_face_mutex.
+ */
+
+static cairo_hash_table_t *cairo_win32_font_face_hash_table = NULL;
+
+static int
+_cairo_win32_font_face_keys_equal (const void *key_a,
+                                  const void *key_b);
+
+static void
+_cairo_win32_font_face_hash_table_destroy (void)
+{
+    cairo_hash_table_t *hash_table;
+
+    /* We manually acquire the lock rather than calling
+     * _cairo_win32_font_face_hash_table_lock simply to avoid creating
+     * the table only to destroy it again. */
+    CAIRO_MUTEX_LOCK (_cairo_win32_font_face_mutex);
+    hash_table = cairo_win32_font_face_hash_table;
+    cairo_win32_font_face_hash_table = NULL;
+    CAIRO_MUTEX_UNLOCK (_cairo_win32_font_face_mutex);
+
+    if (hash_table != NULL)
+       _cairo_hash_table_destroy (hash_table);
+}
+
+static cairo_hash_table_t *
+_cairo_win32_font_face_hash_table_lock (void)
+{
+    CAIRO_MUTEX_LOCK (_cairo_win32_font_face_mutex);
+
+    if (unlikely (cairo_win32_font_face_hash_table == NULL))
+    {
+       cairo_win32_font_face_hash_table =
+       _cairo_hash_table_create (_cairo_win32_font_face_keys_equal);
+
+       if (unlikely (cairo_win32_font_face_hash_table == NULL)) {
+           CAIRO_MUTEX_UNLOCK (_cairo_win32_font_face_mutex);
+           _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
+           return NULL;
+       }
+    }
+
+    return cairo_win32_font_face_hash_table;
+}
+
+static void
+_cairo_win32_font_face_hash_table_unlock (void)
+{
+    CAIRO_MUTEX_UNLOCK (_cairo_win32_font_face_mutex);
+}
+
+static void
+_cairo_win32_font_face_destroy (void *abstract_face)
+{
+    cairo_win32_font_face_t *font_face = abstract_face;
+    cairo_hash_table_t *hash_table;
+
+    hash_table = _cairo_win32_font_face_hash_table_lock ();
+    /* All created objects must have been mapped in the hash table. */
+    assert (hash_table != NULL);
+
+    if (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&font_face->base.ref_count)) {
+       /* somebody recreated the font whilst we waited for the lock */
+       _cairo_win32_font_face_hash_table_unlock ();
+       return;
+    }
+
+    /* Font faces in SUCCESS status are guaranteed to be in the
+     * hashtable. Font faces in an error status are removed from the
+     * hashtable if they are found during a lookup, thus they should
+     * only be removed if they are in the hashtable. */
+    if (likely (font_face->base.status == CAIRO_STATUS_SUCCESS) ||
+       _cairo_hash_table_lookup (hash_table, &font_face->base.hash_entry) == font_face)
+       _cairo_hash_table_remove (hash_table, &font_face->base.hash_entry);
+
+    _cairo_win32_font_face_hash_table_unlock ();
+}
+
+static void
+_cairo_win32_font_face_init_key (cairo_win32_font_face_t *key,
+                                LOGFONTW                *logfont,
+                                HFONT                    font)
+{
+    unsigned long hash = _CAIRO_HASH_INIT_VALUE;
+
+    key->logfont = *logfont;
+    key->hfont = font;
+
+    hash = _cairo_hash_bytes (0, logfont->lfFaceName, 2*wcslen(logfont->lfFaceName));
+    hash = _cairo_hash_bytes (hash, &logfont->lfWeight, sizeof(logfont->lfWeight));
+    hash = _cairo_hash_bytes (hash, &logfont->lfItalic, sizeof(logfont->lfItalic));
+
+    key->base.hash_entry.hash = hash;
+}
+
+static int
+_cairo_win32_font_face_keys_equal (const void *key_a,
+                                  const void *key_b)
+{
+    const cairo_win32_font_face_t *face_a = key_a;
+    const cairo_win32_font_face_t *face_b = key_b;
+
+    if (face_a->logfont.lfWeight         == face_b->logfont.lfWeight &&
+       face_a->logfont.lfItalic         == face_b->logfont.lfItalic &&
+       face_a->logfont.lfUnderline      == face_b->logfont.lfUnderline &&
+       face_a->logfont.lfStrikeOut      == face_b->logfont.lfStrikeOut &&
+       face_a->logfont.lfCharSet        == face_b->logfont.lfCharSet &&
+       face_a->logfont.lfOutPrecision   == face_b->logfont.lfOutPrecision &&
+       face_a->logfont.lfClipPrecision  == face_b->logfont.lfClipPrecision &&
+       face_a->logfont.lfPitchAndFamily == face_b->logfont.lfPitchAndFamily &&
+       (wcscmp (face_a->logfont.lfFaceName, face_b->logfont.lfFaceName) == 0))
+       return TRUE;
+    else
+       return FALSE;
+}
+
+/**
+ * cairo_win32_font_face_create_for_logfontw_hfont:
+ * @logfont: A #LOGFONTW structure specifying the font to use.
+ *   If @font is %NULL then the lfHeight, lfWidth, lfOrientation and lfEscapement
+ *   fields of this structure are ignored. Otherwise lfWidth, lfOrientation and
+ *   lfEscapement must be zero.
+ * @font: An #HFONT that can be used when the font matrix is a scale by
+ *   -lfHeight and the CTM is identity.
+ *
+ * Creates a new font for the Win32 font backend based on a
+ * #LOGFONT. This font can then be used with
+ * cairo_set_font_face() or cairo_scaled_font_create().
+ * The #cairo_scaled_font_t
+ * returned from cairo_scaled_font_create() is also for the Win32 backend
+ * and can be used with functions such as cairo_win32_scaled_font_select_font().
+ *
+ * Return value: a newly created #cairo_font_face_t. Free with
+ *  cairo_font_face_destroy() when you are done using it.
+ *
+ * Since: 1.6
+ **/
+cairo_font_face_t *
+cairo_win32_font_face_create_for_logfontw_hfont (LOGFONTW *logfont, HFONT font)
+{
+    cairo_win32_font_face_t *font_face, key;
+    cairo_hash_table_t *hash_table;
+    cairo_status_t status;
+
+    hash_table = _cairo_win32_font_face_hash_table_lock ();
+    if (unlikely (hash_table == NULL)) {
+        _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
+       return (cairo_font_face_t *)&_cairo_font_face_nil;
+    }
+
+    _cairo_win32_font_face_init_key (&key, logfont, font);
+
+    /* Return existing unscaled font if it exists in the hash table. */
+    font_face = _cairo_hash_table_lookup (hash_table,
+                                        &key.base.hash_entry);
+    if (font_face != NULL) {
+       if (font_face->base.status == CAIRO_STATUS_SUCCESS) {
+           cairo_font_face_reference (&font_face->base);
+           _cairo_win32_font_face_hash_table_unlock ();
+           return &font_face->base;
+       }
+
+       /* remove the bad font from the hash table */
+       _cairo_hash_table_remove (hash_table, &font_face->base.hash_entry);
+    }
+
+    /* Otherwise create it and insert into hash table. */
+    font_face = malloc (sizeof (cairo_win32_font_face_t));
+    if (!font_face) {
+        _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
+       goto FAIL;
+    }
+
+    _cairo_win32_font_face_init_key (font_face, logfont, font);
+    _cairo_font_face_init (&font_face->base, &_cairo_win32_font_face_backend);
+
+    assert (font_face->base.hash_entry.hash == key.base.hash_entry.hash);
+    status = _cairo_hash_table_insert (hash_table,
+                                      &font_face->base.hash_entry);
+    if (unlikely (status))
+       goto FAIL;
+
+    _cairo_win32_font_face_hash_table_unlock ();
+    return &font_face->base;
+
+FAIL:
+    _cairo_win32_font_face_hash_table_unlock ();
+    return (cairo_font_face_t *)&_cairo_font_face_nil;
+}
+
+/**
+ * cairo_win32_font_face_create_for_logfontw:
+ * @logfont: A #LOGFONTW structure specifying the font to use.
+ *   The lfHeight, lfWidth, lfOrientation and lfEscapement
+ *   fields of this structure are ignored.
+ *
+ * Creates a new font for the Win32 font backend based on a
+ * #LOGFONT. This font can then be used with
+ * cairo_set_font_face() or cairo_scaled_font_create().
+ * The #cairo_scaled_font_t
+ * returned from cairo_scaled_font_create() is also for the Win32 backend
+ * and can be used with functions such as cairo_win32_scaled_font_select_font().
+ *
+ * Return value: a newly created #cairo_font_face_t. Free with
+ *  cairo_font_face_destroy() when you are done using it.
+ *
+ * Since: 1.0
+ **/
+cairo_font_face_t *
+cairo_win32_font_face_create_for_logfontw (LOGFONTW *logfont)
+{
+    return cairo_win32_font_face_create_for_logfontw_hfont (logfont, NULL);
+}
+
+/**
+ * cairo_win32_font_face_create_for_hfont:
+ * @font: An #HFONT structure specifying the font to use.
+ *
+ * Creates a new font for the Win32 font backend based on a
+ * #HFONT. This font can then be used with
+ * cairo_set_font_face() or cairo_scaled_font_create().
+ * The #cairo_scaled_font_t
+ * returned from cairo_scaled_font_create() is also for the Win32 backend
+ * and can be used with functions such as cairo_win32_scaled_font_select_font().
+ *
+ * Return value: a newly created #cairo_font_face_t. Free with
+ *  cairo_font_face_destroy() when you are done using it.
+ *
+ * Since: 1.2
+ **/
+cairo_font_face_t *
+cairo_win32_font_face_create_for_hfont (HFONT font)
+{
+    LOGFONTW logfont;
+    GetObjectW (font, sizeof(logfont), &logfont);
+
+    if (logfont.lfEscapement != 0 || logfont.lfOrientation != 0 ||
+        logfont.lfWidth != 0) {
+        /* We can't use this font because that optimization requires that
+         * lfEscapement, lfOrientation and lfWidth be zero. */
+        font = NULL;
+    }
+
+    return cairo_win32_font_face_create_for_logfontw_hfont (&logfont, font);
+}
+
+static cairo_bool_t
+_cairo_scaled_font_is_win32 (cairo_scaled_font_t *scaled_font)
+{
+    return scaled_font->backend == &_cairo_win32_scaled_font_backend;
+}
+
+/**
+ * cairo_win32_scaled_font_select_font:
+ * @scaled_font: A #cairo_scaled_font_t from the Win32 font backend. Such an
+ *   object can be created with cairo_win32_font_face_create_for_logfontw().
+ * @hdc: a device context
+ *
+ * Selects the font into the given device context and changes the
+ * map mode and world transformation of the device context to match
+ * that of the font. This function is intended for use when using
+ * layout APIs such as Uniscribe to do text layout with the
+ * cairo font. After finishing using the device context, you must call
+ * cairo_win32_scaled_font_done_font() to release any resources allocated
+ * by this function.
+ *
+ * See cairo_win32_scaled_font_get_metrics_factor() for converting logical
+ * coordinates from the device context to font space.
+ *
+ * Normally, calls to SaveDC() and RestoreDC() would be made around
+ * the use of this function to preserve the original graphics state.
+ *
+ * Return value: %CAIRO_STATUS_SUCCESS if the operation succeeded.
+ *   otherwise an error such as %CAIRO_STATUS_NO_MEMORY and
+ *   the device context is unchanged.
+ *
+ * Since: 1.0
+ **/
+cairo_status_t
+cairo_win32_scaled_font_select_font (cairo_scaled_font_t *scaled_font,
+                                    HDC                  hdc)
+{
+    cairo_status_t status;
+    HFONT hfont;
+    HFONT old_hfont = NULL;
+    int old_mode;
+
+    if (! _cairo_scaled_font_is_win32 (scaled_font)) {
+       return _cairo_error (CAIRO_STATUS_FONT_TYPE_MISMATCH);
+    }
+
+    if (scaled_font->status)
+       return scaled_font->status;
+
+    status = _win32_scaled_font_get_scaled_hfont ((cairo_win32_scaled_font_t *)scaled_font, &hfont);
+    if (status)
+       return status;
+
+    old_hfont = SelectObject (hdc, hfont);
+    if (!old_hfont)
+       return _cairo_win32_print_gdi_error ("cairo_win32_scaled_font_select_font:SelectObject");
+
+    old_mode = SetGraphicsMode (hdc, GM_ADVANCED);
+    if (!old_mode) {
+       status = _cairo_win32_print_gdi_error ("cairo_win32_scaled_font_select_font:SetGraphicsMode");
+       SelectObject (hdc, old_hfont);
+       return status;
+    }
+
+    status = _win32_scaled_font_set_world_transform ((cairo_win32_scaled_font_t *)scaled_font, hdc);
+    if (status) {
+       SetGraphicsMode (hdc, old_mode);
+       SelectObject (hdc, old_hfont);
+       return status;
+    }
+
+    SetMapMode (hdc, MM_TEXT);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+/**
+ * cairo_win32_scaled_font_done_font:
+ * @scaled_font: A scaled font from the Win32 font backend.
+ *
+ * Releases any resources allocated by cairo_win32_scaled_font_select_font()
+ *
+ * Since: 1.0
+ **/
+void
+cairo_win32_scaled_font_done_font (cairo_scaled_font_t *scaled_font)
+{
+    if (! _cairo_scaled_font_is_win32 (scaled_font)) {
+       _cairo_error_throw (CAIRO_STATUS_FONT_TYPE_MISMATCH);
+    }
+}
+
+/**
+ * cairo_win32_scaled_font_get_metrics_factor:
+ * @scaled_font: a scaled font from the Win32 font backend
+ *
+ * Gets a scale factor between logical coordinates in the coordinate
+ * space used by cairo_win32_scaled_font_select_font() (that is, the
+ * coordinate system used by the Windows functions to return metrics) and
+ * font space coordinates.
+ *
+ * Return value: factor to multiply logical units by to get font space
+ *               coordinates.
+ *
+ * Since: 1.0
+ **/
+double
+cairo_win32_scaled_font_get_metrics_factor (cairo_scaled_font_t *scaled_font)
+{
+    if (! _cairo_scaled_font_is_win32 (scaled_font)) {
+       _cairo_error_throw (CAIRO_STATUS_FONT_TYPE_MISMATCH);
+       return 1.;
+    }
+    return 1. / ((cairo_win32_scaled_font_t *)scaled_font)->logical_scale;
+}
+
+/**
+ * cairo_win32_scaled_font_get_logical_to_device:
+ * @scaled_font: a scaled font from the Win32 font backend
+ * @logical_to_device: matrix to return
+ *
+ * Gets the transformation mapping the logical space used by @scaled_font
+ * to device space.
+ *
+ * Since: 1.4
+ **/
+void
+cairo_win32_scaled_font_get_logical_to_device (cairo_scaled_font_t *scaled_font,
+                                              cairo_matrix_t *logical_to_device)
+{
+    cairo_win32_scaled_font_t *win_font = (cairo_win32_scaled_font_t *)scaled_font;
+    if (! _cairo_scaled_font_is_win32 (scaled_font)) {
+       _cairo_error_throw (CAIRO_STATUS_FONT_TYPE_MISMATCH);
+       cairo_matrix_init_identity (logical_to_device);
+       return;
+    }
+    *logical_to_device = win_font->logical_to_device;
+}
+
+/**
+ * cairo_win32_scaled_font_get_device_to_logical:
+ * @scaled_font: a scaled font from the Win32 font backend
+ * @device_to_logical: matrix to return
+ *
+ * Gets the transformation mapping device space to the logical space
+ * used by @scaled_font.
+ *
+ * Since: 1.4
+ **/
+void
+cairo_win32_scaled_font_get_device_to_logical (cairo_scaled_font_t *scaled_font,
+                                              cairo_matrix_t *device_to_logical)
+{
+    cairo_win32_scaled_font_t *win_font = (cairo_win32_scaled_font_t *)scaled_font;
+    if (! _cairo_scaled_font_is_win32 (scaled_font)) {
+       _cairo_error_throw (CAIRO_STATUS_FONT_TYPE_MISMATCH);
+       cairo_matrix_init_identity (device_to_logical);
+       return;
+    }
+    *device_to_logical = win_font->device_to_logical;
+}
+
+void
+_cairo_win32_font_reset_static_data (void)
+{
+    _cairo_win32_font_face_hash_table_destroy ();
+}
diff --git a/src/win32/cairo-win32-gdi-compositor.c b/src/win32/cairo-win32-gdi-compositor.c
new file mode 100644 (file)
index 0000000..39db674
--- /dev/null
@@ -0,0 +1,649 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is University of Southern
+ * California.
+ *
+ * Contributor(s):
+ *     Carl D. Worth <cworth@cworth.org>
+ *     Behdad Esfahbod <behdad@behdad.org>
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ *     Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
+ */
+
+/* The original X drawing API was very restrictive in what it could handle,
+ * pixel-aligned fill/blits are all that map into Cairo's drawing model.
+ */
+
+#include "cairoint.h"
+
+#include "cairo-win32-private.h"
+
+#include "cairo-boxes-private.h"
+#include "cairo-clip-inline.h"
+#include "cairo-compositor-private.h"
+#include "cairo-image-surface-private.h"
+#include "cairo-pattern-private.h"
+#include "cairo-region-private.h"
+#include "cairo-surface-inline.h"
+#include "cairo-surface-offset-private.h"
+
+#if !defined(AC_SRC_OVER)
+#define AC_SRC_OVER                 0x00
+#pragma pack(1)
+typedef struct {
+    BYTE   BlendOp;
+    BYTE   BlendFlags;
+    BYTE   SourceConstantAlpha;
+    BYTE   AlphaFormat;
+}BLENDFUNCTION;
+#pragma pack()
+#endif
+
+/* for compatibility with VC++ 6 */
+#ifndef AC_SRC_ALPHA
+#define AC_SRC_ALPHA                0x01
+#endif
+
+#define PELS_72DPI  ((LONG)(72. / 0.0254))
+
+/* the low-level interface */
+
+struct fill_box {
+    HDC dc;
+    HBRUSH brush;
+};
+
+static cairo_bool_t fill_box (cairo_box_t *box, void *closure)
+{
+    struct fill_box *fb = closure;
+    RECT rect;
+
+    rect.left = _cairo_fixed_integer_part (box->p1.x);
+    rect.top = _cairo_fixed_integer_part (box->p1.y);
+    rect.right = _cairo_fixed_integer_part (box->p2.x);
+    rect.bottom = _cairo_fixed_integer_part (box->p2.y);
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    return FillRect (fb->dc, &rect, fb->brush);
+}
+
+struct check_box {
+    cairo_rectangle_int_t limit;
+    int tx, ty;
+};
+
+struct copy_box {
+    cairo_rectangle_int_t limit;
+    int tx, ty;
+    HDC dst, src;
+    BLENDFUNCTION bf;
+    cairo_win32_alpha_blend_func_t alpha_blend;
+};
+
+static cairo_bool_t copy_box (cairo_box_t *box, void *closure)
+{
+    const struct copy_box *cb = closure;
+    int x = _cairo_fixed_integer_part (box->p1.x);
+    int y = _cairo_fixed_integer_part (box->p1.y);
+    int width  = _cairo_fixed_integer_part (box->p2.x - box->p1.x);
+    int height = _cairo_fixed_integer_part (box->p2.y - box->p1.y);
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    return BitBlt (cb->dst, x, y, width, height,
+                  cb->src, x + cb->tx, y + cb->ty,
+                  SRCCOPY);
+}
+
+static cairo_bool_t alpha_box (cairo_box_t *box, void *closure)
+{
+    const struct copy_box *cb = closure;
+    int x = _cairo_fixed_integer_part (box->p1.x);
+    int y = _cairo_fixed_integer_part (box->p1.y);
+    int width  = _cairo_fixed_integer_part (box->p2.x - box->p1.x);
+    int height = _cairo_fixed_integer_part (box->p2.y - box->p1.y);
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    return cb->alpha_blend (cb->dst, x, y, width, height,
+                           cb->src, x + cb->tx, y + cb->ty, width, height,
+                           cb->bf);
+}
+
+struct upload_box {
+    cairo_rectangle_int_t limit;
+    int tx, ty;
+    HDC dst;
+    BITMAPINFO bi;
+    void *data;
+};
+
+static cairo_bool_t upload_box (cairo_box_t *box, void *closure)
+{
+    const struct upload_box *cb = closure;
+    int x = _cairo_fixed_integer_part (box->p1.x);
+    int y = _cairo_fixed_integer_part (box->p1.y);
+    int width  = _cairo_fixed_integer_part (box->p2.x - box->p1.x);
+    int height = _cairo_fixed_integer_part (box->p2.y - box->p1.y);
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    return StretchDIBits (cb->dst, x, y + height - 1, width, -height,
+                         x + cb->tx,  height - (y + cb->ty - 1),
+                         width, -height,
+                         cb->data, &cb->bi,
+                         DIB_RGB_COLORS, SRCCOPY);
+}
+
+/* the mid-level: converts boxes into drawing operations */
+
+static COLORREF color_to_rgb(const cairo_color_t *c)
+{
+    return RGB (c->red_short >> 8, c->green_short >> 8, c->blue_short >> 8);
+}
+
+static cairo_int_status_t
+fill_boxes (cairo_win32_display_surface_t      *dst,
+           const cairo_pattern_t               *src,
+           cairo_boxes_t                       *boxes)
+{
+    const cairo_color_t *color = &((cairo_solid_pattern_t *) src)->color;
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
+    struct fill_box fb;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    fb.dc = dst->win32.dc;
+    fb.brush = CreateSolidBrush (color_to_rgb(color));
+    if (!fb.brush)
+       return _cairo_win32_print_gdi_error (__FUNCTION__);
+
+    if (! _cairo_boxes_for_each_box (boxes, fill_box, &fb))
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+
+    DeleteObject (fb.brush);
+
+    return status;
+}
+
+static cairo_bool_t source_contains_box (cairo_box_t *box, void *closure)
+{
+    struct check_box *data = closure;
+
+    /* The box is pixel-aligned so the truncation is safe. */
+    return
+       _cairo_fixed_integer_part (box->p1.x) + data->tx >= data->limit.x &&
+       _cairo_fixed_integer_part (box->p1.y) + data->ty >= data->limit.y &&
+       _cairo_fixed_integer_part (box->p2.x) + data->tx <= data->limit.x + data->limit.width &&
+       _cairo_fixed_integer_part (box->p2.y) + data->ty <= data->limit.y + data->limit.height;
+}
+
+static cairo_status_t
+copy_boxes (cairo_win32_display_surface_t *dst,
+           const cairo_pattern_t *source,
+           cairo_boxes_t *boxes)
+{
+    const cairo_surface_pattern_t *pattern;
+    struct copy_box cb;
+    cairo_surface_t *surface;
+    cairo_status_t status;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    pattern = (const cairo_surface_pattern_t *) source;
+    surface = _cairo_surface_get_source (pattern->surface, &cb.limit);
+    if (surface->type == CAIRO_SURFACE_TYPE_IMAGE) {
+       surface = to_image_surface(surface)->parent;
+       if (surface == NULL)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+    if (surface->type != CAIRO_SURFACE_TYPE_WIN32)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (! _cairo_matrix_is_integer_translation (&source->matrix,
+                                               &cb.tx, &cb.ty))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    cb.dst = dst->win32.dc;
+    cb.src = to_win32_surface(surface)->dc;
+
+    /* First check that the data is entirely within the image */
+    if (! _cairo_boxes_for_each_box (boxes, source_contains_box, &cb))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _cairo_surface_flush (surface);
+    if (status)
+       return status;
+
+    cb.tx += cb.limit.x;
+    cb.ty += cb.limit.y;
+    status = CAIRO_STATUS_SUCCESS;
+    if (! _cairo_boxes_for_each_box (boxes, copy_box, &cb))
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+
+    _cairo_win32_display_surface_discard_fallback (dst);
+    return status;
+}
+
+static cairo_status_t
+upload_boxes (cairo_win32_display_surface_t *dst,
+             const cairo_pattern_t *source,
+             cairo_boxes_t *boxes)
+{
+    const cairo_surface_pattern_t *pattern;
+    struct upload_box cb;
+    cairo_surface_t *surface;
+    cairo_image_surface_t *image;
+    void *image_extra;
+    cairo_status_t status;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+
+    if ((dst->win32.flags & CAIRO_WIN32_SURFACE_CAN_STRETCHDIB) == 0)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (! _cairo_matrix_is_integer_translation (&source->matrix,
+                                               &cb.tx, &cb.ty))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    pattern = (const cairo_surface_pattern_t *) source;
+    surface = _cairo_surface_get_source (pattern->surface, &cb.limit);
+
+    /* First check that the data is entirely within the image */
+    if (! _cairo_boxes_for_each_box (boxes, source_contains_box, &cb))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (surface->type != CAIRO_SURFACE_TYPE_IMAGE) {
+       status = _cairo_surface_acquire_source_image (surface,
+                                                     &image, &image_extra);
+       if (status)
+           return status;
+    } else
+       image = to_image_surface(surface);
+
+    status = CAIRO_INT_STATUS_UNSUPPORTED;
+    if (!(image->format == CAIRO_FORMAT_ARGB32 ||
+         image->format == CAIRO_FORMAT_RGB24))
+       goto err;
+    if (image->stride != 4*image->width)
+       goto err;
+
+    cb.dst = dst->win32.dc;
+    cb.data = image->data;
+
+    cb.bi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
+    cb.bi.bmiHeader.biWidth = image->width;
+    cb.bi.bmiHeader.biHeight = -image->height;
+    cb.bi.bmiHeader.biSizeImage = 0;
+    cb.bi.bmiHeader.biXPelsPerMeter = PELS_72DPI;
+    cb.bi.bmiHeader.biYPelsPerMeter = PELS_72DPI;
+    cb.bi.bmiHeader.biPlanes = 1;
+    cb.bi.bmiHeader.biBitCount = 32;
+    cb.bi.bmiHeader.biCompression = BI_RGB;
+    cb.bi.bmiHeader.biClrUsed = 0;
+    cb.bi.bmiHeader.biClrImportant = 0;
+
+    cb.tx += cb.limit.x;
+    cb.ty += cb.limit.y;
+    status = CAIRO_STATUS_SUCCESS;
+    if (! _cairo_boxes_for_each_box (boxes, upload_box, &cb))
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+
+    _cairo_win32_display_surface_discard_fallback (dst);
+err:
+    if (&image->base != surface)
+       _cairo_surface_release_source_image (surface, image, image_extra);
+
+    return status;
+}
+
+static cairo_status_t
+alpha_blend_boxes (cairo_win32_display_surface_t *dst,
+                  const cairo_pattern_t *source,
+                  cairo_boxes_t *boxes,
+                  uint8_t alpha)
+{
+    const cairo_surface_pattern_t *pattern;
+    struct copy_box cb;
+    cairo_surface_t *surface;
+    cairo_win32_display_surface_t *src;
+    cairo_status_t status;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    if (source->type != CAIRO_PATTERN_TYPE_SURFACE)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    pattern = (const cairo_surface_pattern_t *) source;
+    surface = _cairo_surface_get_source (pattern->surface, &cb.limit);
+    if (surface->type == CAIRO_SURFACE_TYPE_IMAGE) {
+       surface = to_image_surface(surface)->parent;
+       if (surface == NULL)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+    }
+    if (surface->type != CAIRO_SURFACE_TYPE_WIN32)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (! _cairo_matrix_is_integer_translation (&source->matrix,
+                                               &cb.tx, &cb.ty))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    src = to_win32_display_surface (surface);
+    cb.dst = dst->win32.dc;
+    cb.src = src->win32.dc;
+
+    /* First check that the data is entirely within the image */
+    if (! _cairo_boxes_for_each_box (boxes, source_contains_box, &cb))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _cairo_surface_flush (&src->win32.base);
+    if (status)
+       return status;
+
+    cb.bf.BlendOp = AC_SRC_OVER;
+    cb.bf.BlendFlags = 0;
+    cb.bf.SourceConstantAlpha = alpha;
+    cb.bf.AlphaFormat = (src->win32.format == CAIRO_FORMAT_ARGB32) ? AC_SRC_ALPHA : 0;
+    cb.alpha_blend = to_win32_device(dst->win32.base.device)->alpha_blend;
+
+    cb.tx += cb.limit.x;
+    cb.ty += cb.limit.y;
+    status = CAIRO_STATUS_SUCCESS;
+    if (! _cairo_boxes_for_each_box (boxes, alpha_box, &cb))
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+
+    _cairo_win32_display_surface_discard_fallback (dst);
+    return status;
+}
+
+static cairo_bool_t
+can_alpha_blend (cairo_win32_display_surface_t *dst)
+{
+    if ((dst->win32.flags & CAIRO_WIN32_SURFACE_CAN_ALPHABLEND) == 0)
+       return FALSE;
+
+    return to_win32_device(dst->win32.base.device)->alpha_blend != NULL;
+}
+
+static cairo_status_t
+draw_boxes (cairo_composite_rectangles_t *composite,
+           cairo_boxes_t *boxes)
+{
+    cairo_win32_display_surface_t *dst = to_win32_display_surface(composite->surface);
+    cairo_operator_t op = composite->op;
+    const cairo_pattern_t *src = &composite->source_pattern.base;
+    cairo_int_status_t status;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    if (boxes->num_boxes == 0 && composite->is_bounded)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (!boxes->is_pixel_aligned)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (op == CAIRO_OPERATOR_CLEAR)
+       op = CAIRO_OPERATOR_SOURCE;
+
+    if (op == CAIRO_OPERATOR_OVER &&
+       _cairo_pattern_is_opaque (src, &composite->bounded))
+       op = CAIRO_OPERATOR_SOURCE;
+
+    if (dst->win32.base.is_clear &&
+       (op == CAIRO_OPERATOR_OVER || op == CAIRO_OPERATOR_ADD))
+       op = CAIRO_OPERATOR_SOURCE;
+
+    if (op == CAIRO_OPERATOR_SOURCE) {
+       status = CAIRO_INT_STATUS_UNSUPPORTED;
+       if (src->type == CAIRO_PATTERN_TYPE_SURFACE) {
+           status = copy_boxes (dst, src, boxes);
+           if (status == CAIRO_INT_STATUS_UNSUPPORTED)
+               status = upload_boxes (dst, src, boxes);
+       } else if (src->type == CAIRO_PATTERN_TYPE_SOLID) {
+           status = fill_boxes (dst, src, boxes);
+       }
+       return status;
+    }
+
+    if (op == CAIRO_OPERATOR_OVER && can_alpha_blend (dst))
+       return alpha_blend_boxes (dst, src, boxes, 255);
+
+    return CAIRO_INT_STATUS_UNSUPPORTED;
+}
+
+static cairo_status_t
+opacity_boxes (cairo_composite_rectangles_t *composite,
+              cairo_boxes_t *boxes)
+{
+    cairo_win32_display_surface_t *dst = to_win32_display_surface(composite->surface);
+    cairo_operator_t op = composite->op;
+    const cairo_pattern_t *src = &composite->source_pattern.base;
+
+    TRACE ((stderr, "%s\n", __FUNCTION__));
+    if (composite->mask_pattern.base.type != CAIRO_PATTERN_TYPE_SOLID)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (boxes->num_boxes == 0 && composite->is_bounded)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (!boxes->is_pixel_aligned)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (op != CAIRO_OPERATOR_OVER)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (!can_alpha_blend (dst))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    return alpha_blend_boxes (dst, src, boxes,
+                             composite->mask_pattern.solid.color.alpha_short >> 8);
+}
+
+/* high-level compositor interface */
+
+static cairo_bool_t check_blit (cairo_composite_rectangles_t *composite)
+{
+    cairo_win32_display_surface_t *dst;
+
+    if (composite->clip->path)
+       return FALSE;
+
+    dst = to_win32_display_surface (composite->surface);
+    if (dst->fallback)
+       return FALSE;
+
+    if (dst->win32.format != CAIRO_FORMAT_RGB24)
+       return FALSE;
+
+    if (dst->win32.flags & CAIRO_WIN32_SURFACE_CAN_BITBLT)
+       return TRUE;
+
+    return dst->image == NULL;
+}
+
+static cairo_int_status_t
+_cairo_win32_gdi_compositor_paint (const cairo_compositor_t    *compositor,
+                                  cairo_composite_rectangles_t *composite)
+{
+    cairo_int_status_t status = CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (check_blit (composite)) {
+       cairo_boxes_t boxes;
+
+       TRACE ((stderr, "%s\n", __FUNCTION__));
+       _cairo_clip_steal_boxes (composite->clip, &boxes);
+       status = draw_boxes (composite, &boxes);
+       _cairo_clip_unsteal_boxes (composite->clip, &boxes);
+    }
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_gdi_compositor_mask (const cairo_compositor_t     *compositor,
+                                 cairo_composite_rectangles_t *composite)
+{
+    cairo_int_status_t status = CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (check_blit (composite)) {
+       cairo_boxes_t boxes;
+
+       TRACE ((stderr, "%s\n", __FUNCTION__));
+       _cairo_clip_steal_boxes (composite->clip, &boxes);
+       status = opacity_boxes (composite, &boxes);
+       _cairo_clip_unsteal_boxes (composite->clip, &boxes);
+    }
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_gdi_compositor_stroke (const cairo_compositor_t   *compositor,
+                                   cairo_composite_rectangles_t *composite,
+                                   const cairo_path_fixed_t    *path,
+                                   const cairo_stroke_style_t  *style,
+                                   const cairo_matrix_t        *ctm,
+                                   const cairo_matrix_t        *ctm_inverse,
+                                   double                       tolerance,
+                                   cairo_antialias_t            antialias)
+{
+    cairo_int_status_t status;
+
+    status = CAIRO_INT_STATUS_UNSUPPORTED;
+    if (check_blit (composite) &&
+       _cairo_path_fixed_stroke_is_rectilinear (path)) {
+       cairo_boxes_t boxes;
+
+       TRACE ((stderr, "%s\n", __FUNCTION__));
+       _cairo_boxes_init_with_clip (&boxes, composite->clip);
+       status = _cairo_path_fixed_stroke_rectilinear_to_boxes (path,
+                                                               style,
+                                                               ctm,
+                                                               antialias,
+                                                               &boxes);
+       if (likely (status == CAIRO_INT_STATUS_SUCCESS))
+           status = draw_boxes (composite, &boxes);
+       _cairo_boxes_fini (&boxes);
+    }
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_gdi_compositor_fill (const cairo_compositor_t     *compositor,
+                                 cairo_composite_rectangles_t  *composite,
+                                 const cairo_path_fixed_t      *path,
+                                 cairo_fill_rule_t              fill_rule,
+                                 double                         tolerance,
+                                 cairo_antialias_t              antialias)
+{
+    cairo_int_status_t status;
+
+    status = CAIRO_INT_STATUS_UNSUPPORTED;
+    if (check_blit (composite) &&
+       _cairo_path_fixed_fill_is_rectilinear (path)) {
+       cairo_boxes_t boxes;
+
+       TRACE ((stderr, "%s\n", __FUNCTION__));
+       _cairo_boxes_init_with_clip (&boxes, composite->clip);
+       status = _cairo_path_fixed_fill_rectilinear_to_boxes (path,
+                                                             fill_rule,
+                                                             antialias,
+                                                             &boxes);
+       if (likely (status == CAIRO_INT_STATUS_SUCCESS))
+           status = draw_boxes (composite, &boxes);
+       _cairo_boxes_fini (&boxes);
+    }
+
+    return status;
+}
+
+static cairo_bool_t check_glyphs (cairo_composite_rectangles_t *composite,
+                                 cairo_scaled_font_t *scaled_font)
+{
+    if (! _cairo_clip_is_region (composite->clip))
+       return FALSE;
+
+    if (cairo_scaled_font_get_type (scaled_font) != CAIRO_FONT_TYPE_WIN32)
+       return FALSE;
+
+    if (! _cairo_pattern_is_opaque_solid (&composite->source_pattern.base))
+       return FALSE;
+
+    return (composite->op == CAIRO_OPERATOR_CLEAR ||
+           composite->op == CAIRO_OPERATOR_SOURCE ||
+           composite->op == CAIRO_OPERATOR_OVER);
+}
+
+static cairo_int_status_t
+_cairo_win32_gdi_compositor_glyphs (const cairo_compositor_t   *compositor,
+                                   cairo_composite_rectangles_t*composite,
+                                   cairo_scaled_font_t         *scaled_font,
+                                   cairo_glyph_t               *glyphs,
+                                   int                          num_glyphs,
+                                   cairo_bool_t                 overlap)
+{
+    cairo_int_status_t status;
+
+    status = CAIRO_INT_STATUS_UNSUPPORTED;
+    if (check_blit (composite) && check_glyphs (composite, scaled_font)) {
+       cairo_win32_display_surface_t *dst = to_win32_display_surface (composite->surface);
+
+       TRACE ((stderr, "%s\n", __FUNCTION__));
+       status = _cairo_win32_display_surface_set_clip(dst, composite->clip);
+       if (status)
+           return status;
+
+       status = _cairo_win32_surface_emit_glyphs (&dst->win32,
+                                                  &composite->source_pattern.base,
+                                                  glyphs,
+                                                  num_glyphs,
+                                                  scaled_font,
+                                                  TRUE);
+
+       _cairo_win32_display_surface_unset_clip (dst);
+    }
+
+    return status;
+}
+
+const cairo_compositor_t *
+_cairo_win32_gdi_compositor_get (void)
+{
+    static cairo_compositor_t compositor;
+
+    if (compositor.delegate == NULL) {
+       compositor.delegate = &_cairo_fallback_compositor;
+
+       compositor.paint  = _cairo_win32_gdi_compositor_paint;
+       compositor.mask   = _cairo_win32_gdi_compositor_mask;
+       compositor.fill   = _cairo_win32_gdi_compositor_fill;
+       compositor.stroke = _cairo_win32_gdi_compositor_stroke;
+       compositor.glyphs = _cairo_win32_gdi_compositor_glyphs;
+    }
+
+    return &compositor;
+}
diff --git a/src/win32/cairo-win32-printing-surface.c b/src/win32/cairo-win32-printing-surface.c
new file mode 100644 (file)
index 0000000..be91445
--- /dev/null
@@ -0,0 +1,1917 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2007, 2008 Adrian Johnson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Adrian Johnson.
+ *
+ * Contributor(s):
+ *      Adrian Johnson <ajohnson@redneon.com>
+ *      Vladimir Vukicevic <vladimir@pobox.com>
+ */
+
+#define WIN32_LEAN_AND_MEAN
+/* We require Windows 2000 features such as ETO_PDY */
+#if !defined(WINVER) || (WINVER < 0x0500)
+# define WINVER 0x0500
+#endif
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
+# define _WIN32_WINNT 0x0500
+#endif
+
+#include "cairoint.h"
+
+#include "cairo-default-context-private.h"
+#include "cairo-error-private.h"
+#include "cairo-paginated-private.h"
+
+#include "cairo-clip-private.h"
+#include "cairo-win32-private.h"
+#include "cairo-recording-surface-inline.h"
+#include "cairo-scaled-font-subsets-private.h"
+#include "cairo-image-info-private.h"
+#include "cairo-image-surface-private.h"
+#include "cairo-surface-backend-private.h"
+#include "cairo-surface-clipper-private.h"
+
+#include <windows.h>
+
+#if !defined(POSTSCRIPT_IDENTIFY)
+# define POSTSCRIPT_IDENTIFY 0x1015
+#endif
+
+#if !defined(PSIDENT_GDICENTRIC)
+# define PSIDENT_GDICENTRIC 0x0000
+#endif
+
+#if !defined(GET_PS_FEATURESETTING)
+# define GET_PS_FEATURESETTING 0x1019
+#endif
+
+#if !defined(FEATURESETTING_PSLEVEL)
+# define FEATURESETTING_PSLEVEL 0x0002
+#endif
+
+#if !defined(GRADIENT_FILL_RECT_H)
+# define GRADIENT_FILL_RECT_H 0x00
+#endif
+
+#if !defined(CHECKJPEGFORMAT)
+# define CHECKJPEGFORMAT 0x1017
+#endif
+
+#if !defined(CHECKPNGFORMAT)
+# define CHECKPNGFORMAT 0x1018
+#endif
+
+#define PELS_72DPI  ((LONG)(72. / 0.0254))
+
+static const char *_cairo_win32_printing_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    CAIRO_MIME_TYPE_PNG,
+    NULL
+};
+
+static const cairo_surface_backend_t cairo_win32_printing_surface_backend;
+static const cairo_paginated_surface_backend_t cairo_win32_surface_paginated_backend;
+
+static void
+_cairo_win32_printing_surface_init_ps_mode (cairo_win32_printing_surface_t *surface)
+{
+    DWORD word;
+    INT ps_feature, ps_level;
+
+    word = PSIDENT_GDICENTRIC;
+    if (ExtEscape (surface->win32.dc, POSTSCRIPT_IDENTIFY, sizeof(DWORD), (char *)&word, 0, (char *)NULL) <= 0)
+       return;
+
+    ps_feature = FEATURESETTING_PSLEVEL;
+    if (ExtEscape (surface->win32.dc, GET_PS_FEATURESETTING, sizeof(INT),
+                  (char *)&ps_feature, sizeof(INT), (char *)&ps_level) <= 0)
+       return;
+
+    if (ps_level >= 3)
+       surface->win32.flags |= CAIRO_WIN32_SURFACE_CAN_RECT_GRADIENT;
+}
+
+static void
+_cairo_win32_printing_surface_init_image_support (cairo_win32_printing_surface_t *surface)
+{
+    DWORD word;
+
+    word = CHECKJPEGFORMAT;
+    if (ExtEscape(surface->win32.dc, QUERYESCSUPPORT, sizeof(word), (char *)&word, 0, (char *)NULL) > 0)
+       surface->win32.flags |= CAIRO_WIN32_SURFACE_CAN_CHECK_JPEG;
+
+    word = CHECKPNGFORMAT;
+    if (ExtEscape(surface->win32.dc, QUERYESCSUPPORT, sizeof(word), (char *)&word, 0, (char *)NULL) > 0)
+       surface->win32.flags |= CAIRO_WIN32_SURFACE_CAN_CHECK_PNG;
+}
+
+/* When creating an EMF file, ExtTextOut with ETO_GLYPH_INDEX does not
+ * work unless the GDI function GdiInitializeLanguagePack() has been
+ * called.
+ *
+ *   http://m-a-tech.blogspot.com/2009/04/emf-buffer-idiocracy.html
+ *
+ * The only information I could find on the how to use this
+ * undocumented function is the use in:
+ *
+ * http://src.chromium.org/viewvc/chrome/trunk/src/chrome/renderer/render_process.cc?view=markup
+ *
+ * to solve the same problem. The above code first checks if LPK.DLL
+ * is already loaded. If it is not it calls
+ * GdiInitializeLanguagePack() using the prototype
+ *   BOOL GdiInitializeLanguagePack (int)
+ * and argument 0.
+ */
+static void
+_cairo_win32_printing_surface_init_language_pack (cairo_win32_printing_surface_t *surface)
+{
+    typedef BOOL (WINAPI *gdi_init_lang_pack_func_t)(int);
+    gdi_init_lang_pack_func_t gdi_init_lang_pack;
+    HMODULE module;
+
+    if (GetModuleHandleW (L"LPK.DLL"))
+       return;
+
+    module = GetModuleHandleW (L"GDI32.DLL");
+    if (module) {
+       gdi_init_lang_pack = (gdi_init_lang_pack_func_t)
+           GetProcAddress (module, "GdiInitializeLanguagePack");
+       if (gdi_init_lang_pack)
+           gdi_init_lang_pack (0);
+    }
+}
+
+static cairo_int_status_t
+analyze_surface_pattern_transparency (cairo_surface_pattern_t *pattern)
+{
+    cairo_image_surface_t  *image;
+    void                  *image_extra;
+    cairo_int_status_t      status;
+    cairo_image_transparency_t transparency;
+
+    status = _cairo_surface_acquire_source_image (pattern->surface,
+                                                 &image,
+                                                 &image_extra);
+    if (status)
+       return status;
+
+    transparency = _cairo_image_analyze_transparency (image);
+    switch (transparency) {
+    case CAIRO_IMAGE_UNKNOWN:
+       ASSERT_NOT_REACHED;
+    case CAIRO_IMAGE_IS_OPAQUE:
+       status = CAIRO_STATUS_SUCCESS;
+       break;
+
+    case CAIRO_IMAGE_HAS_BILEVEL_ALPHA:
+    case CAIRO_IMAGE_HAS_ALPHA:
+       status = CAIRO_INT_STATUS_FLATTEN_TRANSPARENCY;
+       break;
+    }
+
+    _cairo_surface_release_source_image (pattern->surface, image, image_extra);
+
+    return status;
+}
+
+static cairo_bool_t
+surface_pattern_supported (const cairo_surface_pattern_t *pattern)
+{
+    if (_cairo_surface_is_recording (pattern->surface))
+       return TRUE;
+
+    if (cairo_surface_get_type (pattern->surface) != CAIRO_SURFACE_TYPE_WIN32 &&
+       pattern->surface->backend->acquire_source_image == NULL)
+    {
+       return FALSE;
+    }
+
+    return TRUE;
+}
+
+static cairo_bool_t
+pattern_supported (cairo_win32_printing_surface_t *surface, const cairo_pattern_t *pattern)
+{
+    if (pattern->type == CAIRO_PATTERN_TYPE_SOLID)
+       return TRUE;
+
+    if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE)
+       return surface_pattern_supported ((const cairo_surface_pattern_t *) pattern);
+
+    if (pattern->type == CAIRO_PATTERN_TYPE_LINEAR)
+       return surface->win32.flags & CAIRO_WIN32_SURFACE_CAN_RECT_GRADIENT;
+
+    return FALSE;
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_analyze_operation (cairo_win32_printing_surface_t *surface,
+                                                 cairo_operator_t       op,
+                                                 const cairo_pattern_t *pattern)
+{
+    if (! pattern_supported (surface, pattern))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (!(op == CAIRO_OPERATOR_SOURCE ||
+         op == CAIRO_OPERATOR_OVER ||
+         op == CAIRO_OPERATOR_CLEAR))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) {
+       cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) pattern;
+
+       if ( _cairo_surface_is_recording (surface_pattern->surface))
+           return CAIRO_INT_STATUS_ANALYZE_RECORDING_SURFACE_PATTERN;
+    }
+
+    if (op == CAIRO_OPERATOR_SOURCE ||
+       op == CAIRO_OPERATOR_CLEAR)
+       return CAIRO_STATUS_SUCCESS;
+
+    /* CAIRO_OPERATOR_OVER is only supported for opaque patterns. If
+     * the pattern contains transparency, we return
+     * CAIRO_INT_STATUS_FLATTEN_TRANSPARENCY to the analysis
+     * surface. If the analysis surface determines that there is
+     * anything drawn under this operation, a fallback image will be
+     * used. Otherwise the operation will be replayed during the
+     * render stage and we blend the transarency into the white
+     * background to convert the pattern to opaque.
+     */
+
+    if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) {
+       cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) pattern;
+
+       return analyze_surface_pattern_transparency (surface_pattern);
+    }
+
+    if (_cairo_pattern_is_opaque (pattern, NULL))
+       return CAIRO_STATUS_SUCCESS;
+    else
+       return CAIRO_INT_STATUS_FLATTEN_TRANSPARENCY;
+}
+
+static cairo_bool_t
+_cairo_win32_printing_surface_operation_supported (cairo_win32_printing_surface_t *surface,
+                                                   cairo_operator_t       op,
+                                                   const cairo_pattern_t *pattern)
+{
+    if (_cairo_win32_printing_surface_analyze_operation (surface, op, pattern) != CAIRO_INT_STATUS_UNSUPPORTED)
+       return TRUE;
+    else
+       return FALSE;
+}
+
+static void
+_cairo_win32_printing_surface_init_clear_color (cairo_win32_printing_surface_t *surface,
+                                               cairo_solid_pattern_t *color)
+{
+    if (surface->content == CAIRO_CONTENT_COLOR_ALPHA)
+       _cairo_pattern_init_solid (color, CAIRO_COLOR_WHITE);
+    else
+       _cairo_pattern_init_solid (color, CAIRO_COLOR_BLACK);
+}
+
+static COLORREF
+_cairo_win32_printing_surface_flatten_transparency (cairo_win32_printing_surface_t *surface,
+                                                   const cairo_color_t   *color)
+{
+    COLORREF c;
+    BYTE red, green, blue;
+
+    red   = color->red_short   >> 8;
+    green = color->green_short >> 8;
+    blue  = color->blue_short  >> 8;
+
+    if (!CAIRO_COLOR_IS_OPAQUE(color)) {
+       if (surface->content == CAIRO_CONTENT_COLOR_ALPHA) {
+           /* Blend into white */
+           uint8_t one_minus_alpha = 255 - (color->alpha_short >> 8);
+
+           red   = (color->red_short   >> 8) + one_minus_alpha;
+           green = (color->green_short >> 8) + one_minus_alpha;
+           blue  = (color->blue_short  >> 8) + one_minus_alpha;
+       } else {
+           /* Blend into black */
+           red   = (color->red_short   >> 8);
+           green = (color->green_short >> 8);
+           blue  = (color->blue_short  >> 8);
+       }
+    }
+    c = RGB (red, green, blue);
+
+    return c;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_select_solid_brush (cairo_win32_printing_surface_t *surface,
+                                                  const cairo_pattern_t *source)
+{
+    cairo_solid_pattern_t *pattern = (cairo_solid_pattern_t *) source;
+    COLORREF color;
+
+    color = _cairo_win32_printing_surface_flatten_transparency (surface,
+                                                               &pattern->color);
+    surface->brush = CreateSolidBrush (color);
+    if (!surface->brush)
+       return _cairo_win32_print_gdi_error ("_cairo_win32_surface_select_solid_brush(CreateSolidBrush)");
+    surface->old_brush = SelectObject (surface->win32.dc, surface->brush);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_win32_printing_surface_done_solid_brush (cairo_win32_printing_surface_t *surface)
+{
+    if (surface->old_brush) {
+       SelectObject (surface->win32.dc, surface->old_brush);
+       DeleteObject (surface->brush);
+       surface->old_brush = NULL;
+    }
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_get_ctm_clip_box (cairo_win32_printing_surface_t *surface,
+                                               RECT                  *clip)
+{
+    XFORM xform;
+
+    _cairo_matrix_to_win32_xform (&surface->ctm, &xform);
+    if (!ModifyWorldTransform (surface->win32.dc, &xform, MWT_LEFTMULTIPLY))
+       return _cairo_win32_print_gdi_error ("_cairo_win32_printing_surface_get_clip_box:ModifyWorldTransform");
+    GetClipBox (surface->win32.dc, clip);
+
+    _cairo_matrix_to_win32_xform (&surface->gdi_ctm, &xform);
+    if (!SetWorldTransform (surface->win32.dc, &xform))
+       return _cairo_win32_print_gdi_error ("_cairo_win32_printing_surface_get_clip_box:SetWorldTransform");
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_paint_solid_pattern (cairo_win32_printing_surface_t *surface,
+                                                   const cairo_pattern_t *pattern)
+{
+    RECT clip;
+    cairo_status_t status;
+
+    GetClipBox (surface->win32.dc, &clip);
+    status = _cairo_win32_printing_surface_select_solid_brush (surface, pattern);
+    if (status)
+       return status;
+
+    FillRect (surface->win32.dc, &clip, surface->brush);
+    _cairo_win32_printing_surface_done_solid_brush (surface);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_paint_recording_pattern (cairo_win32_printing_surface_t   *surface,
+                                                      cairo_surface_pattern_t *pattern)
+{
+    cairo_content_t old_content;
+    cairo_matrix_t old_ctm;
+    cairo_bool_t old_has_ctm;
+    cairo_rectangle_int_t recording_extents;
+    cairo_status_t status;
+    cairo_extend_t extend;
+    cairo_matrix_t p2d;
+    XFORM xform;
+    int x_tile, y_tile, left, right, top, bottom;
+    RECT clip;
+    cairo_recording_surface_t *recording_surface = (cairo_recording_surface_t *) pattern->surface;
+    cairo_box_t bbox;
+
+    extend = cairo_pattern_get_extend (&pattern->base);
+
+    p2d = pattern->base.matrix;
+    status = cairo_matrix_invert (&p2d);
+    /* _cairo_pattern_set_matrix guarantees invertibility */
+    assert (status == CAIRO_STATUS_SUCCESS);
+
+    old_ctm = surface->ctm;
+    old_has_ctm = surface->has_ctm;
+    cairo_matrix_multiply (&p2d, &p2d, &surface->ctm);
+    surface->ctm = p2d;
+    SaveDC (surface->win32.dc);
+    _cairo_matrix_to_win32_xform (&p2d, &xform);
+
+    status = _cairo_recording_surface_get_bbox (recording_surface, &bbox, NULL);
+    if (status)
+       return status;
+
+    _cairo_box_round_to_rectangle (&bbox, &recording_extents);
+
+    status = _cairo_win32_printing_surface_get_ctm_clip_box (surface, &clip);
+    if (status)
+       return status;
+
+    if (extend == CAIRO_EXTEND_REPEAT || extend == CAIRO_EXTEND_REFLECT) {
+       left = floor (clip.left / _cairo_fixed_to_double (bbox.p2.x - bbox.p1.x));
+       right = ceil (clip.right / _cairo_fixed_to_double (bbox.p2.x - bbox.p1.x));
+       top = floor (clip.top / _cairo_fixed_to_double (bbox.p2.y - bbox.p1.y));
+       bottom = ceil (clip.bottom / _cairo_fixed_to_double (bbox.p2.y - bbox.p1.y));
+    } else {
+       left = 0;
+       right = 1;
+       top = 0;
+       bottom = 1;
+    }
+
+    old_content = surface->content;
+    if (recording_surface->base.content == CAIRO_CONTENT_COLOR) {
+       surface->content = CAIRO_CONTENT_COLOR;
+       status = _cairo_win32_printing_surface_paint_solid_pattern (surface,
+                                                                   &_cairo_pattern_black.base);
+       if (status)
+           return status;
+    }
+
+    for (y_tile = top; y_tile < bottom; y_tile++) {
+       for (x_tile = left; x_tile < right; x_tile++) {
+           cairo_matrix_t m;
+           double x, y;
+
+           SaveDC (surface->win32.dc);
+           m = p2d;
+           cairo_matrix_translate (&m,
+                                   x_tile*recording_extents.width,
+                                   y_tile*recording_extents.height);
+           if (extend == CAIRO_EXTEND_REFLECT) {
+               if (x_tile % 2) {
+                   cairo_matrix_translate (&m, recording_extents.width, 0);
+                   cairo_matrix_scale (&m, -1, 1);
+               }
+               if (y_tile % 2) {
+                   cairo_matrix_translate (&m, 0, recording_extents.height);
+                   cairo_matrix_scale (&m, 1, -1);
+               }
+           }
+           surface->ctm = m;
+           surface->has_ctm = !_cairo_matrix_is_identity (&surface->ctm);
+
+           /* Set clip path around bbox of the pattern. */
+           BeginPath (surface->win32.dc);
+
+           x = 0;
+           y = 0;
+           cairo_matrix_transform_point (&surface->ctm, &x, &y);
+           MoveToEx (surface->win32.dc, (int) x, (int) y, NULL);
+
+           x = recording_extents.width;
+           y = 0;
+           cairo_matrix_transform_point (&surface->ctm, &x, &y);
+           LineTo (surface->win32.dc, (int) x, (int) y);
+
+           x = recording_extents.width;
+           y = recording_extents.height;
+           cairo_matrix_transform_point (&surface->ctm, &x, &y);
+           LineTo (surface->win32.dc, (int) x, (int) y);
+
+           x = 0;
+           y = recording_extents.height;
+           cairo_matrix_transform_point (&surface->ctm, &x, &y);
+           LineTo (surface->win32.dc, (int) x, (int) y);
+
+           CloseFigure (surface->win32.dc);
+           EndPath (surface->win32.dc);
+           SelectClipPath (surface->win32.dc, RGN_AND);
+
+           SaveDC (surface->win32.dc); /* Allow clip path to be reset during replay */
+           status = _cairo_recording_surface_replay_region (&recording_surface->base, NULL,
+                                                            &surface->win32.base,
+                                                            CAIRO_RECORDING_REGION_NATIVE);
+           assert (status != CAIRO_INT_STATUS_UNSUPPORTED);
+           /* Restore both the clip save and our earlier path SaveDC */
+           RestoreDC (surface->win32.dc, -2);
+
+           if (status)
+               return status;
+       }
+    }
+
+    surface->content = old_content;
+    surface->ctm = old_ctm;
+    surface->has_ctm = old_has_ctm;
+    RestoreDC (surface->win32.dc, -1);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_check_jpeg (cairo_win32_printing_surface_t   *surface,
+                                         cairo_surface_t         *source,
+                                         const unsigned char    **data,
+                                         unsigned long           *length,
+                                         cairo_image_info_t      *info)
+{
+    const unsigned char *mime_data;
+    unsigned long mime_data_length;
+    cairo_int_status_t status;
+    DWORD result;
+
+    if (!(surface->win32.flags & CAIRO_WIN32_SURFACE_CAN_CHECK_JPEG))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    cairo_surface_get_mime_data (source, CAIRO_MIME_TYPE_JPEG,
+                                &mime_data, &mime_data_length);
+    if (mime_data == NULL)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _cairo_image_info_get_jpeg_info (info, mime_data, mime_data_length);
+    if (status)
+       return status;
+
+    result = 0;
+    if (ExtEscape(surface->win32.dc, CHECKJPEGFORMAT, mime_data_length, (char *) mime_data,
+                 sizeof(result), (char *) &result) <= 0)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (result != 1)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    *data = mime_data;
+    *length = mime_data_length;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_check_png (cairo_win32_printing_surface_t   *surface,
+                                        cairo_surface_t         *source,
+                                        const unsigned char    **data,
+                                        unsigned long           *length,
+                                        cairo_image_info_t      *info)
+{
+    const unsigned char *mime_data;
+    unsigned long mime_data_length;
+
+    cairo_int_status_t status;
+    DWORD result;
+
+    if (!(surface->win32.flags & CAIRO_WIN32_SURFACE_CAN_CHECK_PNG))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    cairo_surface_get_mime_data (source, CAIRO_MIME_TYPE_PNG,
+                                &mime_data, &mime_data_length);
+    if (mime_data == NULL)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    status = _cairo_image_info_get_png_info (info, mime_data, mime_data_length);
+    if (status)
+       return status;
+
+    result = 0;
+    if (ExtEscape(surface->win32.dc, CHECKPNGFORMAT, mime_data_length, (char *) mime_data,
+                 sizeof(result), (char *) &result) <= 0)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (result != 1)
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    *data = mime_data;
+    *length = mime_data_length;
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_paint_image_pattern (cairo_win32_printing_surface_t   *surface,
+                                                  cairo_surface_pattern_t *pattern)
+{
+    cairo_status_t status;
+    cairo_extend_t extend;
+    cairo_image_surface_t *image;
+    void *image_extra;
+    cairo_image_surface_t *opaque_image = NULL;
+    BITMAPINFO bi;
+    cairo_matrix_t m;
+    int oldmode;
+    XFORM xform;
+    int x_tile, y_tile, left, right, top, bottom;
+    RECT clip;
+    const cairo_color_t *background_color;
+    const unsigned char *mime_data;
+    unsigned long mime_size;
+    cairo_image_info_t mime_info;
+    cairo_bool_t use_mime;
+    DWORD mime_type;
+
+    /* If we can't use StretchDIBits with this surface, we can't do anything
+     * here.
+     */
+    if (!(surface->win32.flags & CAIRO_WIN32_SURFACE_CAN_STRETCHDIB))
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+
+    if (surface->content == CAIRO_CONTENT_COLOR_ALPHA)
+       background_color = CAIRO_COLOR_WHITE;
+    else
+       background_color = CAIRO_COLOR_BLACK;
+
+    extend = cairo_pattern_get_extend (&pattern->base);
+
+    status = _cairo_surface_acquire_source_image (pattern->surface,
+                                                 &image, &image_extra);
+    if (status)
+       return status;
+
+    if (image->base.status) {
+       status = image->base.status;
+       goto CLEANUP_IMAGE;
+    }
+
+    if (image->width == 0 || image->height == 0) {
+       status = CAIRO_STATUS_SUCCESS;
+       goto CLEANUP_IMAGE;
+    }
+
+    mime_type = BI_JPEG;
+    status = _cairo_win32_printing_surface_check_jpeg (surface,
+                                                      pattern->surface,
+                                                      &mime_data,
+                                                      &mime_size,
+                                                      &mime_info);
+    if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
+       mime_type = BI_PNG;
+       status = _cairo_win32_printing_surface_check_png (surface,
+                                                         pattern->surface,
+                                                         &mime_data,
+                                                         &mime_size,
+                                                         &mime_info);
+    }
+    if (_cairo_status_is_error (status))
+       return status;
+
+    use_mime = (status == CAIRO_STATUS_SUCCESS);
+
+    if (!use_mime && image->format != CAIRO_FORMAT_RGB24) {
+       cairo_surface_t *opaque_surface;
+       cairo_surface_pattern_t image_pattern;
+       cairo_solid_pattern_t background_pattern;
+
+       opaque_surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
+                                                    image->width,
+                                                    image->height);
+       if (opaque_surface->status) {
+           status = opaque_surface->status;
+           goto CLEANUP_OPAQUE_IMAGE;
+       }
+
+       _cairo_pattern_init_solid (&background_pattern,
+                                  background_color);
+       status = _cairo_surface_paint (opaque_surface,
+                                      CAIRO_OPERATOR_SOURCE,
+                                      &background_pattern.base,
+                                      NULL);
+       if (status)
+           goto CLEANUP_OPAQUE_IMAGE;
+
+       _cairo_pattern_init_for_surface (&image_pattern, &image->base);
+       status = _cairo_surface_paint (opaque_surface,
+                                      CAIRO_OPERATOR_OVER,
+                                      &image_pattern.base,
+                                      NULL);
+       _cairo_pattern_fini (&image_pattern.base);
+       if (status)
+           goto CLEANUP_OPAQUE_IMAGE;
+
+       opaque_image = (cairo_image_surface_t *) opaque_surface;
+    } else {
+       opaque_image = image;
+    }
+
+    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+    bi.bmiHeader.biWidth = use_mime ? mime_info.width : opaque_image->width;
+    bi.bmiHeader.biHeight = use_mime ? - mime_info.height : -opaque_image->height;
+    bi.bmiHeader.biSizeImage = use_mime ? mime_size : 0;
+    bi.bmiHeader.biXPelsPerMeter = PELS_72DPI;
+    bi.bmiHeader.biYPelsPerMeter = PELS_72DPI;
+    bi.bmiHeader.biPlanes = 1;
+    bi.bmiHeader.biBitCount = 32;
+    bi.bmiHeader.biCompression = use_mime ? mime_type : BI_RGB;
+    bi.bmiHeader.biClrUsed = 0;
+    bi.bmiHeader.biClrImportant = 0;
+
+    m = pattern->base.matrix;
+    status = cairo_matrix_invert (&m);
+    /* _cairo_pattern_set_matrix guarantees invertibility */
+    assert (status == CAIRO_STATUS_SUCCESS);
+
+    cairo_matrix_multiply (&m, &m, &surface->gdi_ctm);
+    SaveDC (surface->win32.dc);
+    _cairo_matrix_to_win32_xform (&m, &xform);
+
+    if (! SetWorldTransform (surface->win32.dc, &xform)) {
+       status = _cairo_win32_print_gdi_error ("_cairo_win32_printing_surface_paint_image_pattern");
+       goto CLEANUP_OPAQUE_IMAGE;
+    }
+
+    oldmode = SetStretchBltMode(surface->win32.dc, HALFTONE);
+
+    GetClipBox (surface->win32.dc, &clip);
+    if (extend == CAIRO_EXTEND_REPEAT || extend == CAIRO_EXTEND_REFLECT) {
+       left = floor ( clip.left / (double) opaque_image->width);
+       right = ceil (clip.right / (double) opaque_image->width);
+       top = floor (clip.top / (double) opaque_image->height);
+       bottom = ceil (clip.bottom / (double) opaque_image->height);
+    } else {
+       left = 0;
+       right = 1;
+       top = 0;
+       bottom = 1;
+    }
+
+    for (y_tile = top; y_tile < bottom; y_tile++) {
+       for (x_tile = left; x_tile < right; x_tile++) {
+           if (!StretchDIBits (surface->win32.dc,
+                               x_tile*opaque_image->width,
+                               y_tile*opaque_image->height,
+                               opaque_image->width,
+                               opaque_image->height,
+                               0,
+                               0,
+                               use_mime ? mime_info.width : opaque_image->width,
+                               use_mime ? mime_info.height : opaque_image->height,
+                               use_mime ? mime_data : opaque_image->data,
+                               &bi,
+                               DIB_RGB_COLORS,
+                               SRCCOPY))
+           {
+               status = _cairo_win32_print_gdi_error ("_cairo_win32_printing_surface_paint(StretchDIBits)");
+               goto CLEANUP_OPAQUE_IMAGE;
+           }
+       }
+    }
+    SetStretchBltMode(surface->win32.dc, oldmode);
+    RestoreDC (surface->win32.dc, -1);
+
+CLEANUP_OPAQUE_IMAGE:
+    if (opaque_image != image)
+       cairo_surface_destroy (&opaque_image->base);
+CLEANUP_IMAGE:
+    _cairo_surface_release_source_image (pattern->surface, image, image_extra);
+
+    return status;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_paint_surface_pattern (cairo_win32_printing_surface_t   *surface,
+                                                     cairo_surface_pattern_t *pattern)
+{
+    if (_cairo_surface_is_recording (pattern->surface)) {
+       return _cairo_win32_printing_surface_paint_recording_pattern (surface,
+                                                                     pattern);
+    } else {
+       return _cairo_win32_printing_surface_paint_image_pattern (surface,
+                                                                 pattern);
+    }
+}
+
+static void
+vertex_set_color (TRIVERTEX *vert, cairo_color_stop_t *color)
+{
+    /* MSDN says that the range here is 0x0000 .. 0xff00;
+     * that may well be a typo, but just chop the low bits
+     * here. */
+    vert->Alpha = 0xff00;
+    vert->Red   = color->red_short & 0xff00;
+    vert->Green = color->green_short & 0xff00;
+    vert->Blue  = color->blue_short & 0xff00;
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_paint_linear_pattern (cairo_win32_printing_surface_t *surface,
+                                                    cairo_linear_pattern_t *pattern)
+{
+    TRIVERTEX *vert;
+    GRADIENT_RECT *rect;
+    RECT clip;
+    XFORM xform;
+    int i, num_stops;
+    cairo_matrix_t mat, rot;
+    double p1x, p1y, p2x, p2y, xd, yd, d, sn, cs;
+    cairo_extend_t extend;
+    int range_start, range_stop, num_ranges, num_rects, stop;
+    int total_verts, total_rects;
+    cairo_status_t status;
+
+    extend = cairo_pattern_get_extend (&pattern->base.base);
+    SaveDC (surface->win32.dc);
+
+    mat = pattern->base.base.matrix;
+    status = cairo_matrix_invert (&mat);
+    /* _cairo_pattern_set_matrix guarantees invertibility */
+    assert (status == CAIRO_STATUS_SUCCESS);
+
+    cairo_matrix_multiply (&mat, &surface->ctm, &mat);
+
+    p1x = pattern->pd1.x;
+    p1y = pattern->pd1.y;
+    p2x = pattern->pd2.x;
+    p2y = pattern->pd2.y;
+    cairo_matrix_translate (&mat, p1x, p1y);
+
+    xd = p2x - p1x;
+    yd = p2y - p1y;
+    d = sqrt (xd*xd + yd*yd);
+    sn = yd/d;
+    cs = xd/d;
+    cairo_matrix_init (&rot,
+                      cs, sn,
+                      -sn, cs,
+                       0, 0);
+    cairo_matrix_multiply (&mat, &rot, &mat);
+
+    _cairo_matrix_to_win32_xform (&mat, &xform);
+
+    if (!SetWorldTransform (surface->win32.dc, &xform))
+       return _cairo_win32_print_gdi_error ("_win32_printing_surface_paint_linear_pattern:SetWorldTransform2");
+
+    GetClipBox (surface->win32.dc, &clip);
+
+    if (extend == CAIRO_EXTEND_REPEAT || extend == CAIRO_EXTEND_REFLECT) {
+       range_start = floor (clip.left / d);
+       range_stop = ceil (clip.right / d);
+    } else {
+       range_start = 0;
+       range_stop = 1;
+    }
+    num_ranges = range_stop - range_start;
+    num_stops = pattern->base.n_stops;
+    num_rects = num_stops - 1;
+
+    /* Add an extra four points and two rectangles for EXTEND_PAD */
+    vert = malloc (sizeof (TRIVERTEX) * (num_rects*2*num_ranges + 4));
+    rect = malloc (sizeof (GRADIENT_RECT) * (num_rects*num_ranges + 2));
+
+    for (i = 0; i < num_ranges*num_rects; i++) {
+       vert[i*2].y = (LONG) clip.top;
+       if (i%num_rects == 0) {
+           stop = 0;
+           if (extend == CAIRO_EXTEND_REFLECT && (range_start+(i/num_rects))%2)
+               stop = num_rects;
+           vert[i*2].x = (LONG)(d*(range_start + i/num_rects));
+           vertex_set_color (&vert[i*2], &pattern->base.stops[stop].color);
+       } else {
+           vert[i*2].x = vert[i*2-1].x;
+           vert[i*2].Red = vert[i*2-1].Red;
+           vert[i*2].Green = vert[i*2-1].Green;
+           vert[i*2].Blue = vert[i*2-1].Blue;
+           vert[i*2].Alpha = vert[i*2-1].Alpha;
+       }
+
+       stop = i%num_rects + 1;
+       vert[i*2+1].x = (LONG)(d*(range_start + i/num_rects + pattern->base.stops[stop].offset));
+       vert[i*2+1].y = (LONG) clip.bottom;
+       if (extend == CAIRO_EXTEND_REFLECT && (range_start+(i/num_rects))%2)
+           stop = num_rects - stop;
+       vertex_set_color (&vert[i*2+1], &pattern->base.stops[stop].color);
+
+       rect[i].UpperLeft = i*2;
+       rect[i].LowerRight = i*2 + 1;
+    }
+    total_verts = 2*num_ranges*num_rects;
+    total_rects = num_ranges*num_rects;
+
+    if (extend == CAIRO_EXTEND_PAD) {
+       vert[i*2].x = vert[i*2-1].x;
+       vert[i*2].y = (LONG) clip.top;
+       vert[i*2].Red = vert[i*2-1].Red;
+       vert[i*2].Green = vert[i*2-1].Green;
+       vert[i*2].Blue = vert[i*2-1].Blue;
+       vert[i*2].Alpha = 0xff00;
+       vert[i*2+1].x = clip.right;
+       vert[i*2+1].y = (LONG) clip.bottom;
+       vert[i*2+1].Red = vert[i*2-1].Red;
+       vert[i*2+1].Green = vert[i*2-1].Green;
+       vert[i*2+1].Blue = vert[i*2-1].Blue;
+       vert[i*2+1].Alpha = 0xff00;
+       rect[i].UpperLeft = i*2;
+       rect[i].LowerRight = i*2 + 1;
+
+       i++;
+
+       vert[i*2].x = clip.left;
+       vert[i*2].y = (LONG) clip.top;
+       vert[i*2].Red = vert[0].Red;
+       vert[i*2].Green = vert[0].Green;
+       vert[i*2].Blue = vert[0].Blue;
+       vert[i*2].Alpha = 0xff00;
+       vert[i*2+1].x = vert[0].x;
+       vert[i*2+1].y = (LONG) clip.bottom;
+       vert[i*2+1].Red = vert[0].Red;
+       vert[i*2+1].Green = vert[0].Green;
+       vert[i*2+1].Blue = vert[0].Blue;
+       vert[i*2+1].Alpha = 0xff00;
+       rect[i].UpperLeft = i*2;
+       rect[i].LowerRight = i*2 + 1;
+
+       total_verts += 4;
+       total_rects += 2;
+    }
+
+    if (!GradientFill (surface->win32.dc,
+                      vert, total_verts,
+                      rect, total_rects,
+                      GRADIENT_FILL_RECT_H))
+       return _cairo_win32_print_gdi_error ("_win32_printing_surface_paint_linear_pattern:GradientFill");
+
+    free (rect);
+    free (vert);
+    RestoreDC (surface->win32.dc, -1);
+
+    return 0;
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_paint_pattern (cairo_win32_printing_surface_t *surface,
+                                             const cairo_pattern_t *pattern)
+{
+    cairo_status_t status;
+
+    switch (pattern->type) {
+    case CAIRO_PATTERN_TYPE_SOLID:
+       status = _cairo_win32_printing_surface_paint_solid_pattern (surface, pattern);
+       if (status)
+           return status;
+       break;
+
+    case CAIRO_PATTERN_TYPE_SURFACE:
+       status = _cairo_win32_printing_surface_paint_surface_pattern (surface,
+                                                                      (cairo_surface_pattern_t *) pattern);
+       if (status)
+           return status;
+       break;
+
+    case CAIRO_PATTERN_TYPE_LINEAR:
+       status = _cairo_win32_printing_surface_paint_linear_pattern (surface, (cairo_linear_pattern_t *) pattern);
+       if (status)
+           return status;
+       break;
+
+    case CAIRO_PATTERN_TYPE_RADIAL:
+       return CAIRO_INT_STATUS_UNSUPPORTED;
+       break;
+
+    case CAIRO_PATTERN_TYPE_MESH:
+       ASSERT_NOT_REACHED;
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+typedef struct _win32_print_path_info {
+    cairo_win32_printing_surface_t *surface;
+} win32_path_info_t;
+
+static cairo_status_t
+_cairo_win32_printing_surface_path_move_to (void *closure,
+                                           const cairo_point_t *point)
+{
+    win32_path_info_t *path_info = closure;
+
+    if (path_info->surface->has_ctm) {
+       double x, y;
+
+       x = _cairo_fixed_to_double (point->x);
+       y = _cairo_fixed_to_double (point->y);
+       cairo_matrix_transform_point (&path_info->surface->ctm, &x, &y);
+       MoveToEx (path_info->surface->win32.dc, (int) x, (int) y, NULL);
+    } else {
+       MoveToEx (path_info->surface->win32.dc,
+                 _cairo_fixed_integer_part (point->x),
+                 _cairo_fixed_integer_part (point->y),
+                 NULL);
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_path_line_to (void *closure,
+                                           const cairo_point_t *point)
+{
+    win32_path_info_t *path_info = closure;
+
+    path_info->surface->path_empty = FALSE;
+    if (path_info->surface->has_ctm) {
+       double x, y;
+
+       x = _cairo_fixed_to_double (point->x);
+       y = _cairo_fixed_to_double (point->y);
+       cairo_matrix_transform_point (&path_info->surface->ctm, &x, &y);
+       LineTo (path_info->surface->win32.dc, (int) x, (int) y);
+    } else {
+       LineTo (path_info->surface->win32.dc,
+               _cairo_fixed_integer_part (point->x),
+               _cairo_fixed_integer_part (point->y));
+    }
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_path_curve_to (void          *closure,
+                                             const cairo_point_t *b,
+                                             const cairo_point_t *c,
+                                             const cairo_point_t *d)
+{
+    win32_path_info_t *path_info = closure;
+    POINT points[3];
+
+    path_info->surface->path_empty = FALSE;
+    if (path_info->surface->has_ctm) {
+       double x, y;
+
+       x = _cairo_fixed_to_double (b->x);
+       y = _cairo_fixed_to_double (b->y);
+       cairo_matrix_transform_point (&path_info->surface->ctm, &x, &y);
+       points[0].x = (LONG) x;
+       points[0].y = (LONG) y;
+
+       x = _cairo_fixed_to_double (c->x);
+       y = _cairo_fixed_to_double (c->y);
+       cairo_matrix_transform_point (&path_info->surface->ctm, &x, &y);
+       points[1].x = (LONG) x;
+       points[1].y = (LONG) y;
+
+       x = _cairo_fixed_to_double (d->x);
+       y = _cairo_fixed_to_double (d->y);
+       cairo_matrix_transform_point (&path_info->surface->ctm, &x, &y);
+       points[2].x = (LONG) x;
+       points[2].y = (LONG) y;
+    } else {
+       points[0].x = _cairo_fixed_integer_part (b->x);
+       points[0].y = _cairo_fixed_integer_part (b->y);
+       points[1].x = _cairo_fixed_integer_part (c->x);
+       points[1].y = _cairo_fixed_integer_part (c->y);
+       points[2].x = _cairo_fixed_integer_part (d->x);
+       points[2].y = _cairo_fixed_integer_part (d->y);
+    }
+    PolyBezierTo (path_info->surface->win32.dc, points, 3);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_path_close_path (void *closure)
+{
+    win32_path_info_t *path_info = closure;
+
+    CloseFigure (path_info->surface->win32.dc);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_emit_path (cairo_win32_printing_surface_t    *surface,
+                                        const cairo_path_fixed_t *path)
+{
+    win32_path_info_t path_info;
+
+    path_info.surface = surface;
+    return _cairo_path_fixed_interpret (path,
+                                       _cairo_win32_printing_surface_path_move_to,
+                                       _cairo_win32_printing_surface_path_line_to,
+                                       _cairo_win32_printing_surface_path_curve_to,
+                                       _cairo_win32_printing_surface_path_close_path,
+                                       &path_info);
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_show_page (void *abstract_surface)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+
+    /* Undo both SaveDC's that we did in start_page */
+    RestoreDC (surface->win32.dc, -2);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_clipper_intersect_clip_path (cairo_surface_clipper_t *clipper,
+                                                   cairo_path_fixed_t *path,
+                                                   cairo_fill_rule_t   fill_rule,
+                                                   double             tolerance,
+                                                   cairo_antialias_t   antialias)
+{
+    cairo_win32_printing_surface_t *surface = cairo_container_of (clipper,
+                                                        cairo_win32_printing_surface_t,
+                                                        clipper);
+    cairo_status_t status;
+
+    if (surface->paginated_mode == CAIRO_PAGINATED_MODE_ANALYZE)
+       return CAIRO_STATUS_SUCCESS;
+
+    if (path == NULL) {
+       RestoreDC (surface->win32.dc, -1);
+       SaveDC (surface->win32.dc);
+
+       return CAIRO_STATUS_SUCCESS;
+    }
+
+    BeginPath (surface->win32.dc);
+    status = _cairo_win32_printing_surface_emit_path (surface, path);
+    EndPath (surface->win32.dc);
+
+    switch (fill_rule) {
+    case CAIRO_FILL_RULE_WINDING:
+       SetPolyFillMode (surface->win32.dc, WINDING);
+       break;
+    case CAIRO_FILL_RULE_EVEN_ODD:
+       SetPolyFillMode (surface->win32.dc, ALTERNATE);
+       break;
+    default:
+       ASSERT_NOT_REACHED;
+    }
+
+    SelectClipPath (surface->win32.dc, RGN_AND);
+
+    return status;
+}
+
+static void
+_cairo_win32_printing_surface_get_font_options (void                  *abstract_surface,
+                                                cairo_font_options_t  *options)
+{
+    _cairo_font_options_init_default (options);
+
+    cairo_font_options_set_hint_style (options, CAIRO_HINT_STYLE_NONE);
+    cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_OFF);
+    cairo_font_options_set_antialias (options, CAIRO_ANTIALIAS_GRAY);
+    _cairo_font_options_set_round_glyph_positions (options, CAIRO_ROUND_GLYPH_POS_ON);
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_paint (void                      *abstract_surface,
+                                     cairo_operator_t           op,
+                                     const cairo_pattern_t     *source,
+                                    const cairo_clip_t      *clip)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+    cairo_solid_pattern_t clear;
+    cairo_status_t status;
+
+    status = _cairo_surface_clipper_set_clip (&surface->clipper, clip);
+    if (status)
+       return status;
+
+    if (op == CAIRO_OPERATOR_CLEAR) {
+       _cairo_win32_printing_surface_init_clear_color (surface, &clear);
+       source = (cairo_pattern_t*) &clear;
+       op = CAIRO_OPERATOR_SOURCE;
+    }
+
+    if (surface->paginated_mode == CAIRO_PAGINATED_MODE_ANALYZE)
+       return _cairo_win32_printing_surface_analyze_operation (surface, op, source);
+
+    assert (_cairo_win32_printing_surface_operation_supported (surface, op, source));
+
+    return _cairo_win32_printing_surface_paint_pattern (surface, source);
+}
+
+static int
+_cairo_win32_line_cap (cairo_line_cap_t cap)
+{
+    switch (cap) {
+    case CAIRO_LINE_CAP_BUTT:
+       return PS_ENDCAP_FLAT;
+    case CAIRO_LINE_CAP_ROUND:
+       return PS_ENDCAP_ROUND;
+    case CAIRO_LINE_CAP_SQUARE:
+       return PS_ENDCAP_SQUARE;
+    default:
+       ASSERT_NOT_REACHED;
+       return 0;
+    }
+}
+
+static int
+_cairo_win32_line_join (cairo_line_join_t join)
+{
+    switch (join) {
+    case CAIRO_LINE_JOIN_MITER:
+       return PS_JOIN_MITER;
+    case CAIRO_LINE_JOIN_ROUND:
+       return PS_JOIN_ROUND;
+    case CAIRO_LINE_JOIN_BEVEL:
+       return PS_JOIN_BEVEL;
+    default:
+       ASSERT_NOT_REACHED;
+       return 0;
+    }
+}
+
+static void
+_cairo_matrix_factor_out_scale (cairo_matrix_t *m, double *scale)
+{
+    double s;
+
+    s = fabs (m->xx);
+    if (fabs (m->xy) > s)
+       s = fabs (m->xy);
+    if (fabs (m->yx) > s)
+       s = fabs (m->yx);
+    if (fabs (m->yy) > s)
+       s = fabs (m->yy);
+    *scale = s;
+    s = 1.0/s;
+    cairo_matrix_scale (m, s, s);
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_stroke (void                     *abstract_surface,
+                                      cairo_operator_t          op,
+                                      const cairo_pattern_t    *source,
+                                      const cairo_path_fixed_t *path,
+                                      const cairo_stroke_style_t *style,
+                                      const cairo_matrix_t     *stroke_ctm,
+                                      const cairo_matrix_t     *stroke_ctm_inverse,
+                                      double                   tolerance,
+                                      cairo_antialias_t                antialias,
+                                     const cairo_clip_t    *clip)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+    cairo_int_status_t status;
+    HPEN pen;
+    LOGBRUSH brush;
+    COLORREF color;
+    XFORM xform;
+    DWORD pen_style;
+    DWORD *dash_array;
+    HGDIOBJ obj;
+    unsigned int i;
+    cairo_solid_pattern_t clear;
+    cairo_matrix_t mat;
+    double scale;
+
+    status = _cairo_surface_clipper_set_clip (&surface->clipper, clip);
+    if (status)
+       return status;
+
+    if (op == CAIRO_OPERATOR_CLEAR) {
+       _cairo_win32_printing_surface_init_clear_color (surface, &clear);
+       source = (cairo_pattern_t*) &clear;
+       op = CAIRO_OPERATOR_SOURCE;
+    }
+
+    if (surface->paginated_mode == CAIRO_PAGINATED_MODE_ANALYZE) {
+       /* Win32 does not support a dash offset. */
+       if (style->num_dashes > 0 && style->dash_offset != 0.0)
+           return CAIRO_INT_STATUS_UNSUPPORTED;
+
+       return _cairo_win32_printing_surface_analyze_operation (surface, op, source);
+    }
+
+    assert (_cairo_win32_printing_surface_operation_supported (surface, op, source));
+    assert (!(style->num_dashes > 0 && style->dash_offset != 0.0));
+
+    cairo_matrix_multiply (&mat, stroke_ctm, &surface->ctm);
+    _cairo_matrix_factor_out_scale (&mat, &scale);
+
+    pen_style = PS_GEOMETRIC;
+    dash_array = NULL;
+    if (style->num_dashes) {
+       pen_style |= PS_USERSTYLE;
+       dash_array = calloc (sizeof (DWORD), style->num_dashes);
+       for (i = 0; i < style->num_dashes; i++) {
+           dash_array[i] = (DWORD) (scale * style->dash[i]);
+       }
+    } else {
+       pen_style |= PS_SOLID;
+    }
+
+    SetMiterLimit (surface->win32.dc, (FLOAT) (style->miter_limit), NULL);
+    if (source->type == CAIRO_PATTERN_TYPE_SOLID) {
+       cairo_solid_pattern_t *solid = (cairo_solid_pattern_t *) source;
+
+
+       color = _cairo_win32_printing_surface_flatten_transparency (surface,
+                                                                   &solid->color);
+    } else {
+       /* Color not used as the pen will only be used by WidenPath() */
+       color = RGB (0,0,0);
+    }
+    brush.lbStyle = BS_SOLID;
+    brush.lbColor = color;
+    brush.lbHatch = 0;
+    pen_style |= _cairo_win32_line_cap (style->line_cap);
+    pen_style |= _cairo_win32_line_join (style->line_join);
+    pen = ExtCreatePen(pen_style,
+                      scale * style->line_width,
+                      &brush,
+                      style->num_dashes,
+                      dash_array);
+    if (pen == NULL)
+       return _cairo_win32_print_gdi_error ("_win32_surface_stroke:ExtCreatePen");
+    obj = SelectObject (surface->win32.dc, pen);
+    if (obj == NULL)
+       return _cairo_win32_print_gdi_error ("_win32_surface_stroke:SelectObject");
+
+    BeginPath (surface->win32.dc);
+    status = _cairo_win32_printing_surface_emit_path (surface, path);
+    EndPath (surface->win32.dc);
+    if (status)
+       return status;
+
+    /*
+     * Switch to user space to set line parameters
+     */
+    SaveDC (surface->win32.dc);
+
+    _cairo_matrix_to_win32_xform (&mat, &xform);
+    xform.eDx = 0.0f;
+    xform.eDy = 0.0f;
+
+    if (!ModifyWorldTransform (surface->win32.dc, &xform, MWT_LEFTMULTIPLY))
+       return _cairo_win32_print_gdi_error ("_win32_surface_stroke:SetWorldTransform");
+
+    if (source->type == CAIRO_PATTERN_TYPE_SOLID) {
+       StrokePath (surface->win32.dc);
+    } else {
+       if (!WidenPath (surface->win32.dc))
+           return _cairo_win32_print_gdi_error ("_win32_surface_stroke:WidenPath");
+       if (!SelectClipPath (surface->win32.dc, RGN_AND))
+           return _cairo_win32_print_gdi_error ("_win32_surface_stroke:SelectClipPath");
+
+       /* Return to device space to paint the pattern */
+       _cairo_matrix_to_win32_xform (&surface->gdi_ctm, &xform);
+       if (!SetWorldTransform (surface->win32.dc, &xform))
+           return _cairo_win32_print_gdi_error ("_win32_surface_stroke:ModifyWorldTransform");
+       status = _cairo_win32_printing_surface_paint_pattern (surface, source);
+    }
+    RestoreDC (surface->win32.dc, -1);
+    DeleteObject (pen);
+    free (dash_array);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_fill (void                       *abstract_surface,
+                                   cairo_operator_t             op,
+                                   const cairo_pattern_t       *source,
+                                   const cairo_path_fixed_t    *path,
+                                   cairo_fill_rule_t            fill_rule,
+                                   double                       tolerance,
+                                   cairo_antialias_t            antialias,
+                                   const cairo_clip_t          *clip)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+    cairo_int_status_t status;
+    cairo_solid_pattern_t clear;
+
+    status = _cairo_surface_clipper_set_clip (&surface->clipper, clip);
+    if (status)
+       return status;
+
+    if (op == CAIRO_OPERATOR_CLEAR) {
+       _cairo_win32_printing_surface_init_clear_color (surface, &clear);
+       source = (cairo_pattern_t*) &clear;
+       op = CAIRO_OPERATOR_SOURCE;
+    }
+
+    if (surface->paginated_mode == CAIRO_PAGINATED_MODE_ANALYZE)
+       return _cairo_win32_printing_surface_analyze_operation (surface, op, source);
+
+    assert (_cairo_win32_printing_surface_operation_supported (surface, op, source));
+
+    surface->path_empty = TRUE;
+    BeginPath (surface->win32.dc);
+    status = _cairo_win32_printing_surface_emit_path (surface, path);
+    EndPath (surface->win32.dc);
+
+    switch (fill_rule) {
+    case CAIRO_FILL_RULE_WINDING:
+       SetPolyFillMode (surface->win32.dc, WINDING);
+       break;
+    case CAIRO_FILL_RULE_EVEN_ODD:
+       SetPolyFillMode (surface->win32.dc, ALTERNATE);
+       break;
+    default:
+       ASSERT_NOT_REACHED;
+    }
+
+    if (source->type == CAIRO_PATTERN_TYPE_SOLID) {
+       status = _cairo_win32_printing_surface_select_solid_brush (surface, source);
+       if (status)
+           return status;
+
+       FillPath (surface->win32.dc);
+       _cairo_win32_printing_surface_done_solid_brush (surface);
+    } else if (surface->path_empty == FALSE) {
+       SaveDC (surface->win32.dc);
+       SelectClipPath (surface->win32.dc, RGN_AND);
+       status = _cairo_win32_printing_surface_paint_pattern (surface, source);
+       RestoreDC (surface->win32.dc, -1);
+    }
+
+    fflush(stderr);
+
+    return status;
+}
+
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_emit_win32_glyphs (cairo_win32_printing_surface_t        *surface,
+                                                cairo_operator_t        op,
+                                                const cairo_pattern_t  *source,
+                                                cairo_glyph_t           *glyphs,
+                                                int                     num_glyphs,
+                                                cairo_scaled_font_t    *scaled_font,
+                                                const cairo_clip_t     *clip)
+{
+    cairo_matrix_t ctm;
+    cairo_glyph_t  *unicode_glyphs;
+    cairo_scaled_font_subsets_glyph_t subset_glyph;
+    int i, first;
+    cairo_bool_t sequence_is_unicode;
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
+
+    /* Where possible reverse the glyph indices back to unicode
+     * characters. Strings of glyphs that could not be reversed to
+     * unicode will be printed with ETO_GLYPH_INDEX.
+     *
+     * As _cairo_win32_scaled_font_index_to_ucs4() is a slow
+     * operation, the font subsetting function
+     * _cairo_scaled_font_subsets_map_glyph() is used to obtain
+     * the unicode value because it caches the reverse mapping in
+     * the subsets.
+     */
+
+    if (surface->has_ctm) {
+       for (i = 0; i < num_glyphs; i++)
+           cairo_matrix_transform_point (&surface->ctm, &glyphs[i].x, &glyphs[i].y);
+       cairo_matrix_multiply (&ctm, &scaled_font->ctm, &surface->ctm);
+       scaled_font = cairo_scaled_font_create (scaled_font->font_face,
+                                               &scaled_font->font_matrix,
+                                               &ctm,
+                                               &scaled_font->options);
+    }
+
+    unicode_glyphs = _cairo_malloc_ab (num_glyphs, sizeof (cairo_glyph_t));
+    if (unicode_glyphs == NULL)
+       return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+
+    memcpy (unicode_glyphs, glyphs, num_glyphs * sizeof (cairo_glyph_t));
+    for (i = 0; i < num_glyphs; i++) {
+       status = _cairo_scaled_font_subsets_map_glyph (surface->font_subsets,
+                                                      scaled_font,
+                                                      glyphs[i].index,
+                                                      NULL, 0,
+                                                      &subset_glyph);
+       if (status)
+           goto fail;
+
+       unicode_glyphs[i].index = subset_glyph.unicode;
+    }
+
+    i = 0;
+    first = 0;
+    sequence_is_unicode = unicode_glyphs[0].index <= 0xffff;
+    while (i < num_glyphs) {
+       if (i == num_glyphs - 1 ||
+           ((unicode_glyphs[i + 1].index < 0xffff) != sequence_is_unicode))
+       {
+           status = _cairo_win32_surface_emit_glyphs (&surface->win32,
+                                                      source,
+                                                      sequence_is_unicode ? &unicode_glyphs[first] : &glyphs[first],
+                                                      i - first + 1,
+                                                      scaled_font,
+                                                      ! sequence_is_unicode);
+           first = i + 1;
+           if (i < num_glyphs - 1)
+               sequence_is_unicode = unicode_glyphs[i + 1].index <= 0xffff;
+       }
+       i++;
+    }
+
+fail:
+    if (surface->has_ctm)
+       cairo_scaled_font_destroy (scaled_font);
+
+    free (unicode_glyphs);
+
+    return status;
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_show_glyphs (void                 *abstract_surface,
+                                           cairo_operator_t     op,
+                                           const cairo_pattern_t *source,
+                                           cairo_glyph_t        *glyphs,
+                                           int                  num_glyphs,
+                                           cairo_scaled_font_t  *scaled_font,
+                                          const cairo_clip_t   *clip)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
+    cairo_scaled_glyph_t *scaled_glyph;
+    cairo_pattern_t *opaque = NULL;
+    int i;
+    cairo_matrix_t old_ctm;
+    cairo_bool_t old_has_ctm;
+    cairo_solid_pattern_t clear;
+
+    status = _cairo_surface_clipper_set_clip (&surface->clipper, clip);
+    if (status)
+       return status;
+
+    if (op == CAIRO_OPERATOR_CLEAR) {
+       _cairo_win32_printing_surface_init_clear_color (surface, &clear);
+       source = (cairo_pattern_t*) &clear;
+       op = CAIRO_OPERATOR_SOURCE;
+    }
+
+    if (surface->paginated_mode == CAIRO_PAGINATED_MODE_ANALYZE) {
+       /* When printing bitmap fonts to a printer DC, Windows may
+        * substitute an outline font for bitmap font. As the win32
+        * font backend always uses a screen DC when obtaining the
+        * font metrics the metrics of the substituted font will not
+        * match the metrics that the win32 font backend returns.
+        *
+        * If we are printing a bitmap font, use fallback images to
+        * ensure the font is not substituted.
+        */
+#if CAIRO_HAS_WIN32_FONT
+       if (cairo_scaled_font_get_type (scaled_font) == CAIRO_FONT_TYPE_WIN32) {
+           if (_cairo_win32_scaled_font_is_bitmap (scaled_font))
+               return CAIRO_INT_STATUS_UNSUPPORTED;
+           else
+               return _cairo_win32_printing_surface_analyze_operation (surface, op, source);
+       }
+#endif
+
+       /* For non win32 fonts we need to check that each glyph has a
+        * path available. If a path is not available,
+        * _cairo_scaled_glyph_lookup() will return
+        * CAIRO_INT_STATUS_UNSUPPORTED and a fallback image will be
+        * used.
+        */
+       for (i = 0; i < num_glyphs; i++) {
+           status = _cairo_scaled_glyph_lookup (scaled_font,
+                                                glyphs[i].index,
+                                                CAIRO_SCALED_GLYPH_INFO_PATH,
+                                                &scaled_glyph);
+           if (status)
+               return status;
+       }
+
+       return _cairo_win32_printing_surface_analyze_operation (surface, op, source);
+    }
+
+    if (source->type == CAIRO_PATTERN_TYPE_SOLID) {
+       cairo_solid_pattern_t *solid = (cairo_solid_pattern_t *) source;
+       COLORREF color;
+
+       color = _cairo_win32_printing_surface_flatten_transparency (surface,
+                                                                   &solid->color);
+       opaque = cairo_pattern_create_rgb (GetRValue (color) / 255.0,
+                                          GetGValue (color) / 255.0,
+                                          GetBValue (color) / 255.0);
+       if (opaque->status)
+           return opaque->status;
+       source = opaque;
+    }
+
+#if CAIRO_HAS_WIN32_FONT
+    if (cairo_scaled_font_get_type (scaled_font) == CAIRO_FONT_TYPE_WIN32 &&
+       source->type == CAIRO_PATTERN_TYPE_SOLID)
+    {
+       return _cairo_win32_printing_surface_emit_win32_glyphs (surface,
+                                                               op,
+                                                               source,
+                                                               glyphs,
+                                                               num_glyphs,
+                                                               scaled_font,
+                                                               clip);
+    }
+#endif
+
+    SaveDC (surface->win32.dc);
+    old_ctm = surface->ctm;
+    old_has_ctm = surface->has_ctm;
+    surface->has_ctm = TRUE;
+    surface->path_empty = TRUE;
+    BeginPath (surface->win32.dc);
+    for (i = 0; i < num_glyphs; i++) {
+       status = _cairo_scaled_glyph_lookup (scaled_font,
+                                            glyphs[i].index,
+                                            CAIRO_SCALED_GLYPH_INFO_PATH,
+                                            &scaled_glyph);
+       if (status)
+           break;
+       surface->ctm = old_ctm;
+       cairo_matrix_translate (&surface->ctm, glyphs[i].x, glyphs[i].y);
+       status = _cairo_win32_printing_surface_emit_path (surface, scaled_glyph->path);
+    }
+    EndPath (surface->win32.dc);
+    surface->ctm = old_ctm;
+    surface->has_ctm = old_has_ctm;
+    if (status == CAIRO_STATUS_SUCCESS && surface->path_empty == FALSE) {
+       if (source->type == CAIRO_PATTERN_TYPE_SOLID) {
+           status = _cairo_win32_printing_surface_select_solid_brush (surface, source);
+           if (status)
+               return status;
+
+           SetPolyFillMode (surface->win32.dc, WINDING);
+           FillPath (surface->win32.dc);
+           _cairo_win32_printing_surface_done_solid_brush (surface);
+       } else {
+           SelectClipPath (surface->win32.dc, RGN_AND);
+           status = _cairo_win32_printing_surface_paint_pattern (surface, source);
+       }
+    }
+    RestoreDC (surface->win32.dc, -1);
+
+    if (opaque)
+       cairo_pattern_destroy (opaque);
+
+    return status;
+}
+
+static const char **
+_cairo_win32_printing_surface_get_supported_mime_types (void     *abstract_surface)
+{
+    return _cairo_win32_printing_supported_mime_types;
+}
+
+static cairo_status_t
+_cairo_win32_printing_surface_finish (void *abstract_surface)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+
+    if (surface->font_subsets != NULL)
+       _cairo_scaled_font_subsets_destroy (surface->font_subsets);
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static cairo_surface_t *
+_cairo_win32_printing_surface_create_similar (void             *abstract_surface,
+                                             cairo_content_t    content,
+                                             int                width,
+                                             int                height)
+{
+    cairo_rectangle_t extents;
+
+    extents.x = extents.y = 0;
+    extents.width  = width;
+    extents.height = height;
+    return cairo_recording_surface_create (content, &extents);
+}
+
+static cairo_int_status_t
+_cairo_win32_printing_surface_start_page (void *abstract_surface)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+    XFORM xform;
+    double x_res, y_res;
+    cairo_matrix_t inverse_ctm;
+    cairo_status_t status;
+
+    SaveDC (surface->win32.dc); /* Save application context first, before doing MWT */
+
+    /* As the logical coordinates used by GDI functions (eg LineTo)
+     * are integers we need to do some additional work to prevent
+     * rounding errors. For example the obvious way to paint a recording
+     * pattern is to:
+     *
+     *   SaveDC()
+     *   transform the device context DC by the pattern to device matrix
+     *   replay the recording surface
+     *   RestoreDC()
+     *
+     * The problem here is that if the pattern to device matrix is
+     * [100 0 0 100 0 0], coordinates in the recording pattern such as
+     * (1.56, 2.23) which correspond to (156, 223) in device space
+     * will be rounded to (100, 200) due to (1.56, 2.23) being
+     * truncated to integers.
+     *
+     * This is solved by saving the current GDI CTM in surface->ctm,
+     * switch the GDI CTM to identity, and transforming all
+     * coordinates by surface->ctm before passing them to GDI. When
+     * painting a recording pattern, surface->ctm is transformed by the
+     * pattern to device matrix.
+     *
+     * For printing device contexts where 1 unit is 1 dpi, switching
+     * the GDI CTM to identity maximises the possible resolution of
+     * coordinates.
+     *
+     * If the device context is an EMF file, using an identity
+     * transform often provides insufficent resolution. The workaround
+     * is to set the GDI CTM to a scale < 1 eg [1.0/16 0 0 1/0/16 0 0]
+     * and scale the cairo CTM by [16 0 0 16 0 0]. The
+     * SetWorldTransform function call to scale the GDI CTM by 1.0/16
+     * will be recorded in the EMF followed by all the graphics
+     * functions by their coordinateds multiplied by 16.
+     *
+     * To support allowing the user to set a GDI CTM with scale < 1,
+     * we avoid switching to an identity CTM if the CTM xx and yy is < 1.
+     */
+    SetGraphicsMode (surface->win32.dc, GM_ADVANCED);
+    GetWorldTransform(surface->win32.dc, &xform);
+    if (xform.eM11 < 1 && xform.eM22 < 1) {
+       cairo_matrix_init_identity (&surface->ctm);
+       surface->gdi_ctm.xx = xform.eM11;
+       surface->gdi_ctm.xy = xform.eM21;
+       surface->gdi_ctm.yx = xform.eM12;
+       surface->gdi_ctm.yy = xform.eM22;
+       surface->gdi_ctm.x0 = xform.eDx;
+       surface->gdi_ctm.y0 = xform.eDy;
+    } else {
+       surface->ctm.xx = xform.eM11;
+       surface->ctm.xy = xform.eM21;
+       surface->ctm.yx = xform.eM12;
+       surface->ctm.yy = xform.eM22;
+       surface->ctm.x0 = xform.eDx;
+       surface->ctm.y0 = xform.eDy;
+       cairo_matrix_init_identity (&surface->gdi_ctm);
+       if (!ModifyWorldTransform (surface->win32.dc, NULL, MWT_IDENTITY))
+           return _cairo_win32_print_gdi_error ("_cairo_win32_printing_surface_start_page:ModifyWorldTransform");
+    }
+
+    surface->has_ctm = !_cairo_matrix_is_identity (&surface->ctm);
+    surface->has_gdi_ctm = !_cairo_matrix_is_identity (&surface->gdi_ctm);
+    inverse_ctm = surface->ctm;
+    status = cairo_matrix_invert (&inverse_ctm);
+    if (status)
+       return status;
+
+    x_res = GetDeviceCaps (surface->win32.dc, LOGPIXELSX);
+    y_res = GetDeviceCaps (surface->win32.dc, LOGPIXELSY);
+    cairo_matrix_transform_distance (&inverse_ctm, &x_res, &y_res);
+    _cairo_surface_set_resolution (&surface->win32.base, x_res, y_res);
+
+    SaveDC (surface->win32.dc); /* Then save Cairo's known-good clip state, so the clip path can be reset */
+
+    return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_win32_printing_surface_set_paginated_mode (void *abstract_surface,
+                                                  cairo_paginated_mode_t paginated_mode)
+{
+    cairo_win32_printing_surface_t *surface = abstract_surface;
+
+    surface->paginated_mode = paginated_mode;
+}
+
+static cairo_bool_t
+_cairo_win32_printing_surface_supports_fine_grained_fallbacks (void *abstract_surface)
+{
+    return TRUE;
+}
+
+/**
+ * cairo_win32_printing_surface_create:
+ * @hdc: the DC to create a surface for
+ *
+ * Creates a cairo surface that targets the given DC.  The DC will be
+ * queried for its initial clip extents, and this will be used as the
+ * size of the cairo surface.  The DC should be a printing DC;
+ * antialiasing will be ignored, and GDI will be used as much as
+ * possible to draw to the surface.
+ *
+ * The returned surface will be wrapped using the paginated surface to
+ * provide correct complex rendering behaviour; cairo_surface_show_page() and
+ * associated methods must be used for correct output.
+ *
+ * Return value: the newly created surface
+ *
+ * Since: 1.6
+ **/
+cairo_surface_t *
+cairo_win32_printing_surface_create (HDC hdc)
+{
+    cairo_win32_printing_surface_t *surface;
+    cairo_surface_t *paginated;
+    RECT rect;
+
+    surface = malloc (sizeof (cairo_win32_printing_surface_t));
+    if (surface == NULL)
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+
+#if 0
+    if (_cairo_win32_save_initial_clip (hdc, surface) != CAIRO_STATUS_SUCCESS) {
+       free (surface);
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+    }
+#endif
+
+    _cairo_surface_clipper_init (&surface->clipper,
+                                _cairo_win32_printing_surface_clipper_intersect_clip_path);
+
+    surface->win32.format = CAIRO_FORMAT_RGB24;
+    surface->win32.base.content = CAIRO_CONTENT_COLOR_ALPHA;
+
+    surface->win32.dc = hdc;
+
+    surface->brush = NULL;
+    surface->old_brush = NULL;
+    surface->font_subsets = _cairo_scaled_font_subsets_create_scaled ();
+    if (surface->font_subsets == NULL) {
+       free (surface);
+       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
+    }
+
+    GetClipBox(hdc, &rect);
+    surface->win32.extents.x = rect.left;
+    surface->win32.extents.y = rect.top;
+    surface->win32.extents.width = rect.right - rect.left;
+    surface->win32.extents.height = rect.bottom - rect.top;
+
+    surface->win32.flags = _cairo_win32_flags_for_dc (surface->win32.dc);
+    surface->win32.flags |= CAIRO_WIN32_SURFACE_FOR_PRINTING;
+
+    _cairo_win32_printing_surface_init_ps_mode (surface);
+    _cairo_win32_printing_surface_init_image_support (surface);
+    _cairo_win32_printing_surface_init_language_pack (surface);
+    _cairo_surface_init (&surface->win32.base,
+                        &cairo_win32_printing_surface_backend,
+                        NULL, /* device */
+                         CAIRO_CONTENT_COLOR_ALPHA);
+
+    paginated = _cairo_paginated_surface_create (&surface->win32.base,
+                                                CAIRO_CONTENT_COLOR_ALPHA,
+                                                &cairo_win32_surface_paginated_backend);
+
+    /* paginated keeps the only reference to surface now, drop ours */
+    cairo_surface_destroy (&surface->win32.base);
+
+    return paginated;
+}
+
+static const cairo_surface_backend_t cairo_win32_printing_surface_backend = {
+    CAIRO_SURFACE_TYPE_WIN32_PRINTING,
+    _cairo_win32_printing_surface_finish,
+
+    _cairo_default_context_create,
+
+    _cairo_win32_printing_surface_create_similar,
+    NULL, /* create similar image */
+    NULL, /* map to image */
+    NULL, /* unmap image */
+
+    _cairo_surface_default_source,
+    NULL, /* acquire_source_image */
+    NULL, /* release_source_image */
+    NULL, /* snapshot */
+
+    NULL, /* copy_page */
+    _cairo_win32_printing_surface_show_page,
+
+    _cairo_win32_surface_get_extents,
+    _cairo_win32_printing_surface_get_font_options,
+
+    NULL, /* flush */
+    NULL, /* mark_dirty_rectangle */
+
+    _cairo_win32_printing_surface_paint,
+    NULL, /* mask */
+    _cairo_win32_printing_surface_stroke,
+    _cairo_win32_printing_surface_fill,
+    NULL, /* fill/stroke */
+    _cairo_win32_printing_surface_show_glyphs,
+    NULL, /* has_show_text_glyphs */
+    NULL, /* show_text_glyphs */
+    _cairo_win32_printing_surface_get_supported_mime_types,
+};
+
+static const cairo_paginated_surface_backend_t cairo_win32_surface_paginated_backend = {
+    _cairo_win32_printing_surface_start_page,
+    _cairo_win32_printing_surface_set_paginated_mode,
+    NULL, /* set_bounding_box */
+    NULL, /* _cairo_win32_printing_surface_has_fallback_images, */
+    _cairo_win32_printing_surface_supports_fine_grained_fallbacks,
+};
diff --git a/src/win32/cairo-win32-private.h b/src/win32/cairo-win32-private.h
new file mode 100644 (file)
index 0000000..b6c2431
--- /dev/null
@@ -0,0 +1,226 @@
+/* cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Owen Taylor <otaylor@redhat.com>
+ */
+
+#ifndef CAIRO_WIN32_PRIVATE_H
+#define CAIRO_WIN32_PRIVATE_H
+
+#include "cairo-win32.h"
+
+#include "cairoint.h"
+
+#include "cairo-device-private.h"
+#include "cairo-surface-clipper-private.h"
+#include "cairo-surface-private.h"
+
+#ifndef SHADEBLENDCAPS
+#define SHADEBLENDCAPS 120
+#endif
+#ifndef SB_NONE
+#define SB_NONE 0
+#endif
+
+#define WIN32_FONT_LOGICAL_SCALE 32
+
+/* Surface DC flag values */
+enum {
+    /* If this is a surface created for printing or not */
+    CAIRO_WIN32_SURFACE_FOR_PRINTING = (1<<0),
+
+    /* Whether the DC is a display DC or not */
+    CAIRO_WIN32_SURFACE_IS_DISPLAY = (1<<1),
+
+    /* Whether we can use BitBlt with this surface */
+    CAIRO_WIN32_SURFACE_CAN_BITBLT = (1<<2),
+
+    /* Whether we can use AlphaBlend with this surface */
+    CAIRO_WIN32_SURFACE_CAN_ALPHABLEND = (1<<3),
+
+    /* Whether we can use StretchBlt with this surface */
+    CAIRO_WIN32_SURFACE_CAN_STRETCHBLT = (1<<4),
+
+    /* Whether we can use StretchDIBits with this surface */
+    CAIRO_WIN32_SURFACE_CAN_STRETCHDIB = (1<<5),
+
+    /* Whether we can use GradientFill rectangles with this surface */
+    CAIRO_WIN32_SURFACE_CAN_RECT_GRADIENT = (1<<6),
+
+    /* Whether we can use the CHECKJPEGFORMAT escape function */
+    CAIRO_WIN32_SURFACE_CAN_CHECK_JPEG = (1<<7),
+
+    /* Whether we can use the CHECKJPEGFORMAT escape function */
+    CAIRO_WIN32_SURFACE_CAN_CHECK_PNG = (1<<8),
+};
+
+typedef struct _cairo_win32_surface {
+    cairo_surface_t base;
+
+    cairo_format_t format;
+    HDC dc;
+
+    /* Surface DC flags */
+    unsigned flags;
+
+    /* We use the x and y parts of extents for situations where
+     * we're not supposed to draw to the entire surface.
+     * For example, during a paint event a program will get
+     * a DC that has been clipped to the dirty region.
+     * A cairo surface constructed for that DC will have extents
+     * that match bounds of the clipped region.
+     */
+    cairo_rectangle_int_t extents;
+} cairo_win32_surface_t;
+#define to_win32_surface(S) ((cairo_win32_surface_t *)(S))
+
+typedef struct _cairo_win32_display_surface {
+    cairo_win32_surface_t win32;
+
+    /* We create off-screen surfaces as DIBs or DDBs, based on what we created
+     * originally*/
+    HBITMAP bitmap;
+    cairo_bool_t is_dib;
+
+    /* Used to save the initial 1x1 monochrome bitmap for the DC to
+     * select back into the DC before deleting the DC and our
+     * bitmap. For Windows XP, this doesn't seem to be necessary
+     * ... we can just delete the DC and that automatically unselects
+     * out bitmap. But it's standard practice so apparently is needed
+     * on some versions of Windows.
+     */
+    HBITMAP saved_dc_bitmap;
+    cairo_surface_t *image;
+    cairo_surface_t *fallback;
+
+    HRGN initial_clip_rgn;
+    cairo_bool_t had_simple_clip;
+} cairo_win32_display_surface_t;
+#define to_win32_display_surface(S) ((cairo_win32_display_surface_t *)(S))
+
+typedef struct _cairo_win32_printing_surface {
+    cairo_win32_surface_t win32;
+
+    cairo_surface_clipper_t clipper;
+
+    cairo_paginated_mode_t paginated_mode;
+    cairo_content_t content;
+    cairo_bool_t path_empty;
+    cairo_bool_t has_ctm;
+    cairo_matrix_t ctm;
+    cairo_bool_t has_gdi_ctm;
+    cairo_matrix_t gdi_ctm;
+    HBRUSH brush, old_brush;
+    cairo_scaled_font_subsets_t *font_subsets;
+} cairo_win32_printing_surface_t;
+#define to_win32_printing_surface(S) ((cairo_win32_printing_surface_t *)(S))
+
+typedef BOOL (WINAPI *cairo_win32_alpha_blend_func_t) (HDC hdcDest,
+                                                      int nXOriginDest,
+                                                      int nYOriginDest,
+                                                      int nWidthDest,
+                                                      int hHeightDest,
+                                                      HDC hdcSrc,
+                                                      int nXOriginSrc,
+                                                      int nYOriginSrc,
+                                                      int nWidthSrc,
+                                                      int nHeightSrc,
+                                                      BLENDFUNCTION blendFunction);
+
+typedef struct _cairo_win32_device {
+    cairo_device_t base;
+
+    HMODULE msimg32_dll;
+
+    const cairo_compositor_t *compositor;
+
+    cairo_win32_alpha_blend_func_t alpha_blend;
+} cairo_win32_device_t;
+#define to_win32_device(D) ((cairo_win32_device_t *)(D))
+#define to_win32_device_from_surface(S) to_win32_device(((cairo_surface_t *)(S))->device)
+
+cairo_private cairo_device_t *
+_cairo_win32_device_get (void);
+
+const cairo_compositor_t *
+_cairo_win32_gdi_compositor_get (void);
+
+cairo_status_t
+_cairo_win32_print_gdi_error (const char *context);
+
+cairo_private void
+_cairo_win32_display_surface_discard_fallback (cairo_win32_display_surface_t *surface);
+
+cairo_bool_t
+_cairo_win32_surface_get_extents (void                   *abstract_surface,
+                                 cairo_rectangle_int_t   *rectangle);
+
+uint32_t
+_cairo_win32_flags_for_dc (HDC dc);
+
+cairo_int_status_t
+_cairo_win32_surface_emit_glyphs (cairo_win32_surface_t *dst,
+                                 const cairo_pattern_t *source,
+                                 cairo_glyph_t  *glyphs,
+                                 int                     num_glyphs,
+                                 cairo_scaled_font_t    *scaled_font,
+                                 cairo_bool_t            glyph_indexing);
+
+static inline void
+_cairo_matrix_to_win32_xform (const cairo_matrix_t *m,
+                              XFORM *xform)
+{
+    xform->eM11 = (FLOAT) m->xx;
+    xform->eM21 = (FLOAT) m->xy;
+    xform->eM12 = (FLOAT) m->yx;
+    xform->eM22 = (FLOAT) m->yy;
+    xform->eDx = (FLOAT) m->x0;
+    xform->eDy = (FLOAT) m->y0;
+}
+
+cairo_status_t
+_cairo_win32_display_surface_set_clip (cairo_win32_display_surface_t *surface,
+                                      cairo_clip_t *clip);
+
+void
+_cairo_win32_display_surface_unset_clip (cairo_win32_display_surface_t *surface);
+
+void
+_cairo_win32_debug_dump_hrgn (HRGN rgn, char *header);
+
+cairo_bool_t
+_cairo_win32_scaled_font_is_type1 (cairo_scaled_font_t *scaled_font);
+
+cairo_bool_t
+_cairo_win32_scaled_font_is_bitmap (cairo_scaled_font_t *scaled_font);
+
+#endif /* CAIRO_WIN32_PRIVATE_H */
diff --git a/src/win32/cairo-win32-surface.c b/src/win32/cairo-win32-surface.c
new file mode 100644 (file)
index 0000000..7cd46fc
--- /dev/null
@@ -0,0 +1,321 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Owen Taylor <otaylor@redhat.com>
+ *     Stuart Parmenter <stuart@mozilla.com>
+ *     Vladimir Vukicevic <vladimir@pobox.com>
+ */
+
+#define WIN32_LEAN_AND_MEAN
+/* We require Windows 2000 features such as ETO_PDY */
+#if !defined(WINVER) || (WINVER < 0x0500)
+# define WINVER 0x0500
+#endif
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
+# define _WIN32_WINNT 0x0500
+#endif
+
+#include "cairoint.h"
+
+#include "cairo-default-context-private.h"
+#include "cairo-error-private.h"
+#include "cairo-image-surface-private.h"
+#include "cairo-paginated-private.h"
+#include "cairo-pattern-private.h"
+#include "cairo-win32-private.h"
+#include "cairo-scaled-font-subsets-private.h"
+#include "cairo-surface-fallback-private.h"
+#include "cairo-surface-backend-private.h"
+
+#include <wchar.h>
+#include <windows.h>
+
+#if defined(__MINGW32__) && !defined(ETO_PDY)
+# define ETO_PDY 0x2000
+#endif
+
+/**
+ * SECTION:cairo-win32
+ * @Title: Win32 Surfaces
+ * @Short_Description: Microsoft Windows surface support
+ * @See_Also: #cairo_surface_t
+ *
+ * The Microsoft Windows surface is used to render cairo graphics to
+ * Microsoft Windows windows, bitmaps, and printing device contexts.
+ *
+ * The surface returned by cairo_win32_printing_surface_create() is of surface
+ * type %CAIRO_SURFACE_TYPE_WIN32_PRINTING and is a multi-page vector surface
+ * type.
+ *
+ * The surface returned by the other win32 constructors is of surface type
+ * %CAIRO_SURFACE_TYPE_WIN32 and is a raster surface type.
+ **/
+
+/**
+ * CAIRO_HAS_WIN32_SURFACE:
+ *
+ * Defined if the Microsoft Windows surface backend is available.
+ * This macro can be used to conditionally compile backend-specific code.
+ *
+ * Since: 1.0
+ **/
+
+/**
+ * _cairo_win32_print_gdi_error:
+ * @context: context string to display along with the error
+ *
+ * Helper function to dump out a human readable form of the
+ * current error code.
+ *
+ * Return value: A cairo status code for the error code
+ **/
+cairo_status_t
+_cairo_win32_print_gdi_error (const char *context)
+{
+    void *lpMsgBuf;
+    DWORD last_error = GetLastError ();
+
+    if (!FormatMessageW (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                        FORMAT_MESSAGE_FROM_SYSTEM,
+                        NULL,
+                        last_error,
+                        MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+                        (LPWSTR) &lpMsgBuf,
+                        0, NULL)) {
+       fprintf (stderr, "%s: Unknown GDI error", context);
+    } else {
+       fprintf (stderr, "%s: %S", context, (wchar_t *)lpMsgBuf);
+
+       LocalFree (lpMsgBuf);
+    }
+
+    fflush (stderr);
+
+    /* We should switch off of last_status, but we'd either return
+     * CAIRO_STATUS_NO_MEMORY or CAIRO_STATUS_UNKNOWN_ERROR and there
+     * is no CAIRO_STATUS_UNKNOWN_ERROR.
+     */
+    return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+}
+
+cairo_bool_t
+_cairo_win32_surface_get_extents (void                   *abstract_surface,
+                                 cairo_rectangle_int_t   *rectangle)
+{
+    cairo_win32_surface_t *surface = abstract_surface;
+
+    *rectangle = surface->extents;
+    return TRUE;
+}
+
+/**
+ * cairo_win32_surface_get_dc:
+ * @surface: a #cairo_surface_t
+ *
+ * Returns the HDC associated with this surface, or %NULL if none.
+ * Also returns %NULL if the surface is not a win32 surface.
+ *
+ * A call to cairo_surface_flush() is required before using the HDC to
+ * ensure that all pending drawing operations are finished and to
+ * restore any temporary modification cairo has made to its state. A
+ * call to cairo_surface_mark_dirty() is required after the state or
+ * the content of the HDC has been modified.
+ *
+ * Return value: HDC or %NULL if no HDC available.
+ *
+ * Since: 1.2
+ **/
+HDC
+cairo_win32_surface_get_dc (cairo_surface_t *surface)
+{
+    if (surface->backend->type == CAIRO_SURFACE_TYPE_WIN32)
+       return to_win32_surface(surface)->dc;
+
+    if (_cairo_surface_is_paginated (surface)) {
+       cairo_surface_t *target = _cairo_paginated_surface_get_target (surface);
+       if (target->backend->type == CAIRO_SURFACE_TYPE_WIN32_PRINTING)
+           return to_win32_surface(target)->dc;
+    }
+
+    return NULL;
+}
+
+/**
+ * cairo_win32_surface_get_image:
+ * @surface: a #cairo_surface_t
+ *
+ * Returns a #cairo_surface_t image surface that refers to the same bits
+ * as the DIB of the Win32 surface.  If the passed-in win32 surface
+ * is not a DIB surface, %NULL is returned.
+ *
+ * Return value: a #cairo_surface_t (owned by the win32 #cairo_surface_t),
+ * or %NULL if the win32 surface is not a DIB.
+ *
+ * Since: 1.4
+ **/
+cairo_surface_t *
+cairo_win32_surface_get_image (cairo_surface_t *surface)
+{
+    if (surface->backend->type != CAIRO_SURFACE_TYPE_WIN32)
+       return NULL;
+
+    GdiFlush();
+    return to_win32_display_surface(surface)->image;
+}
+
+#define STACK_GLYPH_SIZE 256
+cairo_int_status_t
+_cairo_win32_surface_emit_glyphs (cairo_win32_surface_t *dst,
+                                 const cairo_pattern_t *source,
+                                 cairo_glyph_t  *glyphs,
+                                 int                     num_glyphs,
+                                 cairo_scaled_font_t    *scaled_font,
+                                 cairo_bool_t            glyph_indexing)
+{
+#if CAIRO_HAS_WIN32_FONT
+    WORD glyph_buf_stack[STACK_GLYPH_SIZE];
+    WORD *glyph_buf = glyph_buf_stack;
+    int dxy_buf_stack[2 * STACK_GLYPH_SIZE];
+    int *dxy_buf = dxy_buf_stack;
+
+    BOOL win_result = 0;
+    int i, j;
+
+    cairo_solid_pattern_t *solid_pattern;
+    COLORREF color;
+
+    cairo_matrix_t device_to_logical;
+
+    int start_x, start_y;
+    double user_x, user_y;
+    int logical_x, logical_y;
+    unsigned int glyph_index_option;
+
+    /* We can only handle win32 fonts */
+    assert (cairo_scaled_font_get_type (scaled_font) == CAIRO_FONT_TYPE_WIN32);
+
+    /* We can only handle opaque solid color sources and destinations */
+    assert (_cairo_pattern_is_opaque_solid(source));
+    assert (dst->format == CAIRO_FORMAT_RGB24);
+
+    solid_pattern = (cairo_solid_pattern_t *)source;
+    color = RGB(((int)solid_pattern->color.red_short) >> 8,
+               ((int)solid_pattern->color.green_short) >> 8,
+               ((int)solid_pattern->color.blue_short) >> 8);
+
+    cairo_win32_scaled_font_get_device_to_logical(scaled_font, &device_to_logical);
+
+    SaveDC(dst->dc);
+
+    cairo_win32_scaled_font_select_font(scaled_font, dst->dc);
+    SetTextColor(dst->dc, color);
+    SetTextAlign(dst->dc, TA_BASELINE | TA_LEFT);
+    SetBkMode(dst->dc, TRANSPARENT);
+
+    if (num_glyphs > STACK_GLYPH_SIZE) {
+       glyph_buf = (WORD *) _cairo_malloc_ab (num_glyphs, sizeof(WORD));
+        dxy_buf = (int *) _cairo_malloc_abc (num_glyphs, sizeof(int), 2);
+    }
+
+    /* It is vital that dx values for dxy_buf are calculated from the delta of
+     * _logical_ x coordinates (not user x coordinates) or else the sum of all
+     * previous dx values may start to diverge from the current glyph's x
+     * coordinate due to accumulated rounding error. As a result strings could
+     * be painted shorter or longer than expected. */
+
+    user_x = glyphs[0].x;
+    user_y = glyphs[0].y;
+
+    cairo_matrix_transform_point(&device_to_logical,
+                                 &user_x, &user_y);
+
+    logical_x = _cairo_lround (user_x);
+    logical_y = _cairo_lround (user_y);
+
+    start_x = logical_x;
+    start_y = logical_y;
+
+    for (i = 0, j = 0; i < num_glyphs; ++i, j = 2 * i) {
+        glyph_buf[i] = (WORD) glyphs[i].index;
+        if (i == num_glyphs - 1) {
+            dxy_buf[j] = 0;
+            dxy_buf[j+1] = 0;
+        } else {
+            double next_user_x = glyphs[i+1].x;
+            double next_user_y = glyphs[i+1].y;
+            int next_logical_x, next_logical_y;
+
+            cairo_matrix_transform_point(&device_to_logical,
+                                         &next_user_x, &next_user_y);
+
+            next_logical_x = _cairo_lround (next_user_x);
+            next_logical_y = _cairo_lround (next_user_y);
+
+            dxy_buf[j] = _cairo_lround (next_logical_x - logical_x);
+            dxy_buf[j+1] = _cairo_lround (next_logical_y - logical_y);
+
+            logical_x = next_logical_x;
+            logical_y = next_logical_y;
+        }
+    }
+
+    if (glyph_indexing)
+       glyph_index_option = ETO_GLYPH_INDEX;
+    else
+       glyph_index_option = 0;
+
+    win_result = ExtTextOutW(dst->dc,
+                             start_x,
+                             start_y,
+                             glyph_index_option | ETO_PDY,
+                             NULL,
+                             glyph_buf,
+                             num_glyphs,
+                             dxy_buf);
+    if (!win_result) {
+        _cairo_win32_print_gdi_error("_cairo_win32_surface_show_glyphs(ExtTextOutW failed)");
+    }
+
+    RestoreDC(dst->dc, -1);
+
+    if (glyph_buf != glyph_buf_stack) {
+       free(glyph_buf);
+        free(dxy_buf);
+    }
+    return (win_result) ? CAIRO_STATUS_SUCCESS : CAIRO_INT_STATUS_UNSUPPORTED;
+#else
+    return CAIRO_INT_STATUS_UNSUPPORTED;
+#endif
+}
+#undef STACK_GLYPH_SIZE
diff --git a/src/win32/cairo-win32-system.c b/src/win32/cairo-win32-system.c
new file mode 100644 (file)
index 0000000..8785530
--- /dev/null
@@ -0,0 +1,89 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright Â© 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Red Hat, Inc.
+ *
+ * Contributor(s):
+ *     Owen Taylor <otaylor@redhat.com>
+ *     Stuart Parmenter <stuart@mozilla.com>
+ *     Vladimir Vukicevic <vladimir@pobox.com>
+ */
+
+/* This file should include code that is system-specific, not
+ * feature-specific.  For example, the DLL initialization/finalization
+ * code on Win32 or OS/2 must live here (not in cairo-whatever-surface.c).
+ * Same about possible ELF-specific code.
+ *
+ * And no other function should live here.
+ */
+
+
+#include "cairoint.h"
+
+#if CAIRO_MUTEX_IMPL_WIN32
+#if !CAIRO_WIN32_STATIC_BUILD
+
+#define WIN32_LEAN_AND_MEAN
+/* We require Windows 2000 features such as ETO_PDY */
+#if !defined(WINVER) || (WINVER < 0x0500)
+# define WINVER 0x0500
+#endif
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
+# define _WIN32_WINNT 0x0500
+#endif
+
+#include <windows.h>
+
+/* declare to avoid "no previous prototype for 'DllMain'" warning */
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+         DWORD     fdwReason,
+         LPVOID    lpvReserved);
+
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+         DWORD     fdwReason,
+         LPVOID    lpvReserved)
+{
+    switch (fdwReason) {
+        case DLL_PROCESS_ATTACH:
+            CAIRO_MUTEX_INITIALIZE ();
+            break;
+
+        case DLL_PROCESS_DETACH:
+            CAIRO_MUTEX_FINALIZE ();
+            break;
+    }
+
+    return TRUE;
+}
+
+#endif
+#endif
diff --git a/test/.gitignore b/test/.gitignore
new file mode 100644 (file)
index 0000000..dba5877
--- /dev/null
@@ -0,0 +1,40 @@
+TAGS
+tags
+.deps
+.libs
+output
+Makefile
+Makefile.in
+ref.hash
+ref.list
+any2ppm
+.any2ppm
+.any2ppm.pid
+.any2ppm.errors
+cairo-test-constructors.c
+cairo-test-trace
+cairo-test-suite
+pdf2png
+ps2png
+svg2png
+valgrind-log
+*.out.*
+*.pass.*
+*.fail.*
+*.diff.png
+*.manifest
+*.gcda
+*.gcno
+*.exe
+*.exe.so
+*.obj
+*.ilk
+*.pdb
+*.la
+*.lo
+*.log
+*.suo
+*.o
+*~
+.*.sw?
+make-cairo-test-constructors
index 0a36780..07826ff 100644 (file)
@@ -164,7 +164,7 @@ reference
 #                         convert degenerate segments into circles/rectangles
 #                         as expected by cairo
 # device-offset-scale   - complication of pre-multiplying device_offset
-#                         into the pattern_matrix and then requiring futher
+#                         into the pattern_matrix and then requiring further
 #                         manipulation for SVG
 # extend-pad            - lacks implementation in pixman and consequently used
 #                         as an excuse for lack of support in other backends
@@ -231,21 +231,22 @@ user-data
 # A target to summarise the failures
 check-summary:
        @FAILED_TESTS=""; \
-       for t in $(test_sources:.c=.log); do \
+       for t in output/*.log; do \
            if grep -e '\<FAIL\>' $$t >/dev/null 2>&1; then \
-               FAILED_TESTS="$$FAILED_TESTS $${t%.log}"; \
+               FAILED_TESTS="$$FAILED_TESTS $$t"; \
            fi; \
        done; \
        if test -n "$$FAILED_TESTS"; then \
            echo "Failed tests:"; \
            surfaces=""; \
            for t in $$FAILED_TESTS; do \
-               echo -n "     $$t: "; \
-               grep -e '\<FAIL\>' $$t.log | sed -e 's/.*TARGET: \([^ ]*\).*/\1/' | sort | uniq | tr '\n' ' '; \
+               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.log | sed -e 's/.*TARGET: \([^ ]*\).*/\1/' | sort | uniq`; do \
+               for s in `grep -e '\<FAIL\>' $$t | sed -e 's/.*TARGET: \([^ ]*\).*/\1/' | sort | uniq`; do \
                    ss=`echo $$s | tr '-' '_'`; \
-                   tt=`echo $$t | tr '-' '_'`; \
+                   tt=`echo $$name | tr '-' '_'`; \
                    eval $$ss=\""$${!ss} $$tt"\"; \
                    echo $$surfaces | grep $$ss >/dev/null || surfaces="$$surfaces $$ss"; \
                done; \
@@ -454,12 +455,15 @@ results.tar:
        for i in output/*.fail.png ; do \
                testname=$${i#output/} ; \
                testname=$${testname%%.*} ; \
-               tar uf $@ $${testname}*.ref.png $${i%fail.png}out.png $${i%fail.png}diff.png ; \
+               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 $< > $@
 
-.PHONY: check-valgrind test recheck retest check-ref-dups
+release-verify-sane-tests:
+
+.PHONY: check-valgrind test recheck retest check-ref-dups release-verify-sane-tests
 
 EXTRA_DIST += Makefile.win32
index 48a8f12..4e1fb84 100644 (file)
@@ -12,6 +12,7 @@ test_sources = \
        a8-mask.c                                       \
        aliasing.c                                      \
        alpha-similar.c                                 \
+       arc-direction.c                                 \
        arc-infinite-loop.c                             \
        arc-looping-dash.c                              \
        api-special-cases.c                             \
@@ -25,6 +26,7 @@ test_sources = \
        bug-40410.c                                     \
        bug-bo-rectangular.c                            \
        bug-bo-ricotz.c                                 \
+       bug-source-cu.c                                 \
        bug-extents.c                                   \
        bug-seams.c                                     \
        caps.c                                          \
@@ -75,6 +77,7 @@ test_sources = \
        composite-integer-translate-source.c            \
        composite-integer-translate-over.c              \
        composite-integer-translate-over-repeat.c       \
+       copy-disjoint.c                                 \
        copy-path.c                                     \
        coverage.c                                      \
        create-for-stream.c                             \
@@ -100,6 +103,7 @@ test_sources = \
        degenerate-pen.c                                \
        degenerate-radial-gradient.c                    \
        degenerate-rel-curve-to.c                       \
+       degenerate-solid-dash.c                         \
        drunkard-tails.c                                \
        device-offset.c                                 \
        device-offset-fractional.c                      \
@@ -114,12 +118,14 @@ test_sources = \
        extend-repeat.c                                 \
        extend-repeat-similar.c                         \
        extended-blend.c                                \
+       fallback.c                                      \
        fill-alpha.c                                    \
        fill-alpha-pattern.c                            \
        fill-and-stroke.c                               \
        fill-and-stroke-alpha.c                         \
        fill-and-stroke-alpha-add.c                     \
        fill-degenerate-sort-order.c                    \
+       fill-disjoint.c                                 \
        fill-empty.c                                    \
        fill-image.c                                    \
        fill-missed-stop.c                              \
@@ -158,6 +164,7 @@ test_sources = \
        in-fill-trapezoid.c                             \
        invalid-matrix.c                                \
        inverse-text.c                                  \
+       inverted-clip.c                                 \
        joins.c                                         \
        joins-loop.c                                    \
        joins-star.c                                    \
@@ -203,10 +210,10 @@ test_sources = \
        mesh-pattern-overlap.c                          \
        mesh-pattern-transformed.c                      \
        mime-data.c                                     \
-       mime-surface.c                                  \
        mime-surface-api.c                              \
        miter-precision.c                               \
        move-to-show-surface.c                          \
+       negative-stride-image.c                         \
        new-sub-path.c                                  \
        nil-surface.c                                   \
        operator.c                                      \
@@ -228,11 +235,13 @@ test_sources = \
        paint-with-alpha.c                              \
        partial-clip-text.c                             \
        partial-coverage.c                              \
+       pass-through.c                                  \
        path-append.c                                   \
        path-stroke-twice.c                             \
        path-precision.c                                \
        pattern-get-type.c                              \
        pattern-getters.c                               \
+       pdf-isolated-group.c                            \
        pixman-rotate.c                                 \
        png.c                                           \
        push-group.c                                    \
@@ -246,7 +255,11 @@ test_sources = \
        random-intersections-nonzero.c                  \
        random-intersections-curves-eo.c                \
        random-intersections-curves-nz.c                \
+       raster-source.c                                 \
        record.c                                        \
+       record1414x.c                                   \
+       record2x.c                                      \
+       record90.c                                      \
        record-extend.c                                 \
        record-mesh.c                                   \
        recording-surface-pattern.c                     \
@@ -256,6 +269,7 @@ test_sources = \
        rectilinear-grid.c                              \
        rectilinear-miter-limit.c                       \
        rectilinear-dash.c                              \
+       rectilinear-dash-scale.c                        \
        rectilinear-stroke.c                            \
        reflected-stroke.c                              \
        rel-path.c                                      \
@@ -296,6 +310,7 @@ test_sources = \
        source-clip-scale.c                             \
        source-surface-scale-paint.c                    \
        spline-decomposition.c                          \
+       stride-12-image.c                               \
        stroke-pattern.c                                \
        subsurface.c                                    \
        subsurface-image-repeat.c                       \
@@ -315,6 +330,7 @@ test_sources = \
        surface-pattern-scale-down-extend.c             \
        surface-pattern-scale-up.c                      \
        text-antialias.c                                \
+       text-antialias-subpixel.c                       \
        text-cache-crash.c                              \
        text-glyph-range.c                              \
        text-pattern.c                                  \
index 5235769..ba8ea5b 100644 (file)
@@ -2,9 +2,17 @@ top_srcdir = ..
 include $(top_srcdir)/build/Makefile.win32.common
 include $(top_srcdir)/test/Makefile.sources
 
-CFLAGS += -I$(top_srcdir)/boilerplate -I./pdiff
-
-TEST_LIBS = ./pdiff/$(CFG)/pdiff.lib $(top_builddir)/src/$(CFG)/cairo-static.lib $(top_builddir)/boilerplate/$(CFG)/boiler.lib
+CFLAGS += \
+       -I$(top_srcdir)/boilerplate \
+       -I$(top_srcdir)/util/cairo-script/ \
+       -I./pdiff \
+       $(NULL)
+
+TEST_LIBS = \
+       ./pdiff/$(CFG)/pdiff.lib \
+       $(top_builddir)/boilerplate/$(CFG)/boiler.lib \
+       $(top_builddir)/src/$(CFG)/cairo-static.lib \
+       $(NULL)
 
 all: inform $(CFG)/cairo-test-suite.exe
 
@@ -15,9 +23,18 @@ SOURCES = $(cairo_test_suite_sources) $(test_sources) cairo-test-constructors.c
 
 OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(SOURCES))
 
+ANY2PPM_OBJS = \
+       $(CFG)/any2ppm-static.obj \
+       $(top_builddir)/util/cairo-script/$(CFG)/libcairo-script-interpreter.lib \
+       $(top_builddir)/src/$(CFG)/cairo-static.lib \
+       $(NULL)
+
 $(CFG)/cairo-test-suite.exe: $(OBJECTS) $(TEST_LIBS)
        @$(LD) $(CAIRO_LDFLAGS) -OUT:$@ $(OBJECTS) $(TEST_LIBS) $(CAIRO_LIBS)
 
+$(CFG)/any2ppm.exe: $(ANY2PPM_OBJS)
+       $(LD) $(CAIRO_LDFLAGS) -OUT:$@ $^ $(CAIRO_LIBS)
+
 ./pdiff/$(CFG)/pdiff.lib:
        $(MAKE) -C pdiff -f Makefile.win32
 
@@ -27,9 +44,12 @@ $(top_builddir)/src/$(CFG)/cairo-static.lib:
 $(top_builddir)/boilerplate/$(CFG)/boiler.lib:
        $(MAKE) -C $(top_srcdir)/boilerplate -f Makefile.win32
 
+$(top_builddir)/util/cairo-script/$(CFG)/libcairo-script-interpreter.lib:
+       $(MAKE) -C $(top_srcdir)/util/cairo-script -f Makefile.win32
+
 .PHONY: check test
 
-check: inform $(CFG)/cairo-test-suite.exe
-       ./$(CFG)/cairo-test-suite.exe
+check: inform $(CFG)/any2ppm.exe $(CFG)/cairo-test-suite.exe
+       @ANY2PPM=$(CFG)\\any2ppm.exe $(CFG)/cairo-test-suite.exe
 
 test: inform check
index c6f8401..b8effea 100644 (file)
@@ -57,7 +57,7 @@ this is interfering with the results, you can clear the cached results using:
 
   make clean-caches
 
-Running tests under modified enviroments or tools
+Running tests under modified environments or tools
 -------------------------------------------------
 To run tests under a tool like gdb, one can use the run target and
 the TOOL variable.  For example:
@@ -96,10 +96,10 @@ Here are some of the relevant details:
 
   * Your system must have a copy of the DejaVu font, the sha1sum of
     the version used are listed in [...].  These are
-      "DejaVu Sans" (DejaVuSans.ttf) [682718dd37c3f6a4767386d3b2b27fba9b219818];
-      "DejaVu Sans Mono" (DejaVuSansMono.ttf) [1cc58255d6f9df2b08e760ca38937a2957153484];
-      "DejaVu Serif" (DejaVuSerif.ttf) [020e72e92cb2f66107dc18c70ac4214df4f13014];
-      [the DejaVu fonts can be installed from the ttf-dejavu Debian package]
+      "DejaVu Sans" (DejaVuSans.ttf) [1cd336329f45f241002ded61893d91e3acd04436];
+      "DejaVu Sans Mono" (DejaVuSansMono.ttf) [0458c0f0fb57f3eb8ced62f26fe7c5ed4e6a9a68];
+      "DejaVu Serif" (DejaVuSerif.ttf) [93502d0d0445d1fe1c9f51e51b3e0169266346ce];
+      [the DejaVu fonts can be installed from the ttf-dejavu 2.33-2 Debian package]
     and also
       "Nimbus Sans L" (n019003l.pfb)
       [which can be found in the gsfonts Debian package].
index 40c304b..2403347 100644 (file)
@@ -77,6 +77,8 @@
 #include <libspectre/spectre.h>
 #endif
 
+#include <errno.h>
+
 #if HAVE_UNISTD_H && HAVE_FCNTL_H && HAVE_SIGNAL_H && HAVE_SYS_STAT_H && HAVE_SYS_SOCKET_H && HAVE_SYS_POLL_H && HAVE_SYS_UN_H
 #include <fcntl.h>
 #include <signal.h>
@@ -84,7 +86,6 @@
 #include <sys/socket.h>
 #include <sys/poll.h>
 #include <sys/un.h>
-#include <errno.h>
 
 #define SOCKET_PATH "./.any2ppm"
 #define TIMEOUT 60000 /* 60 seconds */
@@ -95,7 +96,7 @@
 #define ARRAY_LENGTH(A) (sizeof (A) / sizeof (A[0]))
 
 static int
-_writen (int fd, char *buf, int len)
+_cairo_writen (int fd, char *buf, int len)
 {
     while (len) {
        int ret;
@@ -119,7 +120,7 @@ _writen (int fd, char *buf, int len)
 }
 
 static int
-_write (int fd,
+_cairo_write (int fd,
        char *buf, int maxlen, int buflen,
        const unsigned char *src, int srclen)
 {
@@ -140,7 +141,7 @@ _write (int fd,
        src += len;
 
        if (buflen == maxlen) {
-           if (! _writen (fd, buf, buflen))
+           if (! _cairo_writen (fd, buf, buflen))
                return -1;
 
            buflen = 0;
@@ -192,6 +193,7 @@ write_ppm (cairo_surface_t *surface, int fd)
        break;
     case CAIRO_FORMAT_A1:
     case CAIRO_FORMAT_RGB16_565:
+    case CAIRO_FORMAT_RGB30:
     case CAIRO_FORMAT_INVALID:
     default:
        return "unhandled image format";
@@ -203,7 +205,7 @@ write_ppm (cairo_surface_t *surface, int fd)
 
        switch ((int) format) {
        case CAIRO_FORMAT_ARGB32:
-           len = _write (fd,
+           len = _cairo_write (fd,
                          buf, sizeof (buf), len,
                          (unsigned char *) row, 4 * width);
            break;
@@ -214,13 +216,13 @@ write_ppm (cairo_surface_t *surface, int fd)
                rgb[0] = (p & 0xff0000) >> 16;
                rgb[1] = (p & 0x00ff00) >> 8;
                rgb[2] = (p & 0x0000ff) >> 0;
-               len = _write (fd,
+               len = _cairo_write (fd,
                              buf, sizeof (buf), len,
                              rgb, 3);
            }
            break;
        case CAIRO_FORMAT_A8:
-           len = _write (fd,
+           len = _cairo_write (fd,
                          buf, sizeof (buf), len,
                          (unsigned char *) row, width);
            break;
@@ -229,7 +231,7 @@ write_ppm (cairo_surface_t *surface, int fd)
            return "write failed";
     }
 
-    if (len && ! _writen (fd, buf, len))
+    if (len && ! _cairo_writen (fd, buf, len))
        return "write failed";
 
     return NULL;
@@ -268,8 +270,13 @@ _cairo_script_render_page (const char *filename,
     cairo_surface_t *surface = NULL;
     cairo_status_t status;
     const cairo_script_interpreter_hooks_t hooks = {
-       .closure = &surface,
-       .surface_create = _create_image,
+       &surface,
+       _create_image,
+       NULL, /* surface_destroy */
+       NULL, /* context_create */
+       NULL, /* context_destroy */
+       NULL, /* show_page */
+       NULL  /* copy_page */
     };
 
     csi = cairo_script_interpreter_create ();
index dbe9eb2..53891bd 100644 (file)
@@ -561,6 +561,13 @@ test_cairo_xcb_surface_set_size (cairo_surface_t *surface)
     return CAIRO_TEST_SUCCESS;
 }
 
+static cairo_test_status_t
+test_cairo_xcb_surface_set_drawable (cairo_surface_t *surface)
+{
+    cairo_xcb_surface_set_drawable (surface, 0, 5, 5);
+    return CAIRO_TEST_SUCCESS;
+}
+
 #endif
 
 #if CAIRO_HAS_XLIB_SURFACE
@@ -704,6 +711,7 @@ struct {
 #endif
 #if CAIRO_HAS_XCB_SURFACE
     TEST (cairo_xcb_surface_set_size, CAIRO_SURFACE_TYPE_XCB, TRUE),
+    TEST (cairo_xcb_surface_set_drawable, CAIRO_SURFACE_TYPE_XCB, TRUE),
 #endif
 #if CAIRO_HAS_XLIB_SURFACE
     TEST (cairo_xlib_surface_set_size, CAIRO_SURFACE_TYPE_XLIB, TRUE),
diff --git a/test/arc-direction.c b/test/arc-direction.c
new file mode 100644 (file)
index 0000000..fddb528
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+#define SIZE           (2 * 20)
+#define PAD            (2)
+
+static cairo_test_status_t
+draw_arcs (cairo_t *cr)
+{
+    double start = M_PI/12, stop = 2*start;
+
+    cairo_move_to (cr, SIZE/2, SIZE/2);
+    cairo_arc (cr, SIZE/2, SIZE/2, SIZE/2, start, stop);
+    cairo_fill (cr);
+
+    cairo_translate (cr, SIZE+PAD, 0);
+    cairo_move_to (cr, SIZE/2, SIZE/2);
+    cairo_arc (cr, SIZE/2, SIZE/2, SIZE/2, 2*M_PI-stop, 2*M_PI-start);
+    cairo_fill (cr);
+
+    cairo_translate (cr, 0, SIZE+PAD);
+    cairo_move_to (cr, SIZE/2, SIZE/2);
+    cairo_arc_negative (cr, SIZE/2, SIZE/2, SIZE/2, 2*M_PI-stop, 2*M_PI-start);
+    cairo_fill (cr);
+
+    cairo_translate (cr, -SIZE-PAD, 0);
+    cairo_move_to (cr, SIZE/2, SIZE/2);
+    cairo_arc_negative (cr, SIZE/2, SIZE/2, SIZE/2, start, stop);
+    cairo_fill (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    cairo_save (cr);
+    cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
+    cairo_paint (cr);
+    cairo_restore (cr);
+
+    cairo_save (cr);
+    cairo_translate (cr, PAD, PAD);
+    draw_arcs(cr);
+    cairo_restore (cr);
+
+    cairo_set_source_rgb (cr, 1, 0, 0);
+    cairo_translate (cr, 2*SIZE+3*PAD, 0);
+    cairo_save (cr);
+    cairo_translate (cr, 2*SIZE+2*PAD, PAD);
+    cairo_scale (cr, -1, 1);
+    draw_arcs(cr);
+    cairo_restore (cr);
+
+    cairo_set_source_rgb (cr, 1, 0, 1);
+    cairo_translate (cr, 0, 2*SIZE+3*PAD);
+    cairo_save (cr);
+    cairo_translate (cr, 2*SIZE+2*PAD, 2*SIZE+2*PAD);
+    cairo_scale (cr, -1, -1);
+    draw_arcs(cr);
+    cairo_restore (cr);
+
+    cairo_set_source_rgb (cr, 0, 0, 1);
+    cairo_translate (cr, -(2*SIZE+3*PAD), 0);
+    cairo_save (cr);
+    cairo_translate (cr, PAD, 2*SIZE+2*PAD);
+    cairo_scale (cr, 1, -1);
+    draw_arcs(cr);
+    cairo_restore (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (arc_direction,
+           "Test drawing positive/negative arcs",
+           "arc fill", /* keywords */
+           NULL, /* requirements */
+           2*(3*PAD + 2*SIZE), 2*(3*PAD + 2*SIZE),
+           NULL, draw)
+
index 087ac45..f3d90ca 100644 (file)
@@ -43,7 +43,7 @@
 
 /* Don't allow any differences greater than this value, even if pdiff
  * claims that the images are identical */
-#define PERCEPTUAL_DIFF_THRESHOLD 25
+#define PERCEPTUAL_DIFF_THRESHOLD 256
 
 /* Compare two buffers, returning the number of pixels that are
  * different and the maximum difference of any single color channel in
@@ -135,7 +135,10 @@ compare_surfaces (const cairo_test_context_t  *ctx,
     double gamma = 2.2;
     double luminance = 100.0;
     double field_of_view = 45.0;
+    float pixels_changed_percentage = 0.05;
     int discernible_pixels_changed;
+    int pixels_tolerance;
+    int width, height;
 
     /* First, we run cairo's old buffer_diff algorithm which looks for
      * pixel-perfect images, (we do this first since the test suite
@@ -167,9 +170,12 @@ compare_surfaces (const cairo_test_context_t  *ctx,
      * is lower than a threshold, otherwise some problems could be masked.
      */
     if (result->max_diff < PERCEPTUAL_DIFF_THRESHOLD) {
+       width = cairo_image_surface_get_width (surface_a);
+       height = cairo_image_surface_get_height (surface_a);
+       pixels_tolerance = width * height * pixels_changed_percentage;
         discernible_pixels_changed = pdiff_compare (surface_a, surface_b,
                                                     gamma, luminance, field_of_view);
-        if (discernible_pixels_changed == 0) {
+        if (discernible_pixels_changed <= pixels_tolerance) {
             result->pixels_changed = 0;
             cairo_test_log (ctx,
                            "But perceptual diff finds no visually discernible difference.\n"
diff --git a/test/bug-source-cu.c b/test/bug-source-cu.c
new file mode 100644 (file)
index 0000000..4c1e2bc
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include "cairo-test.h"
+
+static cairo_pattern_t *
+create_pattern (cairo_surface_t *target)
+{
+    cairo_surface_t *surface;
+    cairo_pattern_t *pattern;
+    cairo_t *cr;
+    cairo_matrix_t m;
+
+    surface = cairo_surface_create_similar(target,
+                                          cairo_surface_get_content (target),
+                                          1000, 600);
+    cr = cairo_create (surface);
+    cairo_surface_destroy (surface);
+
+    cairo_set_source_rgb (cr, 0, 1, 0);
+    cairo_paint(cr);
+
+    pattern = cairo_pattern_create_for_surface (cairo_get_target (cr));
+    cairo_destroy(cr);
+
+    cairo_matrix_init_translate (&m, 0, 0.1); // y offset must be non-integer
+    cairo_pattern_set_matrix (pattern, &m);
+    return pattern;
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    cairo_pattern_t *pattern;
+
+    cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+
+    cairo_set_source_rgb (cr, 1, 0, 0);
+    cairo_paint (cr);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, 10, 400.1);
+    cairo_line_to (cr, 990, 400.1);
+    cairo_line_to (cr, 990, 600);
+    cairo_line_to (cr, 10,  600);
+    cairo_close_path (cr);
+
+    pattern = create_pattern (cairo_get_target (cr));
+    cairo_set_source (cr, pattern);
+    cairo_pattern_destroy (pattern);
+
+    cairo_fill(cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (bug_source_cu,
+           "Exercises a bug discovered in the tracking of unbounded source extents",
+           "fill", /* keywords */
+           NULL, /* requirements */
+           1000, 600,
+           NULL, draw)
index bd0c0ac..3e40324 100644 (file)
@@ -46,9 +46,6 @@ cairo_test_target_has_similar (const cairo_test_context_t *ctx,
                               const cairo_boilerplate_target_t *target);
 
 cairo_test_status_t
-_cairo_test_context_run (cairo_test_context_t *ctx);
-
-cairo_test_status_t
 _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
                                    const cairo_boilerplate_target_t *target,
                                    cairo_bool_t similar,
@@ -64,9 +61,6 @@ cairo_test_init (cairo_test_context_t *ctx,
                 const char *test_name,
                 const char *output);
 
-cairo_test_status_t
-cairo_test (const cairo_test_t *test);
-
 void
 cairo_test_fini (cairo_test_context_t *ctx);
 
index 28e4b5d..a5c6705 100644 (file)
 
 #include <pixman.h> /* for version information */
 
-/* Coregraphics doesn't seem to like being forked and reports:
- * "The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec()."
- * so we don't for on OS X */
-#define SHOULD_FORK HAVE_FORK && HAVE_WAITPID && !__APPLE__
+#define SHOULD_FORK HAVE_FORK && HAVE_WAITPID
 #if SHOULD_FORK
 #if HAVE_UNISTD_H
 #include <unistd.h>
@@ -107,7 +104,7 @@ typedef enum {
     GT
 } cairo_test_compare_op_t;
 
-static cairo_test_t *tests;
+static cairo_test_list_t *tests;
 
 static void CAIRO_BOILERPLATE_PRINTF_FORMAT(2,3)
 _log (cairo_test_context_t *ctx,
@@ -125,18 +122,6 @@ _log (cairo_test_context_t *ctx,
     va_end (ap);
 }
 
-static void
-_tests_reverse (void)
-{
-    cairo_test_t *list, *next;
-
-    for (list = tests, tests = NULL; list != NULL; list = next) {
-       next = list->next;
-       list->next = tests;
-       tests = list;
-    }
-}
-
 static cairo_test_list_t *
 _list_prepend (cairo_test_list_t *head, const cairo_test_t *test)
 {
@@ -341,7 +326,6 @@ usage (const char *argv0)
 {
     fprintf (stderr,
             "Usage: %s [-afkxsl] [test-names|keywords ...]\n"
-            "       %s -l\n"
             "\n"
             "Run the cairo conformance test suite over the given tests (all by default)\n"
             "The command-line arguments are interpreted as follows:\n"
@@ -350,15 +334,15 @@ usage (const char *argv0)
             "          skips similar surface and device offset testing.\n"
             "  -f      foreground; do not fork\n"
             "  -k      match tests by keyword\n"
+            "  -l      list only; just list selected test case names without executing\n"
             "  -s      include slow, long running tests\n"
             "  -x      exit on first failure\n"
-            "  -l      list only; just list selected test case names without executing\n"
             "\n"
             "If test names are given they are used as matches either to a specific\n"
             "test case or to a keyword, so a command such as\n"
-            "\"cairo-test-suite -k text\" can be used to run all text test cases, and\n"
-            "\"cairo-test-suite text-transform\" to run the individual case.\n",
-            argv0, argv0);
+            "\"%s -k text\" can be used to run all text test cases, and\n"
+            "\"%s text-transform\" to run the individual case.\n",
+            argv0, argv0, argv0);
 }
 
 static void
@@ -367,7 +351,7 @@ _parse_cmdline (cairo_test_runner_t *runner, int *argc, char **argv[])
     int c;
 
     while (1) {
-       c = _cairo_getopt (*argc, *argv, ":afkxsl");
+       c = _cairo_getopt (*argc, *argv, ":afklsx");
        if (c == -1)
            break;
 
@@ -375,21 +359,21 @@ _parse_cmdline (cairo_test_runner_t *runner, int *argc, char **argv[])
        case 'a':
            runner->full_test = TRUE;
            break;
-       case 's':
-           runner->slow = TRUE;
+       case 'f':
+           runner->foreground = TRUE;
+           break;
+       case 'k':
+           runner->keyword_match = TRUE;
            break;
        case 'l':
            runner->list_only = TRUE;
            break;
-       case 'f':
-           runner->foreground = TRUE;
+       case 's':
+           runner->slow = TRUE;
            break;
        case 'x':
            runner->exit_on_failure = TRUE;
            break;
-       case 'k':
-           runner->keyword_match = TRUE;
-           break;
        default:
            fprintf (stderr, "Internal error: unhandled option: %c\n", c);
            /* fall-through */
@@ -710,7 +694,7 @@ int
 main (int argc, char **argv)
 {
     cairo_test_runner_t runner;
-    cairo_test_t *test;
+    cairo_test_list_t *test_list;
     cairo_test_status_t *target_status;
     unsigned int n, m;
     char targets[4096];
@@ -724,7 +708,7 @@ main (int argc, char **argv)
 #endif
 
     _cairo_test_runner_register_tests ();
-    _tests_reverse ();
+    tests = _list_reverse (tests);
 
     memset (&runner, 0, sizeof (runner));
     runner.num_device_offsets = 1;
@@ -769,7 +753,8 @@ main (int argc, char **argv)
                                 runner.base.num_targets);
     }
 
-    for (test = tests; test != NULL; test = test->next) {
+    for (test_list = tests; test_list != NULL; test_list = test_list->next) {
+       const cairo_test_t *test = test_list->test;
        cairo_test_context_t ctx;
        cairo_test_status_t status;
        cairo_bool_t failed = FALSE, xfailed = FALSE, error = FALSE, crashed = FALSE, skipped = TRUE;
@@ -1098,6 +1083,5 @@ main (int argc, char **argv)
 void
 cairo_test_register (cairo_test_t *test)
 {
-    test->next = tests;
-    tests = test;
+    tests = _list_prepend (tests, test);
 }
index fb1bd42..52d9dd9 100644 (file)
@@ -591,7 +591,6 @@ spawn_target (const char *socket_path,
                                         1, 1,
                                         1, 1,
                                         CAIRO_BOILERPLATE_MODE_TEST,
-                                        0,
                                         &tr.closure);
     if (tr.surface == NULL) {
        fprintf (stderr,
@@ -1527,17 +1526,16 @@ static void
 usage (const char *argv0)
 {
     fprintf (stderr,
-"Usage: %s [-x exclude-file] [test-names ... | traces ...]\n"
-"       %s -l\n"
+"Usage: %s [-l] [-x exclude-file] [test-names ... | traces ...]\n"
 "\n"
 "Run the cairo test suite over the given traces (all by default).\n"
 "The command-line arguments are interpreted as follows:\n"
 "\n"
-"  -x   exclude; specify a file to read a list of traces to exclude\n"
 "  -l  list only; just list selected test case names without executing\n"
+"  -x  exclude; specify a file to read a list of traces to exclude\n"
 "\n"
 "If test names are given they are used as sub-string matches so a command\n"
-"such as \"cairo-test-trace firefox\" can be used to run all firefox traces.\n"
+"such as \"%s firefox\" can be used to run all firefox traces.\n"
 "Alternatively, you can specify a list of filenames to execute.\n",
             argv0, argv0);
 }
@@ -1554,7 +1552,7 @@ parse_options (test_trace_t *test, int argc, char *argv[])
     test->num_exclude_names = 0;
 
     while (1) {
-       c = _cairo_getopt (argc, argv, "x:l");
+       c = _cairo_getopt (argc, argv, "lx:");
        if (c == -1)
            break;
 
index b2d6b3f..3f37147 100644 (file)
 
 #ifdef _MSC_VER
 #include <crtdbg.h>
+#include <direct.h>
 #define F_OK 0
+#define HAVE_MKDIR 1
+#define mkdir _mkdir
 #endif
 
 #ifndef FALSE
@@ -87,7 +90,7 @@
 #define ARRAY_SIZE(A) (sizeof(A) / sizeof (A[0]))
 #endif
 
-#if ! HAVE_ALARM
+#if ! HAVE_ALARM || ! defined(SIGALRM)
 #define alarm(X);
 #endif
 
@@ -102,14 +105,30 @@ static int cairo_test_timeout = 60;
 
 #define NUM_DEVICE_OFFSETS 2
 
+static cairo_bool_t
+_cairo_test_mkdir (const char *path)
+{
+#if ! HAVE_MKDIR
+    return FALSE;
+#elif HAVE_MKDIR == 1
+    if (mkdir (path) == 0)
+       return TRUE;
+#elif HAVE_MKDIR == 2
+    if (mkdir (path, 0770) == 0)
+       return TRUE;
+#else
+#error Bad value for HAVE_MKDIR
+#endif
+
+    return errno == EEXIST;
+}
+
 static char *
 _cairo_test_fixup_name (const char *original)
 {
-    int len = strlen (original);
     char *name, *s;
 
-    name = xmalloc (len + 1);
-    s = memcpy (name, original, len + 1);
+    s = name = xstrdup (original);
     while ((s = strchr (s, '_')) != NULL)
        *s++ = '-';
 
@@ -141,6 +160,8 @@ _cairo_test_init (cairo_test_context_t *ctx,
     ctx->test_name = _cairo_test_fixup_name (test_name);
     ctx->output = output;
 
+    _cairo_test_mkdir (ctx->output);
+
     ctx->malloc_failure = 0;
 #if HAVE_MEMFAULT
     if (getenv ("CAIRO_TEST_MALLOC_FAILURE"))
@@ -167,8 +188,6 @@ _cairo_test_init (cairo_test_context_t *ctx,
     ctx->ref_image = NULL;
     ctx->ref_image_flattened = NULL;
 
-    ctx->thread = 0;
-
     if (parent != NULL) {
        ctx->targets_to_test = parent->targets_to_test;
        ctx->num_targets = parent->num_targets;
@@ -222,23 +241,9 @@ cairo_test_init (cairo_test_context_t *ctx,
     _cairo_test_init (ctx, NULL, NULL, test_name, output);
 }
 
-static void
-cairo_test_init_thread (cairo_test_context_t *ctx,
-                       cairo_test_context_t *master,
-                       int thread)
-{
-    MF (MEMFAULT_DISABLE_FAULTS ());
-
-    *ctx = *master;
-    ctx->thread = thread;
-}
-
 void
 cairo_test_fini (cairo_test_context_t *ctx)
 {
-    if (ctx->thread != 0)
-       return;
-
     if (ctx->log_file == NULL)
        return;
 
@@ -246,8 +251,7 @@ cairo_test_fini (cairo_test_context_t *ctx)
        fclose (ctx->log_file);
     ctx->log_file = NULL;
 
-    if (ctx->ref_name != NULL)
-       free (ctx->ref_name);
+    free (ctx->ref_name);
     cairo_surface_destroy (ctx->ref_image);
     cairo_surface_destroy (ctx->ref_image_flattened);
 
@@ -277,49 +281,12 @@ void
 cairo_test_log (const cairo_test_context_t *ctx, const char *fmt, ...)
 {
     va_list va;
-    FILE *file = ctx && ctx->log_file ? ctx->log_file : stderr;
 
     va_start (va, fmt);
-    vfprintf (file, fmt, va);
+    cairo_test_logv (ctx, fmt, va);
     va_end (va);
 }
 
-void
-cairo_test_log_path (const cairo_test_context_t *ctx,
-                    const cairo_path_t *path)
-{
-  int i;
-
-  for (i = 0; i < path->num_data; i += path->data[i].header.length) {
-    cairo_path_data_t *data = &path->data[i];
-    switch (data->header.type) {
-    case CAIRO_PATH_MOVE_TO:
-       cairo_test_log (ctx,
-                       "    cairo_move_to (cr, %g, %g);\n",
-                       data[1].point.x, data[1].point.y);
-        break;
-    case CAIRO_PATH_LINE_TO:
-       cairo_test_log (ctx,
-                       "    cairo_line_to (cr, %g, %g);\n",
-                       data[1].point.x, data[1].point.y);
-       break;
-    case CAIRO_PATH_CURVE_TO:
-       cairo_test_log (ctx,
-                       "    cairo_curve_to (cr, %g, %g, %g, %g, %g, %g);\n",
-                       data[1].point.x, data[1].point.y,
-                       data[2].point.x, data[2].point.y,
-                       data[3].point.x, data[3].point.y);
-       break;
-    case CAIRO_PATH_CLOSE_PATH:
-       cairo_test_log (ctx,
-                       "    cairo_close_path (cr);\n\n");
-       break;
-    default:
-       assert (0);
-    }
-  }
-}
-
 static void
 _xunlink (const cairo_test_context_t *ctx, const char *pathname)
 {
@@ -437,24 +404,6 @@ done:
     return ref_name;
 }
 
-static cairo_bool_t
-_cairo_test_mkdir (const char *path)
-{
-#if ! HAVE_MKDIR
-    return FALSE;
-#elif HAVE_MKDIR == 1
-    if (mkdir (path) == 0)
-       return TRUE;
-#elif HAVE_MKDIR == 2
-    if (mkdir (path, 0770) == 0)
-       return TRUE;
-#else
-#error Bad value for HAVE_MKDIR
-#endif
-
-    return errno == EEXIST;
-}
-
 cairo_test_similar_t
 cairo_test_target_has_similar (const cairo_test_context_t *ctx,
                               const cairo_boilerplate_target_t *target)
@@ -488,7 +437,6 @@ cairo_test_target_has_similar (const cairo_test_context_t *ctx,
                                                ctx->test->width + 25 * NUM_DEVICE_OFFSETS,
                                                ctx->test->height + 25 * NUM_DEVICE_OFFSETS,
                                                CAIRO_BOILERPLATE_MODE_TEST,
-                                               0,
                                                &closure);
            if (surface == NULL)
                goto out;
@@ -559,7 +507,6 @@ cairo_test_get_reference_image (cairo_test_context_t *ctx,
                                cairo_bool_t flatten)
 {
     cairo_surface_t *surface;
-    int len;
 
     if (ctx->ref_name != NULL) {
        if (strcmp (ctx->ref_name, filename) == 0)
@@ -579,10 +526,7 @@ cairo_test_get_reference_image (cairo_test_context_t *ctx,
     if (cairo_surface_status (surface))
        return surface;
 
-    len = strlen (filename);
-    ctx->ref_name = xmalloc (len + 1);
-    memcpy (ctx->ref_name, filename, len + 1);
-
+    ctx->ref_name = xstrdup (filename);
     ctx->ref_image = surface;
     return _cairo_test_flatten_reference_image (ctx, flatten);
 }
@@ -694,7 +638,7 @@ cairo_test_for_target (cairo_test_context_t          *ctx,
     cairo_surface_t *surface = NULL;
     cairo_t *cr;
     const char *empty_str = "";
-    char *offset_str, *thread_str;
+    char *offset_str;
     char *base_name, *base_path;
     char *out_png_path;
     char *ref_path = NULL, *ref_png_path, *cmp_png_path = NULL;
@@ -725,24 +669,16 @@ cairo_test_for_target (cairo_test_context_t                *ctx,
        xasprintf (&offset_str, ".%d", dev_offset);
     else
        offset_str = (char *) empty_str;
-    if (ctx->thread)
-       xasprintf (&thread_str, ".thread%d", ctx->thread);
-    else
-       thread_str = (char *) empty_str;
 
-    xasprintf (&base_name, "%s.%s.%s%s%s%s",
+    xasprintf (&base_name, "%s.%s.%s%s%s",
               ctx->test_name,
               target->name,
               format,
               similar ? ".similar" : "",
-              offset_str,
-              thread_str);
+              offset_str);
 
     if (offset_str != empty_str)
       free (offset_str);
-    if (thread_str != empty_str)
-      free (thread_str);
-
 
     ref_png_path = cairo_test_reference_filename (ctx,
                                                  base_name,
@@ -881,7 +817,6 @@ REPEAT:
                                        ctx->test->width + 25 * NUM_DEVICE_OFFSETS,
                                        ctx->test->height + 25 * NUM_DEVICE_OFFSETS,
                                        CAIRO_BOILERPLATE_MODE_TEST,
-                                       ctx->thread,
                                        &closure);
     if (surface == NULL) {
        cairo_test_log (ctx, "Error: Failed to set %s target\n", target->name);
@@ -1009,15 +944,13 @@ REPEAT:
        cairo_surface_destroy (surface);
        if (target->cleanup)
            target->cleanup (closure);
-       if (ctx->thread == 0) {
-           cairo_debug_reset_static_data ();
+       cairo_debug_reset_static_data ();
 #if HAVE_FCFINI
-           FcFini ();
+       FcFini ();
 #endif
-           if (MEMFAULT_COUNT_LEAKS () > 0) {
-               MEMFAULT_PRINT_FAULTS ();
-               MEMFAULT_PRINT_LEAKS ();
-           }
+       if (MEMFAULT_COUNT_LEAKS () > 0) {
+           MEMFAULT_PRINT_FAULTS ();
+           MEMFAULT_PRINT_LEAKS ();
        }
 
        goto REPEAT;
@@ -1066,15 +999,13 @@ REPEAT:
            cairo_surface_destroy (surface);
            if (target->cleanup)
                target->cleanup (closure);
-           if (ctx->thread == 0) {
-               cairo_debug_reset_static_data ();
+           cairo_debug_reset_static_data ();
 #if HAVE_FCFINI
-               FcFini ();
+           FcFini ();
 #endif
-               if (MEMFAULT_COUNT_LEAKS () > 0) {
-                   MEMFAULT_PRINT_FAULTS ();
-                   MEMFAULT_PRINT_LEAKS ();
-               }
+           if (MEMFAULT_COUNT_LEAKS () > 0) {
+               MEMFAULT_PRINT_FAULTS ();
+               MEMFAULT_PRINT_LEAKS ();
            }
 
            goto REPEAT;
@@ -1460,18 +1391,11 @@ REPEAT:
     }
 
 UNWIND_CAIRO:
-    if (test_filename != NULL) {
-       free (test_filename);
-       test_filename = NULL;
-    }
-    if (fail_filename != NULL) {
-       free (fail_filename);
-       fail_filename = NULL;
-    }
-    if (pass_filename != NULL) {
-       free (pass_filename);
-       pass_filename = NULL;
-    }
+    free (test_filename);
+    free (fail_filename);
+    free (pass_filename);
+
+    test_filename = fail_filename = pass_filename = NULL;
 
 #if HAVE_MEMFAULT
     if (ret == CAIRO_TEST_FAILURE)
@@ -1485,66 +1409,49 @@ UNWIND_SURFACE:
        target->cleanup (closure);
 
 #if HAVE_MEMFAULT
-    if (ctx->thread == 0) {
-       cairo_debug_reset_static_data ();
+    cairo_debug_reset_static_data ();
 
 #if HAVE_FCFINI
-       FcFini ();
+    FcFini ();
 #endif
 
-       if (MEMFAULT_COUNT_LEAKS () > 0) {
-           if (ret != CAIRO_TEST_FAILURE)
-               MEMFAULT_PRINT_FAULTS ();
-           MEMFAULT_PRINT_LEAKS ();
-       }
+    if (MEMFAULT_COUNT_LEAKS () > 0) {
+       if (ret != CAIRO_TEST_FAILURE)
+           MEMFAULT_PRINT_FAULTS ();
+       MEMFAULT_PRINT_LEAKS ();
     }
 
     if (ret == CAIRO_TEST_SUCCESS && --malloc_failure_iterations > 0)
        goto REPEAT;
 #endif
 
-    if (ctx->thread == 0) {
-       if (have_output)
-           cairo_test_log (ctx, "OUTPUT: %s\n", out_png_path);
+    if (have_output)
+       cairo_test_log (ctx, "OUTPUT: %s\n", out_png_path);
 
-       if (have_result) {
-           if (cmp_png_path == NULL) {
-               /* XXX presume we matched the normal ref last time */
-               cmp_png_path = ref_png_path;
-           }
-           cairo_test_log (ctx,
-                           "REFERENCE: %s\nDIFFERENCE: %s\n",
-                           cmp_png_path, diff_png_path);
+    if (have_result) {
+       if (cmp_png_path == NULL) {
+           /* XXX presume we matched the normal ref last time */
+           cmp_png_path = ref_png_path;
        }
+       cairo_test_log (ctx,
+                       "REFERENCE: %s\nDIFFERENCE: %s\n",
+                       cmp_png_path, diff_png_path);
     }
 
 UNWIND_STRINGS:
-    if (out_png_path)
-      free (out_png_path);
-    if (ref_png_path)
-      free (ref_png_path);
-    if (base_ref_png_path)
-      free (base_ref_png_path);
-    if (ref_path)
-      free (ref_path);
-    if (new_png_path)
-      free (new_png_path);
-    if (base_new_png_path)
-      free (base_new_png_path);
-    if (new_path)
-      free (new_path);
-    if (xfail_png_path)
-      free (xfail_png_path);
-    if (base_xfail_png_path)
-      free (base_xfail_png_path);
-    if (xfail_path)
-      free (xfail_path);
-    if (diff_png_path)
-      free (diff_png_path);
-    if (base_path)
-      free (base_path);
-    if (base_name)
-      free (base_name);
+    free (out_png_path);
+    free (ref_png_path);
+    free (base_ref_png_path);
+    free (ref_path);
+    free (new_png_path);
+    free (base_new_png_path);
+    free (new_path);
+    free (xfail_png_path);
+    free (base_xfail_png_path);
+    free (xfail_path);
+    free (diff_png_path);
+    free (base_path);
+    free (base_name);
 
     return ret;
 }
@@ -1585,16 +1492,14 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
                    target->name,
                    dev_offset);
 
-    if (ctx->thread == 0) {
-       printf ("%s.%s.%s [%d]%s:\t", ctx->test_name, target->name,
-               cairo_boilerplate_content_name (target->content),
-               dev_offset,
-               similar ? " (similar)": "");
-       fflush (stdout);
-    }
+    printf ("%s.%s.%s [%d]%s:\t", ctx->test_name, target->name,
+           cairo_boilerplate_content_name (target->content),
+           dev_offset,
+           similar ? " (similar)": "");
+    fflush (stdout);
 
 #if defined(HAVE_SIGNAL_H) && defined(HAVE_SETJMP_H)
-    if (ctx->thread == 0 && ! RUNNING_ON_VALGRIND) {
+    if (! RUNNING_ON_VALGRIND) {
        void (* volatile old_segfault_handler)(int);
        void (* volatile old_segfpe_handler)(int);
        void (* volatile old_sigpipe_handler)(int);
@@ -1643,280 +1548,102 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
     status = cairo_test_for_target (ctx, target, dev_offset, similar);
 #endif
 
-    if (ctx->thread == 0) {
-       cairo_test_log (ctx,
-               "TEST: %s TARGET: %s FORMAT: %s OFFSET: %d SIMILAR: %d RESULT: ",
-                       ctx->test_name, target->name,
-                       cairo_boilerplate_content_name (target->content),
-                       dev_offset, similar);
-       switch (status) {
-       case CAIRO_TEST_SUCCESS:
-           printf ("PASS\n");
-           cairo_test_log (ctx, "PASS\n");
-           break;
-
-       case CAIRO_TEST_UNTESTED:
-           printf ("UNTESTED\n");
-           cairo_test_log (ctx, "UNTESTED\n");
-           break;
-
-       default:
-       case CAIRO_TEST_CRASHED:
-           if (print_fail_on_stdout && ctx->thread == 0) {
-               printf ("!!!CRASHED!!!\n");
-           } else {
-               /* eat the test name */
-               printf ("\r");
-               fflush (stdout);
-           }
-           cairo_test_log (ctx, "CRASHED\n");
-           fprintf (stderr, "%s.%s.%s [%d]%s:\t%s!!!CRASHED!!!%s\n",
-                    ctx->test_name, target->name,
-                    cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
-                    fail_face, normal_face);
-           break;
-
-       case CAIRO_TEST_ERROR:
-           if (print_fail_on_stdout && ctx->thread == 0) {
-               printf ("!!!ERROR!!!\n");
-           } else {
-               /* eat the test name */
-               printf ("\r");
-               fflush (stdout);
-           }
-           cairo_test_log (ctx, "ERROR\n");
-           fprintf (stderr, "%s.%s.%s [%d]%s:\t%s!!!ERROR!!!%s\n",
-                    ctx->test_name, target->name,
-                    cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
-                    fail_face, normal_face);
-           break;
-
-       case CAIRO_TEST_XFAILURE:
-           if (print_fail_on_stdout && ctx->thread == 0) {
-               printf ("XFAIL\n");
-           } else {
-               /* eat the test name */
-               printf ("\r");
-               fflush (stdout);
-           }
-           fprintf (stderr, "%s.%s.%s [%d]%s:\t%sXFAIL%s\n",
-                    ctx->test_name, target->name,
-                    cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
-                    xfail_face, normal_face);
-           cairo_test_log (ctx, "XFAIL\n");
-           break;
+    cairo_test_log (ctx,
+                   "TEST: %s TARGET: %s FORMAT: %s OFFSET: %d SIMILAR: %d RESULT: ",
+                   ctx->test_name, target->name,
+                   cairo_boilerplate_content_name (target->content),
+                   dev_offset, similar);
+    switch (status) {
+    case CAIRO_TEST_SUCCESS:
+       printf ("PASS\n");
+       cairo_test_log (ctx, "PASS\n");
+       break;
 
-       case CAIRO_TEST_NEW:
-           if (print_fail_on_stdout && ctx->thread == 0) {
-               printf ("NEW\n");
-           } else {
-               /* eat the test name */
-               printf ("\r");
-               fflush (stdout);
-           }
-           fprintf (stderr, "%s.%s.%s [%d]%s:\t%sNEW%s\n",
-                    ctx->test_name, target->name,
-                    cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
-                    fail_face, normal_face);
-           cairo_test_log (ctx, "NEW\n");
-           break;
+    case CAIRO_TEST_UNTESTED:
+       printf ("UNTESTED\n");
+       cairo_test_log (ctx, "UNTESTED\n");
+       break;
 
-       case CAIRO_TEST_NO_MEMORY:
-       case CAIRO_TEST_FAILURE:
-           if (print_fail_on_stdout && ctx->thread == 0) {
-               printf ("FAIL\n");
-           } else {
-               /* eat the test name */
-               printf ("\r");
-               fflush (stdout);
-           }
-           fprintf (stderr, "%s.%s.%s [%d]%s:\t%sFAIL%s\n",
-                    ctx->test_name, target->name,
-                    cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
-                    fail_face, normal_face);
-           cairo_test_log (ctx, "FAIL\n");
-           break;
-       }
-       fflush (stdout);
-    } else {
-#if HAVE_FLOCKFILE && HAVE_FUNLOCKFILE
-       flockfile (stdout);
-#endif
-       printf ("%s.%s.%s %d [%d]:\t",
-               ctx->test_name, target->name,
-               cairo_boilerplate_content_name (target->content),
-               ctx->thread,
-               dev_offset);
-       switch (status) {
-       case CAIRO_TEST_SUCCESS:
-           printf ("PASS\n");
-           break;
-       case CAIRO_TEST_UNTESTED:
-           printf ("UNTESTED\n");
-           break;
-       default:
-       case CAIRO_TEST_CRASHED:
+    default:
+    case CAIRO_TEST_CRASHED:
+       if (print_fail_on_stdout) {
            printf ("!!!CRASHED!!!\n");
-           break;
-       case CAIRO_TEST_ERROR:
-           printf ("!!!ERRORED!!!\n");
-           break;
-       case CAIRO_TEST_XFAILURE:
-           printf ("XFAIL\n");
-           break;
-       case CAIRO_TEST_NEW:
-           printf ("NEW\n");
-           break;
-       case CAIRO_TEST_NO_MEMORY:
-       case CAIRO_TEST_FAILURE:
-           printf ("FAIL\n");
-           break;
+       } else {
+           /* eat the test name */
+           printf ("\r");
+           fflush (stdout);
        }
+       cairo_test_log (ctx, "CRASHED\n");
+       fprintf (stderr, "%s.%s.%s [%d]%s:\t%s!!!CRASHED!!!%s\n",
+                ctx->test_name, target->name,
+                cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
+                fail_face, normal_face);
+       break;
 
-       fflush (stdout);
-#if  HAVE_FLOCKFILE && HAVE_FUNLOCKFILE
-       funlockfile (stdout);
-#endif
-    }
-
-    return status;
-}
-
-cairo_test_status_t
-_cairo_test_context_run (cairo_test_context_t *ctx)
-{
-    size_t i, j;
-    cairo_test_status_t ret;
-
-    ret = CAIRO_TEST_UNTESTED;
-    if (ctx->test->preamble != NULL)
-       ret = ctx->test->preamble (ctx);
-
-    if (ctx->test->draw == NULL)
-       return ret;
-
-    /* The intended logic here is that we return overall SUCCESS
-     * iff. there is at least one tested backend and that all tested
-     * backends return SUCCESS, OR, there's backends were manually
-     * limited, and none were tested.
-     * In other words:
-     *
-     *  if      backends limited and no backend tested
-     *          -> SUCCESS
-     * else if any backend not SUCCESS
-     *         -> FAILURE
-     * else if all backends UNTESTED
-     *         -> FAILURE
-     * else    (== some backend SUCCESS)
-     *         -> SUCCESS
-     *
-     * Also, on a crash, run no further tests.
-     */
-    for (i = 0; i < ctx->num_targets && ret != CAIRO_TEST_CRASHED; i++) {
-       const cairo_boilerplate_target_t *target = ctx->targets_to_test[(i + ctx->thread) % ctx->num_targets];
-
-       for (j = 0; j < NUM_DEVICE_OFFSETS; j++) {
-           int dev_offset = ((j + ctx->thread) % NUM_DEVICE_OFFSETS) * 25;
-           cairo_test_similar_t similar, has_similar;
-
-           has_similar = cairo_test_target_has_similar (ctx, target);
-           for (similar = DIRECT; similar <= has_similar; similar++) {
-               cairo_status_t status;
-
-               status = _cairo_test_context_run_for_target (ctx,
-                                                            target,
-                                                            similar,
-                                                            dev_offset);
-               if (ret == CAIRO_TEST_UNTESTED)
-                   ret = status;
-           }
+    case CAIRO_TEST_ERROR:
+       if (print_fail_on_stdout) {
+           printf ("!!!ERROR!!!\n");
+       } else {
+           /* eat the test name */
+           printf ("\r");
+           fflush (stdout);
        }
-    }
-
-    return ret;
-}
-
-#if CAIRO_HAS_REAL_PTHREAD
-typedef struct _cairo_test_thread {
-    pthread_t thread;
-    cairo_test_context_t *ctx;
-    size_t id;
-} cairo_test_thread_t;
-
-static void *
-cairo_test_run_threaded (void *closure)
-{
-    cairo_test_thread_t *arg = closure;
-    cairo_test_context_t ctx;
-    cairo_test_status_t ret;
-
-    cairo_test_init_thread (&ctx, arg->ctx, arg->id);
-
-    ret = _cairo_test_context_run (&ctx);
-
-    cairo_test_fini (&ctx);
-
-    return (void *) ret;
-}
-#endif
-
-
-static cairo_test_status_t
-cairo_test_expecting (const cairo_test_t *test)
-{
-    cairo_test_context_t ctx;
-    cairo_test_status_t ret = CAIRO_TEST_SUCCESS;
-    size_t num_threads;
+       cairo_test_log (ctx, "ERROR\n");
+       fprintf (stderr, "%s.%s.%s [%d]%s:\t%s!!!ERROR!!!%s\n",
+                ctx->test_name, target->name,
+                cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
+                fail_face, normal_face);
+       break;
 
-    _cairo_test_init (&ctx, NULL, test, test->name, CAIRO_TEST_OUTPUT_DIR);
-    printf ("%s\n", test->description);
+    case CAIRO_TEST_XFAILURE:
+       if (print_fail_on_stdout) {
+           printf ("XFAIL\n");
+       } else {
+           /* eat the test name */
+           printf ("\r");
+           fflush (stdout);
+       }
+       fprintf (stderr, "%s.%s.%s [%d]%s:\t%sXFAIL%s\n",
+                ctx->test_name, target->name,
+                cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
+                xfail_face, normal_face);
+       cairo_test_log (ctx, "XFAIL\n");
+       break;
 
-#if CAIRO_HAS_REAL_PTHREAD
-    num_threads = 0;
-    if (getenv ("CAIRO_TEST_NUM_THREADS"))
-       num_threads = atoi (getenv ("CAIRO_TEST_NUM_THREADS"));
-    if (num_threads > 1) {
-       cairo_test_thread_t *threads;
-       size_t n;
-
-       threads = xmalloc (sizeof (cairo_test_thread_t) * num_threads);
-       for (n = 0; n < num_threads; n++) {
-           threads[n].ctx = &ctx;
-           threads[n].id = n + 1;
-           pthread_create (&threads[n].thread, NULL,
-                   cairo_test_run_threaded, &threads[n]);
+    case CAIRO_TEST_NEW:
+       if (print_fail_on_stdout) {
+           printf ("NEW\n");
+       } else {
+           /* eat the test name */
+           printf ("\r");
+           fflush (stdout);
        }
-       for (n = 0; n < num_threads; n++) {
-           void *tmp;
-           pthread_join (threads[n].thread, &tmp);
-           if (ret == CAIRO_TEST_SUCCESS)
-               ret = (cairo_test_status_t) tmp;
+       fprintf (stderr, "%s.%s.%s [%d]%s:\t%sNEW%s\n",
+                ctx->test_name, target->name,
+                cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
+                fail_face, normal_face);
+       cairo_test_log (ctx, "NEW\n");
+       break;
+
+    case CAIRO_TEST_NO_MEMORY:
+    case CAIRO_TEST_FAILURE:
+       if (print_fail_on_stdout) {
+           printf ("FAIL\n");
+       } else {
+           /* eat the test name */
+           printf ("\r");
+           fflush (stdout);
        }
-       free (threads);
+       fprintf (stderr, "%s.%s.%s [%d]%s:\t%sFAIL%s\n",
+                ctx->test_name, target->name,
+                cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "",
+                fail_face, normal_face);
+       cairo_test_log (ctx, "FAIL\n");
+       break;
     }
+    fflush (stdout);
 
-    if (ret == CAIRO_TEST_SUCCESS)
-#endif
-       ret = _cairo_test_context_run (&ctx);
-
-    if (ret != CAIRO_TEST_SUCCESS)
-        printf ("Check %s%s out for more information.\n", ctx.test_name, CAIRO_TEST_LOG_SUFFIX);
-
-    cairo_test_fini (&ctx);
-
-    return ret;
-}
-
-cairo_test_status_t
-cairo_test (const cairo_test_t *test)
-{
-#ifdef _MSC_VER
-    /* We don't want an assert dialog, we want stderr */
-    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
-    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
-#endif
-
-    return cairo_test_expecting (test);
+    return status;
 }
 
 const cairo_test_context_t *
index dd4fcf9..d41cd29 100644 (file)
@@ -153,7 +153,6 @@ typedef cairo_test_status_t
 (cairo_test_draw_function_t) (cairo_t *cr, int width, int height);
 
 struct _cairo_test {
-    struct _cairo_test *next;
     const char *name;
     const char *description;
     const char *keywords;
@@ -194,7 +193,7 @@ struct _cairo_test {
 void _register_##name (void); \
 void _register_##name (void) { \
     static cairo_test_t test = { \
-       NULL, #name, description, \
+       #name, description, \
        keywords, requirements, \
        width, height, \
        preamble, draw \
@@ -237,8 +236,6 @@ struct _cairo_test_context {
     int last_fault_count;
 
     int timeout;
-
-    int thread;
 };
 
 /* Retrieve the test context from the cairo_t, used for logging, paths etc */
@@ -254,10 +251,6 @@ void
 cairo_test_logv (const cairo_test_context_t *ctx,
                const char *fmt, va_list ap) CAIRO_BOILERPLATE_PRINTF_FORMAT(2, 0);
 
-void
-cairo_test_log_path (const cairo_test_context_t *ctx,
-                    const cairo_path_t *path);
-
 /* Helper functions that take care of finding source images even when
  * building in a non-srcdir manner, (i.e. the tests will be run in a
  * directory that is different from the one where the source image
diff --git a/test/copy-disjoint.c b/test/copy-disjoint.c
new file mode 100644 (file)
index 0000000..1ddfd5a
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+/* The goal is exercise a bug that existed in the xlib backend, where
+ * it assumed the rectangles generated by rectangular tessallator had
+ * any sorting guarantees.
+ */
+
+#define WIDTH 300
+#define HEIGHT 300
+
+static cairo_surface_t *
+create_source (cairo_surface_t *target)
+{
+    cairo_surface_t *surface;
+    cairo_t *cr;
+
+    surface = cairo_surface_create_similar (target,
+                                           CAIRO_CONTENT_COLOR,
+                                           WIDTH, HEIGHT);
+    cr = cairo_create (surface);
+    cairo_surface_destroy (surface);
+
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    surface = cairo_surface_reference (cairo_get_target (cr));
+    cairo_destroy (cr);
+
+    return surface;
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    cairo_surface_t *white;
+    int x;
+
+    /* black background */
+    cairo_set_source_rgb (cr, 0, 0, 0);
+    cairo_paint (cr);
+
+    /* white rectangles */
+    white = create_source (cairo_get_target (cr));
+    cairo_set_source_surface (cr, white, 0, 0);
+    cairo_surface_destroy (white);
+
+    /* blit a set of rectangles that the rectangular tessellator
+     * will not emit sorted. */
+    for (x = 0; x < WIDTH - 10; x += 15)
+       cairo_rectangle (cr, x, x, 10, HEIGHT - 2*x);
+    cairo_fill (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (copy_disjoint,
+           "Tests copying unsorted rectangles.",
+           "fill", /* keywords */
+           NULL, /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw)
index 0e53687..f4269ee 100644 (file)
@@ -37,7 +37,7 @@ static const double frac_offset[] = { 0, 2, 4, 6 };
  * This corresponds to the non-inverted part only if
  * the dash pattern has odd length, so the expected result
  * is the same for every int_offset if the pattern has
- * even lenght, and inverted each time (or shifted by half
+ * even length, and inverted each time (or shifted by half
  * period, which is the same) if the pattern has odd length. */
 static const double int_offset[] = { -2, -1, 0, 1, 2 };
 
diff --git a/test/degenerate-solid-dash.c b/test/degenerate-solid-dash.c
new file mode 100644 (file)
index 0000000..293a808
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright Â© 2012 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    const double dashes_1[] = { 10, 0 };
+    const double dashes_2[] = { 10, 0, 10, 10};
+    const double dashes_3[] = { 10, 0, 10, 0};
+
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+    cairo_set_source_rgb (cr, 0, 0, 0);
+
+    cairo_set_line_width (cr, 6);
+
+    cairo_set_dash (cr, NULL, 0, 0);
+    cairo_rectangle (cr, 10, 10, 30, 30);
+    cairo_stroke (cr);
+
+    cairo_translate (cr, 50, 0);
+    cairo_set_dash (cr, dashes_1, 2, 0);
+    cairo_rectangle (cr, 10, 10, 30, 30);
+    cairo_stroke (cr);
+
+    cairo_translate (cr, 0, 50);
+    cairo_set_dash (cr, dashes_2, 4, 0);
+    cairo_rectangle (cr, 10, 10, 30, 30);
+    cairo_stroke (cr);
+
+    cairo_translate (cr, -50, 0);
+    cairo_set_dash (cr, dashes_3, 4, 0);
+    cairo_rectangle (cr, 10, 10, 30, 30);
+    cairo_stroke (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (degenerate_solid_dash,
+           "Exercises degenerate dash ellison",
+           "stroke, dash", /* keywords */
+           NULL, /* requirements */
+           100, 100,
+           NULL, draw)
index 5447a56..bf83e31 100644 (file)
@@ -32,6 +32,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <cairo.h>
+#include <cairo-pdf.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -270,6 +271,23 @@ generate_reference (double ppi_x, double ppi_y, const char *filename)
     cr = cairo_create (surface);
     cairo_surface_destroy (surface);
 
+    /* As we wish to mimic a PDF surface, copy across the default font options
+     * from the PDF backend.
+     */
+    {
+       cairo_surface_t *pdf;
+       cairo_font_options_t *options;
+
+       options = cairo_font_options_create ();
+
+       pdf = cairo_pdf_surface_create ("tmp.pdf", 1, 1);
+       cairo_surface_get_font_options (pdf, options);
+       cairo_surface_destroy (pdf);
+
+       cairo_set_font_options (cr, options);
+       cairo_font_options_destroy (options);
+    }
+
 #if SET_TOLERANCE
     cairo_set_tolerance (cr, 3.0);
 #endif
@@ -351,7 +369,7 @@ preamble (cairo_test_context_t *ctx)
 #if GENERATE_REFERENCE
     for (n = 0; n < num_ppi; n++) {
        char *ref_name;
-       xasprintf (&ref_name, "fallback-resolution.ppi%gx%g.ref.png",
+       xasprintf (&ref_name, "reference/fallback-resolution.ppi%gx%g.ref.png",
                   ppi[n].x, ppi[n].y);
        generate_reference (ppi[n].x, ppi[n].y, ref_name);
        free (ref_name);
@@ -382,7 +400,6 @@ preamble (cairo_test_context_t *ctx)
                                            SIZE, SIZE,
                                            SIZE, SIZE,
                                            CAIRO_BOILERPLATE_MODE_TEST,
-                                           0,
                                            &closure);
 
        if (surface == NULL) {
@@ -417,7 +434,6 @@ preamble (cairo_test_context_t *ctx)
                                                SIZE + 25, SIZE + 25,
                                                SIZE + 25, SIZE + 25,
                                                CAIRO_BOILERPLATE_MODE_TEST,
-                                               0,
                                                &closure);
            if (surface == NULL || cairo_surface_status (surface)) {
                cairo_test_log (ctx, "Failed to generate surface: %s.%s\n",
diff --git a/test/fallback.c b/test/fallback.c
new file mode 100644 (file)
index 0000000..a3cfc40
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright Â© 2012 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+
+#define SIZE 40
+#define WIDTH (7*SIZE)
+#define HEIGHT (5*SIZE)
+
+#define FALLBACK_RES_X 300
+#define FALLBACK_RES_Y 150
+
+static void
+rectangles (cairo_t *cr)
+{
+    cairo_save (cr);
+
+    cairo_rotate (cr, M_PI/8);
+    cairo_translate (cr, 2*SIZE, SIZE/16);
+    cairo_scale (cr, 1.5, 1.5);
+
+    cairo_rectangle (cr, 0, 0, SIZE, SIZE);
+    cairo_set_source_rgba (cr, 1, 0, 0, 0.5);
+    cairo_fill (cr);
+
+    /* Select an operator not supported by PDF/PS/SVG to trigger fallback */
+    cairo_set_operator (cr, CAIRO_OPERATOR_SATURATE);
+
+    cairo_rectangle (cr, SIZE/2, SIZE/2, SIZE, SIZE);
+    cairo_set_source_rgba (cr, 0, 1, 0, 0.5);
+    cairo_fill (cr);
+
+    cairo_restore (cr);
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    cairo_surface_set_fallback_resolution (cairo_get_target (cr), FALLBACK_RES_X, FALLBACK_RES_Y);
+
+    rectangles (cr);
+    cairo_translate (cr, 3*SIZE, 0);
+    cairo_push_group (cr);
+    rectangles (cr);
+    cairo_pop_group_to_source (cr);
+    cairo_paint (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (fallback,
+           "Check that fallback images are correct when fallback resolution is not 72ppi",
+           "fallback", /* keywords */
+           NULL, /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw)
diff --git a/test/fill-disjoint.c b/test/fill-disjoint.c
new file mode 100644 (file)
index 0000000..ea2c14f
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+/* The goal is exercise a bug that existed in the xlib backend, where
+ * it assumed the rectangles generated by rectangular tessallator had
+ * any sorting guarantees.
+ */
+
+#define WIDTH 300
+#define HEIGHT 300
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    int x;
+
+    /* black background */
+    cairo_set_source_rgb (cr, 0, 0, 0);
+    cairo_paint (cr);
+
+    /* white rectangles */
+    cairo_set_source_rgb (cr, 1, 1, 1);
+
+    /* fill with a set of rectangles that the rectangular tessellator
+     * will not emit sorted. */
+    for (x = 0; x < WIDTH - 10; x += 15)
+       cairo_rectangle (cr, x, x, 10, HEIGHT - 2*x);
+    cairo_fill (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (fill_disjoint,
+           "Tests filling unsorted rectangles.",
+           "fill", /* keywords */
+           NULL, /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw)
index 8e99eb7..3228d57 100644 (file)
@@ -101,16 +101,6 @@ preamble (cairo_test_context_t *ctx)
        goto CLEANUP_PIXMAP;
     }
 
-    cairo_test_log (ctx, "Testing without the X Render extension.\n");
-
-    cairo_boilerplate_xlib_surface_disable_render (surface);
-
-    format = cairo_xlib_surface_get_xrender_format (surface);
-    if (format != NULL) {
-       cairo_test_log (ctx, "Error: did not receive a NULL format as expected\n");
-       goto CLEANUP_PIXMAP;
-    }
-
     result = CAIRO_TEST_SUCCESS;
 
   CLEANUP_PIXMAP:
index 770b39f..eb4f7c5 100644 (file)
@@ -38,7 +38,7 @@
  *     https://bugs.freedesktop.org/show_bug.cgi?id=6955
  *
  *   We replicate this bug by using the cairo_scaled_font_set_max_glyphs_per_font
- *   function to artifically induce cache pressure. (This function was added
+ *   function to artificially induce cache pressure. (This function was added
  *   for this very purpose.)
  *
  * 2006-06-22  Carl Worth  <cworth@cworth.org>
diff --git a/test/inverted-clip.c b/test/inverted-clip.c
new file mode 100644 (file)
index 0000000..b05dd6b
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+/* An assertion failure found by Rico Tzschichholz */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
+    cairo_set_source_rgb (cr, 0, 1, 0);
+
+    cairo_arc (cr, 50, 50, 40, 0, 2 * M_PI);
+    cairo_clip_preserve (cr);
+
+    cairo_paint (cr);
+
+    cairo_rectangle (cr, 0, 0, 100, 100);
+    cairo_reset_clip (cr);
+    cairo_clip (cr);
+
+    cairo_paint (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (inverted_clip,
+           "Clip + InvertedClip should be opaque",
+           "clip, paint", /* keywords */
+           "target=raster", /* requirements */
+           100, 100,
+           NULL, draw)
index 283e41f..315ebc3 100644 (file)
@@ -72,6 +72,6 @@ CAIRO_TEST (line_width,
 CAIRO_TEST (a1_line_width,
            "Tests cairo_set_line_width",
            "stroke", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* requirements */
            IMAGE_WIDTH, IMAGE_HEIGHT,
            NULL, draw_a1)
index 9ac0272..2e7b703 100644 (file)
@@ -43,13 +43,11 @@ _image_to_glyphs (cairo_surface_t *image,
 {
     int width, height, stride;
     const unsigned char *data;
-    cairo_format_t format;
     int x, y, z, n;
 
     width = cairo_image_surface_get_width (image);
     height = cairo_image_surface_get_height (image);
     stride = cairo_image_surface_get_stride (image);
-    format = cairo_image_surface_get_format (image);
     data = cairo_image_surface_get_data (image);
 
     n = 0;
diff --git a/test/negative-stride-image.c b/test/negative-stride-image.c
new file mode 100644 (file)
index 0000000..a407b8c
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2012 Andrea Canciani
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Andrea Canciani <ranma42@gmail.com>
+ */
+
+#include "cairo-test.h"
+
+static const char *png_filename = "romedalen.png";
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    const cairo_test_context_t *ctx = cairo_test_get_context (cr);
+    cairo_format_t format = CAIRO_FORMAT_ARGB32;
+    cairo_t *cr_inv;
+    cairo_surface_t *png, *inv;
+    uint8_t *data;
+    int stride;
+
+    png = cairo_test_create_surface_from_png (ctx, png_filename);
+
+    stride = cairo_format_stride_for_width (format, width);
+    data = calloc (stride, height);
+    inv = cairo_image_surface_create_for_data (data + stride * (height - 1),
+                                              format, width, height, -stride);
+
+    cr_inv = cairo_create (inv);
+    cairo_set_source_surface (cr_inv, png, 0, 0);
+    cairo_paint (cr_inv);
+    cairo_destroy (cr_inv);
+
+    cairo_set_source_surface (cr, inv, 0, 0);
+    cairo_paint (cr);
+
+    cairo_surface_destroy (png);
+
+    cairo_surface_finish (inv);
+    cairo_surface_destroy (inv);
+
+    free (data);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (negative_stride_image,
+           "Test that images with a negative stride are handled correctly.",
+           "stride, image", /* keywords */
+           NULL, /* requirements */
+           256, 192,
+           NULL, draw)
index 96f91ba..17a38db 100644 (file)
 
 #include "cairo-test.h"
 
-static cairo_test_draw_function_t draw;
-
-static const cairo_test_t test = {
-    "pass-through",
-    "Tests pixel values",
-    16, 256,
-    draw
-};
-
 static cairo_test_status_t
 draw (cairo_t *cr, int width, int height)
 {
@@ -92,8 +83,9 @@ draw (cairo_t *cr, int width, int height)
     return CAIRO_TEST_SUCCESS;
 }
 
-int
-main (void)
-{
-    return cairo_test (&test);
-}
+CAIRO_TEST (pass_through,
+           "tests pixel values",
+           "color", /* keywords */
+           NULL, /* requirements */
+           16, 256,
+           NULL, draw)
diff --git a/test/pdf-isolated-group.c b/test/pdf-isolated-group.c
new file mode 100644 (file)
index 0000000..e74a346
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright Â© 2012 Adrian Johnson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Adrian Johnson <ajohnson@redneon.com>
+ */
+
+#include "cairo-test.h"
+
+#define SIZE 60
+#define WIDTH  SIZE
+#define HEIGHT SIZE
+
+
+/* PDF transparency groups can be isolated or non-isolated. This test
+ * checks that the PDF output is using isolated groups. If the group
+ * is non-isolated the bottom half of the inner rectangle will be
+ * red. Note poppler-cairo currently ignores the isolated flag and
+ * treats the group as isolated.
+ *
+ * Refer to http://www.pdfvt.com/PDFVT_TransparencyGuide.html for an
+ * explanation isolated vs non-isolated.
+ */
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 1, 0.5, 0);
+    cairo_rectangle (cr, 0, SIZE/2, SIZE, SIZE/2);
+    cairo_fill (cr);
+
+    cairo_set_operator (cr, CAIRO_OPERATOR_MULTIPLY);
+
+    cairo_push_group (cr);
+
+    cairo_set_source_rgb (cr, 0.7, 0.7, 0.7);
+    cairo_rectangle (cr, SIZE/4, SIZE/4, SIZE/2, SIZE/2);
+    cairo_fill (cr);
+
+    cairo_pop_group_to_source (cr);
+    cairo_paint (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (pdf_isolated_group,
+           "Check that transparency groups in PDF output are isolated",
+           "group, operator", /* keywords */
+           NULL, /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw)
diff --git a/test/pdiff/.gitignore b/test/pdiff/.gitignore
new file mode 100644 (file)
index 0000000..f44ed65
--- /dev/null
@@ -0,0 +1,3 @@
+TAGS
+tags
+perceptualdiff
index 33802f3..1961463 100644 (file)
@@ -288,7 +288,6 @@ preamble (cairo_test_context_t *ctx)
                                            WIDTH, HEIGHT,
                                            WIDTH, HEIGHT,
                                            CAIRO_BOILERPLATE_MODE_TEST,
-                                           0,
                                            &closure);
 
        if (surface == NULL) {
diff --git a/test/raster-source.c b/test/raster-source.c
new file mode 100644 (file)
index 0000000..5a7646e
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+#include <stdio.h>
+#include <errno.h>
+
+/* Basic test to exercise the new mime-surface callback. */
+
+#define WIDTH 200
+#define HEIGHT 80
+
+/* Lazy way of determining PNG dimensions... */
+static void
+png_dimensions (const char *filename,
+               cairo_content_t *content, int *width, int *height)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_from_png (filename);
+    *content = cairo_surface_get_content (surface);
+    *width = cairo_image_surface_get_width (surface);
+    *height = cairo_image_surface_get_height (surface);
+    cairo_surface_destroy (surface);
+}
+
+static cairo_surface_t *
+png_acquire (cairo_pattern_t *pattern, void *closure,
+            cairo_surface_t *target,
+            const cairo_rectangle_int_t *extents)
+{
+    return cairo_image_surface_create_from_png (closure);
+}
+
+static cairo_surface_t *
+red_acquire (cairo_pattern_t *pattern, void *closure,
+            cairo_surface_t *target,
+            const cairo_rectangle_int_t *extents)
+{
+    cairo_surface_t *image;
+    cairo_t *cr;
+
+    image = cairo_surface_create_similar_image (target,
+                                               CAIRO_FORMAT_RGB24,
+                                               extents->width,
+                                               extents->height);
+    cairo_surface_set_device_offset (image, extents->x, extents->y);
+
+    cr = cairo_create (image);
+    cairo_set_source_rgb (cr, 1, 0, 0);
+    cairo_paint (cr);
+    cairo_destroy (cr);
+
+    return image;
+}
+
+static void
+release (cairo_pattern_t *pattern, void *closure, cairo_surface_t *image)
+{
+    cairo_surface_destroy (image);
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    const char *png_filename = "png.png";
+    cairo_pattern_t *png, *red;
+    cairo_content_t content;
+    int png_width, png_height;
+    int i, j;
+
+    png_dimensions (png_filename, &content, &png_width, &png_height);
+
+    png = cairo_pattern_create_raster_source ((void*)png_filename,
+                                             content, png_width, png_height);
+    cairo_raster_source_pattern_set_acquire (png, png_acquire, release);
+
+    red = cairo_pattern_create_raster_source (NULL,
+                                             CAIRO_CONTENT_COLOR, WIDTH, HEIGHT);
+    cairo_raster_source_pattern_set_acquire (red, red_acquire, release);
+
+    cairo_set_source_rgb (cr, 0, 0, 1);
+    cairo_paint (cr);
+
+    cairo_translate (cr, 0, (HEIGHT-png_height)/2);
+    for (i = 0; i < 4; i++) {
+       for (j = 0; j < 4; j++) {
+           cairo_pattern_t *source;
+           if ((i ^ j) & 1)
+               source = red;
+           else
+               source = png;
+           cairo_set_source (cr, source);
+           cairo_rectangle (cr, i * WIDTH/4, j * png_height/4, WIDTH/4, png_height/4);
+           cairo_fill (cr);
+       }
+    }
+
+    cairo_pattern_destroy (red);
+    cairo_pattern_destroy (png);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (raster_source,
+           "Check that the mime-surface embedding works",
+           "api", /* keywords */
+           NULL, /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw)
index 2f30653..b1baada 100644 (file)
@@ -36,6 +36,8 @@
 #define TT_PAD 5
 #define TT_FONT_SIZE 32.0
 
+#define GENERATE_REF 0
+
 static uint32_t data[16] = {
     0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
     0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
@@ -311,7 +313,7 @@ text_transform (cairo_t *cr)
 
     draw_text_transform (cr);
 
-    cairo_translate (cr, SIZE, SIZE);
+    cairo_translate (cr, TT_SIZE, TT_SIZE);
     cairo_rotate (cr, M_PI);
 
     pattern = cairo_test_create_pattern_from_png (ctx, png_filename);
@@ -356,6 +358,9 @@ record_replay (cairo_t *cr, cairo_t *(*func)(cairo_t *), int width, int height)
     cairo_surface_t *surface;
     int x, y;
 
+#if GENERATE_REF
+    func(cr);
+#else
     surface = record_get (func (record_create (cr)));
 
     cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
@@ -371,6 +376,7 @@ record_replay (cairo_t *cr, cairo_t *(*func)(cairo_t *), int width, int height)
            cairo_reset_clip (cr);
        }
     }
+#endif
 
     return CAIRO_TEST_SUCCESS;
 }
diff --git a/test/record1414x.c b/test/record1414x.c
new file mode 100644 (file)
index 0000000..b8adb86
--- /dev/null
@@ -0,0 +1,498 @@
+/*
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of
+ * Red Hat, Inc. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Red Hat, Inc. makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:
+ *     Carl D. Worth <cworth@cworth.org>
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+#ifndef M_SQRT2
+#define M_SQRT2 1.41421345623730951
+#endif
+
+#define TEXT_SIZE 12
+#define SIZE 60 /* needs to be big to check large area effects (dithering) */
+#define PAD 2
+
+#define TT_SIZE 100
+#define TT_PAD 5
+#define TT_FONT_SIZE 32.0
+
+#define GENERATE_REF 0
+
+static uint32_t data[16] = {
+    0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
+    0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
+
+    0xff00ff00, 0xff00ff00,            0xff0000ff, 0xff0000ff,
+    0xff00ff00, 0xff00ff00,            0xff0000ff, 0xff0000ff
+};
+
+static const char *png_filename = "romedalen.png";
+
+static cairo_t *
+paint (cairo_t *cr)
+{
+    cairo_set_source_rgb (cr, 0, 0, 1);
+    cairo_paint (cr);
+
+    cairo_translate (cr, 2, 2);
+    cairo_scale (cr, 0.5, 0.5);
+
+    cairo_set_source_rgb (cr, 1, 0, 0);
+    cairo_paint (cr);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_solid_clip (cairo_t *cr)
+{
+    cairo_test_paint_checkered (cr);
+
+    cairo_rectangle (cr, 2.5, 2.5, 27, 27);
+    cairo_clip (cr);
+
+    cairo_set_source_rgb (cr, 1., 0.,0.);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_clip (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_rectangle (cr, 10.5, 10.5, 11, 11);
+    cairo_clip (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_clip_mask (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_move_to (cr, 16, 5);
+    cairo_line_to (cr, 5, 16);
+    cairo_line_to (cr, 16, 27);
+    cairo_line_to (cr, 27, 16);
+    cairo_clip (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+select_font_face (cairo_t *cr)
+{
+    /* We draw in the default black, so paint white first. */
+    cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 0, 0, 0); /* black */
+
+    cairo_set_font_size (cr, TEXT_SIZE);
+    cairo_move_to (cr, 0, TEXT_SIZE);
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Serif",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, "i-am-serif");
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, " i-am-sans");
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans Mono",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, " i-am-mono");
+
+    return cr;
+}
+
+static cairo_t *
+fill_alpha (cairo_t *cr)
+{
+    const double alpha = 1./3;
+    int n;
+
+    /* flatten to white */
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    /* square */
+    cairo_rectangle (cr, PAD, PAD, SIZE, SIZE);
+    cairo_set_source_rgba (cr, 1, 0, 0, alpha);
+    cairo_fill (cr);
+
+    /* circle */
+    cairo_translate (cr, SIZE + 2 * PAD, 0);
+    cairo_arc (cr, PAD + SIZE / 2., PAD + SIZE / 2., SIZE / 2., 0, 2 * M_PI);
+    cairo_set_source_rgba (cr, 0, 1, 0, alpha);
+    cairo_fill (cr);
+
+    /* triangle */
+    cairo_translate (cr, 0, SIZE + 2 * PAD);
+    cairo_move_to (cr, PAD + SIZE / 2, PAD);
+    cairo_line_to (cr, PAD + SIZE, PAD + SIZE);
+    cairo_line_to (cr, PAD, PAD + SIZE);
+    cairo_set_source_rgba (cr, 0, 0, 1, alpha);
+    cairo_fill (cr);
+
+    /* star */
+    cairo_translate (cr, -(SIZE + 2 * PAD) + SIZE/2., SIZE/2.);
+    for (n = 0; n < 5; n++) {
+       cairo_line_to (cr,
+                      SIZE/2 * cos (2*n * 2*M_PI / 10),
+                      SIZE/2 * sin (2*n * 2*M_PI / 10));
+
+       cairo_line_to (cr,
+                      SIZE/4 * cos ((2*n+1)*2*M_PI / 10),
+                      SIZE/4 * sin ((2*n+1)*2*M_PI / 10));
+    }
+    cairo_set_source_rgba (cr, 0, 0, 0, alpha);
+    cairo_fill (cr);
+
+    return cr;
+}
+
+static cairo_t *
+self_intersecting (cairo_t *cr)
+{
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    cairo_translate (cr, 1.0, 1.0);
+
+    cairo_set_source_rgb (cr, 1, 0, 0); /* red */
+
+    /* First draw the desired shape with a fill */
+    cairo_rectangle (cr, 0.5, 0.5,  4.0, 4.0);
+    cairo_rectangle (cr, 3.5, 3.5,  4.0, 4.0);
+    cairo_rectangle (cr, 3.5, 1.5, -2.0, 2.0);
+    cairo_rectangle (cr, 6.5, 4.5, -2.0, 2.0);
+
+    cairo_fill (cr);
+
+    /* Then try the same thing with a stroke */
+    cairo_translate (cr, 0, 10);
+    cairo_move_to (cr, 1.0, 1.0);
+    cairo_rel_line_to (cr,  3.0,  0.0);
+    cairo_rel_line_to (cr,  0.0,  6.0);
+    cairo_rel_line_to (cr,  3.0,  0.0);
+    cairo_rel_line_to (cr,  0.0, -3.0);
+    cairo_rel_line_to (cr, -6.0,  0.0);
+    cairo_close_path (cr);
+
+    cairo_set_line_width (cr, 1.0);
+    cairo_stroke (cr);
+
+    return cr;
+}
+
+static void
+draw_text_transform (cairo_t *cr)
+{
+    cairo_matrix_t tm;
+
+    /* skew */
+    cairo_matrix_init (&tm, 1, 0,
+                       -0.25, 1,
+                       0, 0);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE, TT_FONT_SIZE);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, 50, TT_SIZE-TT_PAD);
+    cairo_show_text (cr, "A");
+
+    /* rotate and scale */
+    cairo_matrix_init_rotate (&tm, M_PI / 2);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE, TT_FONT_SIZE * 2.0);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, TT_PAD, TT_PAD + 25);
+    cairo_show_text (cr, "A");
+
+    cairo_matrix_init_rotate (&tm, M_PI / 2);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE * 2.0, TT_FONT_SIZE);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, TT_PAD, TT_PAD + 50);
+    cairo_show_text (cr, "A");
+}
+
+static cairo_t *
+text_transform (cairo_t *cr)
+{
+    const cairo_test_context_t *ctx = cairo_test_get_context (cr);
+    cairo_pattern_t *pattern;
+
+    cairo_set_source_rgb (cr, 1., 1., 1.);
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 0., 0., 0.);
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+
+    draw_text_transform (cr);
+
+    cairo_translate (cr, TT_SIZE, TT_SIZE);
+    cairo_rotate (cr, M_PI);
+
+    pattern = cairo_test_create_pattern_from_png (ctx, png_filename);
+    cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
+    cairo_set_source (cr, pattern);
+    cairo_pattern_destroy (pattern);
+
+    draw_text_transform (cr);
+
+    return cr;
+}
+
+/* And here begins the recording and replaying... */
+
+static cairo_t *
+record_create (cairo_t *target)
+{
+    cairo_surface_t *surface;
+    cairo_t *cr;
+
+    surface = cairo_recording_surface_create (cairo_surface_get_content (cairo_get_target (target)), NULL);
+    cr = cairo_create (surface);
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_surface_t *
+record_get (cairo_t *target)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_surface_reference (cairo_get_target (target));
+    cairo_destroy (target);
+
+    return surface;
+}
+
+static cairo_test_status_t
+record_replay (cairo_t *cr, cairo_t *(*func)(cairo_t *), int width, int height)
+{
+    cairo_surface_t *surface;
+    int x, y;
+
+#if GENERATE_REF
+    cairo_scale (cr, M_SQRT2, M_SQRT2);
+    func (cr);
+#else
+    surface = record_get (func (record_create (cr)));
+
+    cairo_scale (cr, M_SQRT2, M_SQRT2);
+    cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+    cairo_set_source_surface (cr, surface, 0, 0);
+    cairo_surface_destroy (surface);
+    cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_NONE);
+
+    cairo_identity_matrix (cr); /* make sure the clip is pixel-aligned */
+    for (y = 0; y < height; y += 2) {
+       for (x = 0; x < width; x += 2) {
+           cairo_rectangle (cr, x, y, 2, 2);
+           cairo_clip (cr);
+           cairo_paint (cr);
+           cairo_reset_clip (cr);
+       }
+    }
+#endif
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+static cairo_test_status_t
+record_paint (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_solid_clip (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_solid_clip, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_clip (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_clip, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_clip_mask (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_clip_mask, width, height);
+}
+
+static cairo_test_status_t
+record_fill_alpha (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, fill_alpha, width, height);
+}
+
+static cairo_test_status_t
+record_self_intersecting (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, self_intersecting, width, height);
+}
+
+static cairo_test_status_t
+record_select_font_face (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, select_font_face, width, height);
+}
+
+static cairo_test_status_t
+record_text_transform (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, text_transform, width, height);
+}
+
+CAIRO_TEST (record1414x_paint,
+           "Test replayed calls to cairo_paint",
+           "paint,record", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*8, M_SQRT2*8,
+           NULL, record_paint)
+CAIRO_TEST (record1414x_paint_alpha,
+           "Simple test of cairo_paint_with_alpha",
+           "record, paint, alpha", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*32, M_SQRT2*32,
+           NULL, record_paint_alpha)
+CAIRO_TEST (record1414x_paint_alpha_solid_clip,
+           "Simple test of cairo_paint_with_alpha+unaligned clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*32, M_SQRT2*32,
+           NULL, record_paint_alpha_solid_clip)
+CAIRO_TEST (record1414x_paint_alpha_clip,
+           "Simple test of cairo_paint_with_alpha+unaligned clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*32, M_SQRT2*32,
+           NULL, record_paint_alpha_clip)
+CAIRO_TEST (record1414x_paint_alpha_clip_mask,
+           "Simple test of cairo_paint_with_alpha+triangular clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*32, M_SQRT2*32,
+           NULL, record_paint_alpha_clip_mask)
+CAIRO_TEST (record1414x_fill_alpha,
+           "Tests using set_rgba();fill()",
+           "record,fill, alpha", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*(2*SIZE + 4*PAD), M_SQRT2*(2*SIZE + 4*PAD),
+           NULL, record_fill_alpha)
+CAIRO_TEST (record1414x_select_font_face,
+           "Tests using cairo_select_font_face to draw text in different faces",
+           "record, font", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*192, M_SQRT2*(TEXT_SIZE + 4),
+           NULL, record_select_font_face)
+CAIRO_TEST (record1414x_self_intersecting,
+           "Test strokes of self-intersecting paths",
+           "record, stroke, trap", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*10, M_SQRT2*20,
+           NULL, record_self_intersecting)
+CAIRO_TEST (record1414x_text_transform,
+           "Test various applications of the font matrix",
+           "record, text, transform", /* keywords */
+           NULL, /* requirements */
+           M_SQRT2*TT_SIZE, M_SQRT2*TT_SIZE,
+           NULL, record_text_transform)
diff --git a/test/record2x.c b/test/record2x.c
new file mode 100644 (file)
index 0000000..7fe0377
--- /dev/null
@@ -0,0 +1,493 @@
+/*
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of
+ * Red Hat, Inc. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Red Hat, Inc. makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:
+ *     Carl D. Worth <cworth@cworth.org>
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+#define TEXT_SIZE 12
+#define SIZE 60 /* needs to be big to check large area effects (dithering) */
+#define PAD 2
+
+#define TT_SIZE 100
+#define TT_PAD 5
+#define TT_FONT_SIZE 32.0
+
+#define GENERATE_REF 0
+
+static uint32_t data[16] = {
+    0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
+    0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
+
+    0xff00ff00, 0xff00ff00,            0xff0000ff, 0xff0000ff,
+    0xff00ff00, 0xff00ff00,            0xff0000ff, 0xff0000ff
+};
+
+static const char *png_filename = "romedalen.png";
+
+static cairo_t *
+paint (cairo_t *cr)
+{
+    cairo_set_source_rgb (cr, 0, 0, 1);
+    cairo_paint (cr);
+
+    cairo_translate (cr, 2, 2);
+    cairo_scale (cr, 0.5, 0.5);
+
+    cairo_set_source_rgb (cr, 1, 0, 0);
+    cairo_paint (cr);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_solid_clip (cairo_t *cr)
+{
+    cairo_test_paint_checkered (cr);
+
+    cairo_rectangle (cr, 2.5, 2.5, 27, 27);
+    cairo_clip (cr);
+
+    cairo_set_source_rgb (cr, 1., 0.,0.);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_clip (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_rectangle (cr, 10.5, 10.5, 11, 11);
+    cairo_clip (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_clip_mask (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_move_to (cr, 16, 5);
+    cairo_line_to (cr, 5, 16);
+    cairo_line_to (cr, 16, 27);
+    cairo_line_to (cr, 27, 16);
+    cairo_clip (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+select_font_face (cairo_t *cr)
+{
+    /* We draw in the default black, so paint white first. */
+    cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 0, 0, 0); /* black */
+
+    cairo_set_font_size (cr, TEXT_SIZE);
+    cairo_move_to (cr, 0, TEXT_SIZE);
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Serif",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, "i-am-serif");
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, " i-am-sans");
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans Mono",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, " i-am-mono");
+
+    return cr;
+}
+
+static cairo_t *
+fill_alpha (cairo_t *cr)
+{
+    const double alpha = 1./3;
+    int n;
+
+    /* flatten to white */
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    /* square */
+    cairo_rectangle (cr, PAD, PAD, SIZE, SIZE);
+    cairo_set_source_rgba (cr, 1, 0, 0, alpha);
+    cairo_fill (cr);
+
+    /* circle */
+    cairo_translate (cr, SIZE + 2 * PAD, 0);
+    cairo_arc (cr, PAD + SIZE / 2., PAD + SIZE / 2., SIZE / 2., 0, 2 * M_PI);
+    cairo_set_source_rgba (cr, 0, 1, 0, alpha);
+    cairo_fill (cr);
+
+    /* triangle */
+    cairo_translate (cr, 0, SIZE + 2 * PAD);
+    cairo_move_to (cr, PAD + SIZE / 2, PAD);
+    cairo_line_to (cr, PAD + SIZE, PAD + SIZE);
+    cairo_line_to (cr, PAD, PAD + SIZE);
+    cairo_set_source_rgba (cr, 0, 0, 1, alpha);
+    cairo_fill (cr);
+
+    /* star */
+    cairo_translate (cr, -(SIZE + 2 * PAD) + SIZE/2., SIZE/2.);
+    for (n = 0; n < 5; n++) {
+       cairo_line_to (cr,
+                      SIZE/2 * cos (2*n * 2*M_PI / 10),
+                      SIZE/2 * sin (2*n * 2*M_PI / 10));
+
+       cairo_line_to (cr,
+                      SIZE/4 * cos ((2*n+1)*2*M_PI / 10),
+                      SIZE/4 * sin ((2*n+1)*2*M_PI / 10));
+    }
+    cairo_set_source_rgba (cr, 0, 0, 0, alpha);
+    cairo_fill (cr);
+
+    return cr;
+}
+
+static cairo_t *
+self_intersecting (cairo_t *cr)
+{
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    cairo_translate (cr, 1.0, 1.0);
+
+    cairo_set_source_rgb (cr, 1, 0, 0); /* red */
+
+    /* First draw the desired shape with a fill */
+    cairo_rectangle (cr, 0.5, 0.5,  4.0, 4.0);
+    cairo_rectangle (cr, 3.5, 3.5,  4.0, 4.0);
+    cairo_rectangle (cr, 3.5, 1.5, -2.0, 2.0);
+    cairo_rectangle (cr, 6.5, 4.5, -2.0, 2.0);
+
+    cairo_fill (cr);
+
+    /* Then try the same thing with a stroke */
+    cairo_translate (cr, 0, 10);
+    cairo_move_to (cr, 1.0, 1.0);
+    cairo_rel_line_to (cr,  3.0,  0.0);
+    cairo_rel_line_to (cr,  0.0,  6.0);
+    cairo_rel_line_to (cr,  3.0,  0.0);
+    cairo_rel_line_to (cr,  0.0, -3.0);
+    cairo_rel_line_to (cr, -6.0,  0.0);
+    cairo_close_path (cr);
+
+    cairo_set_line_width (cr, 1.0);
+    cairo_stroke (cr);
+
+    return cr;
+}
+
+static void
+draw_text_transform (cairo_t *cr)
+{
+    cairo_matrix_t tm;
+
+    /* skew */
+    cairo_matrix_init (&tm, 1, 0,
+                       -0.25, 1,
+                       0, 0);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE, TT_FONT_SIZE);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, 50, TT_SIZE-TT_PAD);
+    cairo_show_text (cr, "A");
+
+    /* rotate and scale */
+    cairo_matrix_init_rotate (&tm, M_PI / 2);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE, TT_FONT_SIZE * 2.0);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, TT_PAD, TT_PAD + 25);
+    cairo_show_text (cr, "A");
+
+    cairo_matrix_init_rotate (&tm, M_PI / 2);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE * 2.0, TT_FONT_SIZE);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, TT_PAD, TT_PAD + 50);
+    cairo_show_text (cr, "A");
+}
+
+static cairo_t *
+text_transform (cairo_t *cr)
+{
+    const cairo_test_context_t *ctx = cairo_test_get_context (cr);
+    cairo_pattern_t *pattern;
+
+    cairo_set_source_rgb (cr, 1., 1., 1.);
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 0., 0., 0.);
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+
+    draw_text_transform (cr);
+
+    cairo_translate (cr, TT_SIZE, TT_SIZE);
+    cairo_rotate (cr, M_PI);
+
+    pattern = cairo_test_create_pattern_from_png (ctx, png_filename);
+    cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
+    cairo_set_source (cr, pattern);
+    cairo_pattern_destroy (pattern);
+
+    draw_text_transform (cr);
+
+    return cr;
+}
+
+/* And here begins the recording and replaying... */
+
+static cairo_t *
+record_create (cairo_t *target)
+{
+    cairo_surface_t *surface;
+    cairo_t *cr;
+
+    surface = cairo_recording_surface_create (cairo_surface_get_content (cairo_get_target (target)), NULL);
+    cr = cairo_create (surface);
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_surface_t *
+record_get (cairo_t *target)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_surface_reference (cairo_get_target (target));
+    cairo_destroy (target);
+
+    return surface;
+}
+
+static cairo_test_status_t
+record_replay (cairo_t *cr, cairo_t *(*func)(cairo_t *), int width, int height)
+{
+    cairo_surface_t *surface;
+    int x, y;
+
+#if GENERATE_REF
+    cairo_scale (cr, 2, 2);
+    func(cr);
+#else
+    surface = record_get (func (record_create (cr)));
+
+    cairo_scale (cr, 2, 2);
+    cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+    cairo_set_source_surface (cr, surface, 0, 0);
+    cairo_surface_destroy (surface);
+    cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_NONE);
+
+    for (y = 0; y < height; y += 2) {
+       for (x = 0; x < width; x += 2) {
+           cairo_rectangle (cr, x, y, 2, 2);
+           cairo_clip (cr);
+           cairo_paint (cr);
+           cairo_reset_clip (cr);
+       }
+    }
+#endif
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+static cairo_test_status_t
+record_paint (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_solid_clip (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_solid_clip, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_clip (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_clip, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_clip_mask (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_clip_mask, width, height);
+}
+
+static cairo_test_status_t
+record_fill_alpha (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, fill_alpha, width, height);
+}
+
+static cairo_test_status_t
+record_self_intersecting (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, self_intersecting, width, height);
+}
+
+static cairo_test_status_t
+record_select_font_face (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, select_font_face, width, height);
+}
+
+static cairo_test_status_t
+record_text_transform (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, text_transform, width, height);
+}
+
+CAIRO_TEST (record2x_paint,
+           "Test replayed calls to cairo_paint",
+           "paint,record", /* keywords */
+           NULL, /* requirements */
+           2*8, 2*8,
+           NULL, record_paint)
+CAIRO_TEST (record2x_paint_alpha,
+           "Simple test of cairo_paint_with_alpha",
+           "record, paint, alpha", /* keywords */
+           NULL, /* requirements */
+           2*32, 2*32,
+           NULL, record_paint_alpha)
+CAIRO_TEST (record2x_paint_alpha_solid_clip,
+           "Simple test of cairo_paint_with_alpha+unaligned clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           2*32, 2*32,
+           NULL, record_paint_alpha_solid_clip)
+CAIRO_TEST (record2x_paint_alpha_clip,
+           "Simple test of cairo_paint_with_alpha+unaligned clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           2*32, 2*32,
+           NULL, record_paint_alpha_clip)
+CAIRO_TEST (record2x_paint_alpha_clip_mask,
+           "Simple test of cairo_paint_with_alpha+triangular clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           2*32, 2*32,
+           NULL, record_paint_alpha_clip_mask)
+CAIRO_TEST (record2x_fill_alpha,
+           "Tests using set_rgba();fill()",
+           "record,fill, alpha", /* keywords */
+           NULL, /* requirements */
+           2*(2*SIZE + 4*PAD), 2*(2*SIZE + 4*PAD),
+           NULL, record_fill_alpha)
+CAIRO_TEST (record2x_select_font_face,
+           "Tests using cairo_select_font_face to draw text in different faces",
+           "record, font", /* keywords */
+           NULL, /* requirements */
+           2*192, 2*(TEXT_SIZE + 4),
+           NULL, record_select_font_face)
+CAIRO_TEST (record2x_self_intersecting,
+           "Test strokes of self-intersecting paths",
+           "record, stroke, trap", /* keywords */
+           NULL, /* requirements */
+           2*10, 2*20,
+           NULL, record_self_intersecting)
+CAIRO_TEST (record2x_text_transform,
+           "Test various applications of the font matrix",
+           "record, text, transform", /* keywords */
+           NULL, /* requirements */
+           2*TT_SIZE, 2*TT_SIZE,
+           NULL, record_text_transform)
diff --git a/test/record90.c b/test/record90.c
new file mode 100644 (file)
index 0000000..3c28a9a
--- /dev/null
@@ -0,0 +1,495 @@
+/*
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2011 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of
+ * Red Hat, Inc. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Red Hat, Inc. makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:
+ *     Carl D. Worth <cworth@cworth.org>
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+#define TEXT_SIZE 12
+#define SIZE 60 /* needs to be big to check large area effects (dithering) */
+#define PAD 2
+
+#define TT_SIZE 100
+#define TT_PAD 5
+#define TT_FONT_SIZE 32.0
+
+#define GENERATE_REF 0
+
+static uint32_t data[16] = {
+    0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
+    0xffffffff, 0xffffffff,            0xffff0000, 0xffff0000,
+
+    0xff00ff00, 0xff00ff00,            0xff0000ff, 0xff0000ff,
+    0xff00ff00, 0xff00ff00,            0xff0000ff, 0xff0000ff
+};
+
+static const char *png_filename = "romedalen.png";
+
+static cairo_t *
+paint (cairo_t *cr)
+{
+    cairo_set_source_rgb (cr, 0, 0, 1);
+    cairo_paint (cr);
+
+    cairo_translate (cr, 2, 2);
+    cairo_scale (cr, 0.5, 0.5);
+
+    cairo_set_source_rgb (cr, 1, 0, 0);
+    cairo_paint (cr);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_solid_clip (cairo_t *cr)
+{
+    cairo_test_paint_checkered (cr);
+
+    cairo_rectangle (cr, 2.5, 2.5, 27, 27);
+    cairo_clip (cr);
+
+    cairo_set_source_rgb (cr, 1., 0.,0.);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_clip (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_rectangle (cr, 10.5, 10.5, 11, 11);
+    cairo_clip (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+paint_alpha_clip_mask (cairo_t *cr)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_image_surface_create_for_data ((unsigned char *) data,
+                                                  CAIRO_FORMAT_RGB24, 4, 4, 16);
+
+    cairo_test_paint_checkered (cr);
+
+    cairo_move_to (cr, 16, 5);
+    cairo_line_to (cr, 5, 16);
+    cairo_line_to (cr, 16, 27);
+    cairo_line_to (cr, 27, 16);
+    cairo_clip (cr);
+
+    cairo_scale (cr, 4, 4);
+
+    cairo_set_source_surface (cr, surface, 2 , 2);
+    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
+    cairo_paint_with_alpha (cr, 0.5);
+
+    cairo_surface_finish (surface); /* data will go out of scope */
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_t *
+select_font_face (cairo_t *cr)
+{
+    /* We draw in the default black, so paint white first. */
+    cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 0, 0, 0); /* black */
+
+    cairo_set_font_size (cr, TEXT_SIZE);
+    cairo_move_to (cr, 0, TEXT_SIZE);
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Serif",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, "i-am-serif");
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, " i-am-sans");
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans Mono",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_show_text (cr, " i-am-mono");
+
+    return cr;
+}
+
+static cairo_t *
+fill_alpha (cairo_t *cr)
+{
+    const double alpha = 1./3;
+    int n;
+
+    /* flatten to white */
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    /* square */
+    cairo_rectangle (cr, PAD, PAD, SIZE, SIZE);
+    cairo_set_source_rgba (cr, 1, 0, 0, alpha);
+    cairo_fill (cr);
+
+    /* circle */
+    cairo_translate (cr, SIZE + 2 * PAD, 0);
+    cairo_arc (cr, PAD + SIZE / 2., PAD + SIZE / 2., SIZE / 2., 0, 2 * M_PI);
+    cairo_set_source_rgba (cr, 0, 1, 0, alpha);
+    cairo_fill (cr);
+
+    /* triangle */
+    cairo_translate (cr, 0, SIZE + 2 * PAD);
+    cairo_move_to (cr, PAD + SIZE / 2, PAD);
+    cairo_line_to (cr, PAD + SIZE, PAD + SIZE);
+    cairo_line_to (cr, PAD, PAD + SIZE);
+    cairo_set_source_rgba (cr, 0, 0, 1, alpha);
+    cairo_fill (cr);
+
+    /* star */
+    cairo_translate (cr, -(SIZE + 2 * PAD) + SIZE/2., SIZE/2.);
+    for (n = 0; n < 5; n++) {
+       cairo_line_to (cr,
+                      SIZE/2 * cos (2*n * 2*M_PI / 10),
+                      SIZE/2 * sin (2*n * 2*M_PI / 10));
+
+       cairo_line_to (cr,
+                      SIZE/4 * cos ((2*n+1)*2*M_PI / 10),
+                      SIZE/4 * sin ((2*n+1)*2*M_PI / 10));
+    }
+    cairo_set_source_rgba (cr, 0, 0, 0, alpha);
+    cairo_fill (cr);
+
+    return cr;
+}
+
+static cairo_t *
+self_intersecting (cairo_t *cr)
+{
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_paint (cr);
+
+    cairo_translate (cr, 1.0, 1.0);
+
+    cairo_set_source_rgb (cr, 1, 0, 0); /* red */
+
+    /* First draw the desired shape with a fill */
+    cairo_rectangle (cr, 0.5, 0.5,  4.0, 4.0);
+    cairo_rectangle (cr, 3.5, 3.5,  4.0, 4.0);
+    cairo_rectangle (cr, 3.5, 1.5, -2.0, 2.0);
+    cairo_rectangle (cr, 6.5, 4.5, -2.0, 2.0);
+
+    cairo_fill (cr);
+
+    /* Then try the same thing with a stroke */
+    cairo_translate (cr, 0, 10);
+    cairo_move_to (cr, 1.0, 1.0);
+    cairo_rel_line_to (cr,  3.0,  0.0);
+    cairo_rel_line_to (cr,  0.0,  6.0);
+    cairo_rel_line_to (cr,  3.0,  0.0);
+    cairo_rel_line_to (cr,  0.0, -3.0);
+    cairo_rel_line_to (cr, -6.0,  0.0);
+    cairo_close_path (cr);
+
+    cairo_set_line_width (cr, 1.0);
+    cairo_stroke (cr);
+
+    return cr;
+}
+
+static void
+draw_text_transform (cairo_t *cr)
+{
+    cairo_matrix_t tm;
+
+    /* skew */
+    cairo_matrix_init (&tm, 1, 0,
+                       -0.25, 1,
+                       0, 0);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE, TT_FONT_SIZE);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, 50, TT_SIZE-TT_PAD);
+    cairo_show_text (cr, "A");
+
+    /* rotate and scale */
+    cairo_matrix_init_rotate (&tm, M_PI / 2);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE, TT_FONT_SIZE * 2.0);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, TT_PAD, TT_PAD + 25);
+    cairo_show_text (cr, "A");
+
+    cairo_matrix_init_rotate (&tm, M_PI / 2);
+    cairo_matrix_scale (&tm, TT_FONT_SIZE * 2.0, TT_FONT_SIZE);
+    cairo_set_font_matrix (cr, &tm);
+
+    cairo_new_path (cr);
+    cairo_move_to (cr, TT_PAD, TT_PAD + 50);
+    cairo_show_text (cr, "A");
+}
+
+static cairo_t *
+text_transform (cairo_t *cr)
+{
+    const cairo_test_context_t *ctx = cairo_test_get_context (cr);
+    cairo_pattern_t *pattern;
+
+    cairo_set_source_rgb (cr, 1., 1., 1.);
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 0., 0., 0.);
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+
+    draw_text_transform (cr);
+
+    cairo_translate (cr, TT_SIZE, TT_SIZE);
+    cairo_rotate (cr, M_PI);
+
+    pattern = cairo_test_create_pattern_from_png (ctx, png_filename);
+    cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
+    cairo_set_source (cr, pattern);
+    cairo_pattern_destroy (pattern);
+
+    draw_text_transform (cr);
+
+    return cr;
+}
+
+/* And here begins the recording and replaying... */
+
+static cairo_t *
+record_create (cairo_t *target)
+{
+    cairo_surface_t *surface;
+    cairo_t *cr;
+
+    surface = cairo_recording_surface_create (cairo_surface_get_content (cairo_get_target (target)), NULL);
+    cr = cairo_create (surface);
+    cairo_surface_destroy (surface);
+
+    return cr;
+}
+
+static cairo_surface_t *
+record_get (cairo_t *target)
+{
+    cairo_surface_t *surface;
+
+    surface = cairo_surface_reference (cairo_get_target (target));
+    cairo_destroy (target);
+
+    return surface;
+}
+
+static cairo_test_status_t
+record_replay (cairo_t *cr, cairo_t *(*func)(cairo_t *), int width, int height)
+{
+    cairo_surface_t *surface;
+    int x, y;
+
+#if GENERATE_REF
+    cairo_translate(cr, width, 0);
+    cairo_rotate (cr, M_PI/2);
+    func(cr);
+#else
+    surface = record_get (func (record_create (cr)));
+
+    cairo_translate(cr, width, 0);
+    cairo_rotate (cr, M_PI/2);
+    cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+    cairo_set_source_surface (cr, surface, 0, 0);
+    cairo_surface_destroy (surface);
+    cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_NONE);
+
+    for (y = 0; y < width; y += 2) {
+       for (x = 0; x < height; x += 2) {
+           cairo_rectangle (cr, x, y, 2, 2);
+           cairo_clip (cr);
+           cairo_paint (cr);
+           cairo_reset_clip (cr);
+       }
+    }
+#endif
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+static cairo_test_status_t
+record_paint (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_solid_clip (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_solid_clip, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_clip (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_clip, width, height);
+}
+
+static cairo_test_status_t
+record_paint_alpha_clip_mask (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, paint_alpha_clip_mask, width, height);
+}
+
+static cairo_test_status_t
+record_fill_alpha (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, fill_alpha, width, height);
+}
+
+static cairo_test_status_t
+record_self_intersecting (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, self_intersecting, width, height);
+}
+
+static cairo_test_status_t
+record_select_font_face (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, select_font_face, width, height);
+}
+
+static cairo_test_status_t
+record_text_transform (cairo_t *cr, int width, int height)
+{
+    return record_replay (cr, text_transform, width, height);
+}
+
+CAIRO_TEST (record90_paint,
+           "Test replayed calls to cairo_paint",
+           "paint,record", /* keywords */
+           NULL, /* requirements */
+           8, 8,
+           NULL, record_paint)
+CAIRO_TEST (record90_paint_alpha,
+           "Simple test of cairo_paint_with_alpha",
+           "record, paint, alpha", /* keywords */
+           NULL, /* requirements */
+           2, 32,
+           NULL, record_paint_alpha)
+CAIRO_TEST (record90_paint_alpha_solid_clip,
+           "Simple test of cairo_paint_with_alpha+unaligned clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           32, 32,
+           NULL, record_paint_alpha_solid_clip)
+CAIRO_TEST (record90_paint_alpha_clip,
+           "Simple test of cairo_paint_with_alpha+unaligned clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           32, 32,
+           NULL, record_paint_alpha_clip)
+CAIRO_TEST (record90_paint_alpha_clip_mask,
+           "Simple test of cairo_paint_with_alpha+triangular clip",
+           "record, paint, alpha, clip", /* keywords */
+           NULL, /* requirements */
+           32, 32,
+           NULL, record_paint_alpha_clip_mask)
+CAIRO_TEST (record90_fill_alpha,
+           "Tests using set_rgba();fill()",
+           "record,fill, alpha", /* keywords */
+           NULL, /* requirements */
+           2*SIZE + 4*PAD, 2*SIZE + 4*PAD,
+           NULL, record_fill_alpha)
+CAIRO_TEST (record90_select_font_face,
+           "Tests using cairo_select_font_face to draw text in different faces",
+           "record, font", /* keywords */
+           NULL, /* requirements */
+           TEXT_SIZE + 4, 192,
+           NULL, record_select_font_face)
+CAIRO_TEST (record90_self_intersecting,
+           "Test strokes of self-intersecting paths",
+           "record, stroke, trap", /* keywords */
+           NULL, /* requirements */
+           10, 20,
+           NULL, record_self_intersecting)
+CAIRO_TEST (record90_text_transform,
+           "Test various applications of the font matrix",
+           "record, text, transform", /* keywords */
+           NULL, /* requirements */
+           TT_SIZE, TT_SIZE,
+           NULL, record_text_transform)
diff --git a/test/rectilinear-dash-scale.c b/test/rectilinear-dash-scale.c
new file mode 100644 (file)
index 0000000..1b69516
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+ * Copyright Â© 2006 Red Hat, Inc.
+ * Copyright Â© 2008 Chris Wilson
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Carl D. Worth <cworth@cworth.org>
+ *         Chris Wilson <chris@chris-wilson.co.uk>
+ *
+ * Based on the original test/rectilinear-stroke.c by Carl D. Worth.
+ */
+
+#include "cairo-test.h"
+
+#define SIZE 50
+
+static void
+draw_dashes (cairo_t *cr)
+{
+    const double dash_square[4] = {4, 2, 2, 2};
+    const double dash_butt[4] = {5, 1, 3, 1};
+
+    cairo_save (cr);
+
+    cairo_set_dash (cr, dash_square, 4, 0);
+
+    cairo_set_line_width (cr, 1.0);
+    cairo_translate (cr, 1, 1);
+
+    /* Draw everything first with square caps. */
+    cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+
+    /* Draw horizontal and vertical segments, each in both
+     * directions. */
+    cairo_move_to     (cr,  4.5,  0.5);
+    cairo_rel_line_to (cr,  2.0,  0.0);
+
+    cairo_move_to     (cr, 10.5,  4.5);
+    cairo_rel_line_to (cr,  0.0,  2.0);
+
+    cairo_move_to     (cr,  6.5, 10.5);
+    cairo_rel_line_to (cr, -2.0,  0.0);
+
+    cairo_move_to     (cr,  0.5,  6.5);
+    cairo_rel_line_to (cr,  0.0, -2.0);
+
+    /* Draw right angle turns in four directions. */
+    cairo_move_to     (cr,  0.5,  2.5);
+    cairo_rel_line_to (cr,  0.0, -2.0);
+    cairo_rel_line_to (cr,  2.0,  0.0);
+
+    cairo_move_to     (cr,  8.5,  0.5);
+    cairo_rel_line_to (cr,  2.0,  0.0);
+    cairo_rel_line_to (cr,  0.0,  2.0);
+
+    cairo_move_to     (cr, 10.5,  8.5);
+    cairo_rel_line_to (cr,  0.0,  2.0);
+    cairo_rel_line_to (cr, -2.0,  0.0);
+
+    cairo_move_to     (cr,  2.5, 10.5);
+    cairo_rel_line_to (cr, -2.0,  0.0);
+    cairo_rel_line_to (cr,  0.0, -2.0);
+
+    cairo_stroke (cr);
+
+    /* Draw a closed-path rectangle */
+    cairo_rectangle (cr, 0.5, 12.5, 10.0, 10.0);
+    cairo_set_dash (cr, dash_square, 4, 2);
+    cairo_stroke (cr);
+
+    cairo_translate (cr, 12, 0);
+
+    /* Now draw the same results, but with butt caps. */
+    cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+    cairo_set_dash (cr, dash_butt, 4, 0.0);
+
+    /* Draw horizontal and vertical segments, each in both
+     * directions. */
+    cairo_move_to     (cr,  4.0,  0.5);
+    cairo_rel_line_to (cr,  3.0,  0.0);
+
+    cairo_move_to     (cr, 10.5,  4.0);
+    cairo_rel_line_to (cr,  0.0,  3.0);
+
+    cairo_move_to     (cr,  7.0, 10.5);
+    cairo_rel_line_to (cr, -3.0,  0.0);
+
+    cairo_move_to     (cr,  0.5,  7.0);
+    cairo_rel_line_to (cr,  0.0, -3.0);
+
+    /* Draw right angle turns in four directions. */
+    cairo_move_to     (cr,  0.5,  3.0);
+    cairo_rel_line_to (cr,  0.0, -2.5);
+    cairo_rel_line_to (cr,  2.5,  0.0);
+
+    cairo_move_to     (cr,  8.0,  0.5);
+    cairo_rel_line_to (cr,  2.5,  0.0);
+    cairo_rel_line_to (cr,  0.0,  2.5);
+
+    cairo_move_to     (cr, 10.5,  8.0);
+    cairo_rel_line_to (cr,  0.0,  2.5);
+    cairo_rel_line_to (cr, -2.5,  0.0);
+
+    cairo_move_to     (cr,  3.0, 10.5);
+    cairo_rel_line_to (cr, -2.5,  0.0);
+    cairo_rel_line_to (cr,  0.0, -2.5);
+
+    cairo_stroke (cr);
+
+    /* Draw a closed-path rectangle */
+    cairo_set_dash (cr, dash_butt, 4, 2.5);
+    cairo_rectangle (cr, 0.5, 12.5, 10.0, 10.0);
+    cairo_stroke (cr);
+
+    cairo_restore (cr);
+}
+
+static cairo_test_status_t
+dashes (cairo_t *cr)
+{
+    /* Paint background white, then draw in black. */
+    cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
+    draw_dashes (cr);
+
+    cairo_save (cr);
+    cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);
+    cairo_translate (cr, 0, SIZE);
+    cairo_scale (cr, 1, -1);
+    draw_dashes (cr);
+    cairo_restore (cr);
+
+    cairo_save (cr);
+    cairo_set_source_rgb (cr, 0.0, 1.0, 0.0);
+    cairo_translate (cr, SIZE, 0);
+    cairo_scale (cr, -1, 1);
+    draw_dashes (cr);
+    cairo_restore (cr);
+
+    cairo_save (cr);
+    cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
+    cairo_translate (cr, SIZE, SIZE);
+    cairo_scale (cr, -1, -1);
+    draw_dashes (cr);
+    cairo_restore (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+static cairo_test_status_t
+aligned (cairo_t *cr, int width, int height)
+{
+    cairo_scale (cr, 4, 2);
+    return dashes(cr);
+}
+
+static cairo_test_status_t
+unaligned (cairo_t *cr, int width, int height)
+{
+    cairo_scale (cr, 3.9, 1.9);
+    return dashes(cr);
+}
+
+CAIRO_TEST (rectilinear_dash_scale,
+           "Test dashed rectilinear stroke operations (covering only whole pixels) after scaling",
+           "stroke dash", /* keywords */
+           NULL, /* requirements */
+           4*SIZE, 2*SIZE,
+           NULL, aligned)
+
+CAIRO_TEST (rectilinear_dash_scale_unaligned,
+           "Test dashed rectilinear stroke operations (covering partial pixels) after scaling",
+           "stroke dash", /* keywords */
+           NULL, /* requirements */
+           4*SIZE, 2*SIZE,
+           NULL, unaligned)
diff --git a/test/reference/a1-bug.egl.argb32.ref.png b/test/reference/a1-bug.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..dc6ff93
Binary files /dev/null and b/test/reference/a1-bug.egl.argb32.ref.png differ
diff --git a/test/reference/a1-bug.mask.argb32.ref.png b/test/reference/a1-bug.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f9ae8a8
Binary files /dev/null and b/test/reference/a1-bug.mask.argb32.ref.png differ
diff --git a/test/reference/a1-bug.mask.rgb24.ref.png b/test/reference/a1-bug.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f9ae8a8
Binary files /dev/null and b/test/reference/a1-bug.mask.rgb24.ref.png differ
index 9c6a36e..dc6ff93 100644 (file)
Binary files a/test/reference/a1-bug.ref.png and b/test/reference/a1-bug.ref.png differ
diff --git a/test/reference/a1-clip-fill-equal.argb32.ref.png b/test/reference/a1-clip-fill-equal.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill-equal.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill-equal.egl.argb32.ref.png b/test/reference/a1-clip-fill-equal.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill-equal.egl.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill-equal.mask.argb32.ref.png b/test/reference/a1-clip-fill-equal.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill-equal.mask.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill-equal.mask.rgb24.ref.png b/test/reference/a1-clip-fill-equal.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill-equal.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-fill-equal.rgb24.ref.png b/test/reference/a1-clip-fill-equal.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill-equal.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-fill-rule.egl.argb32.ref.png b/test/reference/a1-clip-fill-rule.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c3ba9dd
Binary files /dev/null and b/test/reference/a1-clip-fill-rule.egl.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill-rule.mask.argb32.ref.png b/test/reference/a1-clip-fill-rule.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c3ba9dd
Binary files /dev/null and b/test/reference/a1-clip-fill-rule.mask.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill-rule.mask.rgb24.ref.png b/test/reference/a1-clip-fill-rule.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6fe9346
Binary files /dev/null and b/test/reference/a1-clip-fill-rule.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-fill.argb32.ref.png b/test/reference/a1-clip-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill.egl.argb32.ref.png b/test/reference/a1-clip-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill.egl.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill.mask.argb32.ref.png b/test/reference/a1-clip-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill.mask.argb32.ref.png differ
diff --git a/test/reference/a1-clip-fill.mask.rgb24.ref.png b/test/reference/a1-clip-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-fill.rgb24.ref.png b/test/reference/a1-clip-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-fill.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-paint.argb32.ref.png b/test/reference/a1-clip-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-paint.argb32.ref.png differ
diff --git a/test/reference/a1-clip-paint.egl.argb32.ref.png b/test/reference/a1-clip-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-paint.egl.argb32.ref.png differ
diff --git a/test/reference/a1-clip-paint.mask.argb32.ref.png b/test/reference/a1-clip-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-paint.mask.argb32.ref.png differ
diff --git a/test/reference/a1-clip-paint.mask.rgb24.ref.png b/test/reference/a1-clip-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-paint.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-paint.rgb24.ref.png b/test/reference/a1-clip-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-paint.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-stroke.argb32.ref.png b/test/reference/a1-clip-stroke.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-stroke.argb32.ref.png differ
diff --git a/test/reference/a1-clip-stroke.egl.argb32.ref.png b/test/reference/a1-clip-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/a1-clip-stroke.mask.argb32.ref.png b/test/reference/a1-clip-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/a1-clip-stroke.mask.rgb24.ref.png b/test/reference/a1-clip-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-stroke.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-clip-stroke.rgb24.ref.png b/test/reference/a1-clip-stroke.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-clip-stroke.rgb24.ref.png differ
diff --git a/test/reference/a1-fill.argb32.ref.png b/test/reference/a1-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.argb32.ref.png differ
diff --git a/test/reference/a1-fill.base.argb32.ref.png b/test/reference/a1-fill.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.base.argb32.ref.png differ
diff --git a/test/reference/a1-fill.base.rgb24.ref.png b/test/reference/a1-fill.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.base.rgb24.ref.png differ
diff --git a/test/reference/a1-fill.egl.argb32.ref.png b/test/reference/a1-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.egl.argb32.ref.png differ
diff --git a/test/reference/a1-fill.mask.argb32.ref.png b/test/reference/a1-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.mask.argb32.ref.png differ
diff --git a/test/reference/a1-fill.mask.rgb24.ref.png b/test/reference/a1-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-fill.rgb24.ref.png b/test/reference/a1-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.rgb24.ref.png differ
diff --git a/test/reference/a1-fill.traps.argb32.ref.png b/test/reference/a1-fill.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.traps.argb32.ref.png differ
diff --git a/test/reference/a1-fill.traps.rgb24.ref.png b/test/reference/a1-fill.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e40202b
Binary files /dev/null and b/test/reference/a1-fill.traps.rgb24.ref.png differ
diff --git a/test/reference/a1-image-sample.argb32.ref.png b/test/reference/a1-image-sample.argb32.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-image-sample.argb32.ref.png differ
diff --git a/test/reference/a1-image-sample.egl.argb32.ref.png b/test/reference/a1-image-sample.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-image-sample.egl.argb32.ref.png differ
diff --git a/test/reference/a1-image-sample.mask.argb32.ref.png b/test/reference/a1-image-sample.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-image-sample.mask.argb32.ref.png differ
diff --git a/test/reference/a1-image-sample.mask.rgb24.ref.png b/test/reference/a1-image-sample.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-image-sample.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-image-sample.rgb24.ref.png b/test/reference/a1-image-sample.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-image-sample.rgb24.ref.png differ
diff --git a/test/reference/a1-image-sample.xlib-fallback.rgb24.ref.png b/test/reference/a1-image-sample.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-image-sample.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/a1-image-sample.xlib-window.rgb24.ref.png b/test/reference/a1-image-sample.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-image-sample.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/a1-line-width.argb32.ref.png b/test/reference/a1-line-width.argb32.ref.png
new file mode 100644 (file)
index 0000000..35d9cad
Binary files /dev/null and b/test/reference/a1-line-width.argb32.ref.png differ
diff --git a/test/reference/a1-line-width.egl.argb32.ref.png b/test/reference/a1-line-width.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..35d9cad
Binary files /dev/null and b/test/reference/a1-line-width.egl.argb32.ref.png differ
diff --git a/test/reference/a1-line-width.mask.argb32.ref.png b/test/reference/a1-line-width.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..35d9cad
Binary files /dev/null and b/test/reference/a1-line-width.mask.argb32.ref.png differ
diff --git a/test/reference/a1-line-width.mask.rgb24.ref.png b/test/reference/a1-line-width.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..35d9cad
Binary files /dev/null and b/test/reference/a1-line-width.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-line-width.rgb24.ref.png b/test/reference/a1-line-width.rgb24.ref.png
new file mode 100644 (file)
index 0000000..35d9cad
Binary files /dev/null and b/test/reference/a1-line-width.rgb24.ref.png differ
diff --git a/test/reference/a1-mask-sample.argb32.ref.png b/test/reference/a1-mask-sample.argb32.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-mask-sample.argb32.ref.png differ
diff --git a/test/reference/a1-mask-sample.egl.argb32.ref.png b/test/reference/a1-mask-sample.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-mask-sample.egl.argb32.ref.png differ
diff --git a/test/reference/a1-mask-sample.mask.argb32.ref.png b/test/reference/a1-mask-sample.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-mask-sample.mask.argb32.ref.png differ
diff --git a/test/reference/a1-mask-sample.mask.rgb24.ref.png b/test/reference/a1-mask-sample.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-mask-sample.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-mask-sample.rgb24.ref.png b/test/reference/a1-mask-sample.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b8fd457
Binary files /dev/null and b/test/reference/a1-mask-sample.rgb24.ref.png differ
diff --git a/test/reference/a1-mask.argb32.ref.png b/test/reference/a1-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..864fc10
Binary files /dev/null and b/test/reference/a1-mask.argb32.ref.png differ
diff --git a/test/reference/a1-mask.egl.argb32.ref.png b/test/reference/a1-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..864fc10
Binary files /dev/null and b/test/reference/a1-mask.egl.argb32.ref.png differ
diff --git a/test/reference/a1-mask.mask.argb32.ref.png b/test/reference/a1-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..864fc10
Binary files /dev/null and b/test/reference/a1-mask.mask.argb32.ref.png differ
diff --git a/test/reference/a1-mask.mask.rgb24.ref.png b/test/reference/a1-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..864fc10
Binary files /dev/null and b/test/reference/a1-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-mask.rgb24.ref.png b/test/reference/a1-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..864fc10
Binary files /dev/null and b/test/reference/a1-mask.rgb24.ref.png differ
diff --git a/test/reference/a1-rasterisation-rectangles.argb32.ref.png b/test/reference/a1-rasterisation-rectangles.argb32.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-rectangles.argb32.ref.png differ
diff --git a/test/reference/a1-rasterisation-rectangles.egl.argb32.ref.png b/test/reference/a1-rasterisation-rectangles.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-rectangles.egl.argb32.ref.png differ
diff --git a/test/reference/a1-rasterisation-rectangles.mask.argb32.ref.png b/test/reference/a1-rasterisation-rectangles.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-rectangles.mask.argb32.ref.png differ
diff --git a/test/reference/a1-rasterisation-rectangles.mask.rgb24.ref.png b/test/reference/a1-rasterisation-rectangles.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-rectangles.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-rasterisation-rectangles.rgb24.ref.png b/test/reference/a1-rasterisation-rectangles.rgb24.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-rectangles.rgb24.ref.png differ
diff --git a/test/reference/a1-rasterisation-triangles.argb32.ref.png b/test/reference/a1-rasterisation-triangles.argb32.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-triangles.argb32.ref.png differ
diff --git a/test/reference/a1-rasterisation-triangles.egl.argb32.ref.png b/test/reference/a1-rasterisation-triangles.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-triangles.egl.argb32.ref.png differ
diff --git a/test/reference/a1-rasterisation-triangles.mask.argb32.ref.png b/test/reference/a1-rasterisation-triangles.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-triangles.mask.argb32.ref.png differ
diff --git a/test/reference/a1-rasterisation-triangles.mask.rgb24.ref.png b/test/reference/a1-rasterisation-triangles.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-triangles.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-rasterisation-triangles.rgb24.ref.png b/test/reference/a1-rasterisation-triangles.rgb24.ref.png
new file mode 100644 (file)
index 0000000..784cf87
Binary files /dev/null and b/test/reference/a1-rasterisation-triangles.rgb24.ref.png differ
diff --git a/test/reference/a1-rectilinear-grid.argb32.ref.png b/test/reference/a1-rectilinear-grid.argb32.ref.png
new file mode 100644 (file)
index 0000000..2dfb85e
Binary files /dev/null and b/test/reference/a1-rectilinear-grid.argb32.ref.png differ
diff --git a/test/reference/a1-rectilinear-grid.egl.argb32.ref.png b/test/reference/a1-rectilinear-grid.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2dfb85e
Binary files /dev/null and b/test/reference/a1-rectilinear-grid.egl.argb32.ref.png differ
diff --git a/test/reference/a1-rectilinear-grid.mask.argb32.ref.png b/test/reference/a1-rectilinear-grid.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2dfb85e
Binary files /dev/null and b/test/reference/a1-rectilinear-grid.mask.argb32.ref.png differ
diff --git a/test/reference/a1-rectilinear-grid.mask.rgb24.ref.png b/test/reference/a1-rectilinear-grid.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2dfb85e
Binary files /dev/null and b/test/reference/a1-rectilinear-grid.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-rectilinear-grid.rgb24.ref.png b/test/reference/a1-rectilinear-grid.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2dfb85e
Binary files /dev/null and b/test/reference/a1-rectilinear-grid.rgb24.ref.png differ
diff --git a/test/reference/a1-sample.argb32.ref.png b/test/reference/a1-sample.argb32.ref.png
new file mode 100644 (file)
index 0000000..4c6131c
Binary files /dev/null and b/test/reference/a1-sample.argb32.ref.png differ
diff --git a/test/reference/a1-sample.egl.argb32.ref.png b/test/reference/a1-sample.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4c6131c
Binary files /dev/null and b/test/reference/a1-sample.egl.argb32.ref.png differ
diff --git a/test/reference/a1-sample.mask.argb32.ref.png b/test/reference/a1-sample.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4c6131c
Binary files /dev/null and b/test/reference/a1-sample.mask.argb32.ref.png differ
diff --git a/test/reference/a1-sample.mask.rgb24.ref.png b/test/reference/a1-sample.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4c6131c
Binary files /dev/null and b/test/reference/a1-sample.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-sample.rgb24.ref.png b/test/reference/a1-sample.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4c6131c
Binary files /dev/null and b/test/reference/a1-sample.rgb24.ref.png differ
diff --git a/test/reference/a1-tiger.egl.argb32.ref.png b/test/reference/a1-tiger.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..42772bf
Binary files /dev/null and b/test/reference/a1-tiger.egl.argb32.ref.png differ
diff --git a/test/reference/a1-tiger.mask.argb32.ref.png b/test/reference/a1-tiger.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a62af7
Binary files /dev/null and b/test/reference/a1-tiger.mask.argb32.ref.png differ
diff --git a/test/reference/a1-tiger.mask.rgb24.ref.png b/test/reference/a1-tiger.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9a62af7
Binary files /dev/null and b/test/reference/a1-tiger.mask.rgb24.ref.png differ
index e207d7d..cc641e2 100644 (file)
Binary files a/test/reference/a1-tiger.ref.png and b/test/reference/a1-tiger.ref.png differ
diff --git a/test/reference/a1-traps-sample.argb32.ref.png b/test/reference/a1-traps-sample.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-traps-sample.argb32.ref.png differ
diff --git a/test/reference/a1-traps-sample.egl.argb32.ref.png b/test/reference/a1-traps-sample.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-traps-sample.egl.argb32.ref.png differ
diff --git a/test/reference/a1-traps-sample.mask.argb32.ref.png b/test/reference/a1-traps-sample.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-traps-sample.mask.argb32.ref.png differ
diff --git a/test/reference/a1-traps-sample.mask.rgb24.ref.png b/test/reference/a1-traps-sample.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-traps-sample.mask.rgb24.ref.png differ
diff --git a/test/reference/a1-traps-sample.rgb24.ref.png b/test/reference/a1-traps-sample.rgb24.ref.png
new file mode 100644 (file)
index 0000000..384ba4a
Binary files /dev/null and b/test/reference/a1-traps-sample.rgb24.ref.png differ
diff --git a/test/reference/a8-clear.argb32.ref.png b/test/reference/a8-clear.argb32.ref.png
new file mode 100644 (file)
index 0000000..98a624e
Binary files /dev/null and b/test/reference/a8-clear.argb32.ref.png differ
diff --git a/test/reference/a8-clear.egl.argb32.ref.png b/test/reference/a8-clear.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..98a624e
Binary files /dev/null and b/test/reference/a8-clear.egl.argb32.ref.png differ
diff --git a/test/reference/a8-clear.mask.argb32.ref.png b/test/reference/a8-clear.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..98a624e
Binary files /dev/null and b/test/reference/a8-clear.mask.argb32.ref.png differ
diff --git a/test/reference/a8-clear.mask.rgb24.ref.png b/test/reference/a8-clear.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..98a624e
Binary files /dev/null and b/test/reference/a8-clear.mask.rgb24.ref.png differ
diff --git a/test/reference/a8-clear.rgb24.ref.png b/test/reference/a8-clear.rgb24.ref.png
new file mode 100644 (file)
index 0000000..98a624e
Binary files /dev/null and b/test/reference/a8-clear.rgb24.ref.png differ
diff --git a/test/reference/a8-mask.argb32.ref.png b/test/reference/a8-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e0503d9
Binary files /dev/null and b/test/reference/a8-mask.argb32.ref.png differ
diff --git a/test/reference/a8-mask.egl.argb32.ref.png b/test/reference/a8-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e0503d9
Binary files /dev/null and b/test/reference/a8-mask.egl.argb32.ref.png differ
diff --git a/test/reference/a8-mask.mask.argb32.ref.png b/test/reference/a8-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e0503d9
Binary files /dev/null and b/test/reference/a8-mask.mask.argb32.ref.png differ
diff --git a/test/reference/a8-mask.mask.rgb24.ref.png b/test/reference/a8-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e0503d9
Binary files /dev/null and b/test/reference/a8-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/a8-mask.rgb24.ref.png b/test/reference/a8-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e0503d9
Binary files /dev/null and b/test/reference/a8-mask.rgb24.ref.png differ
diff --git a/test/reference/aliasing.argb32.ref.png b/test/reference/aliasing.argb32.ref.png
new file mode 100644 (file)
index 0000000..c11eb67
Binary files /dev/null and b/test/reference/aliasing.argb32.ref.png differ
diff --git a/test/reference/aliasing.egl.argb32.ref.png b/test/reference/aliasing.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e20211a
Binary files /dev/null and b/test/reference/aliasing.egl.argb32.ref.png differ
diff --git a/test/reference/aliasing.mask.argb32.ref.png b/test/reference/aliasing.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c11eb67
Binary files /dev/null and b/test/reference/aliasing.mask.argb32.ref.png differ
diff --git a/test/reference/aliasing.mask.rgb24.ref.png b/test/reference/aliasing.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c11eb67
Binary files /dev/null and b/test/reference/aliasing.mask.rgb24.ref.png differ
diff --git a/test/reference/aliasing.rgb24.ref.png b/test/reference/aliasing.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c11eb67
Binary files /dev/null and b/test/reference/aliasing.rgb24.ref.png differ
diff --git a/test/reference/alpha-similar.argb32.ref.png b/test/reference/alpha-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..9e1bfaa
Binary files /dev/null and b/test/reference/alpha-similar.argb32.ref.png differ
diff --git a/test/reference/alpha-similar.egl.argb32.ref.png b/test/reference/alpha-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ef34fb3
Binary files /dev/null and b/test/reference/alpha-similar.egl.argb32.ref.png differ
diff --git a/test/reference/alpha-similar.mask.argb32.ref.png b/test/reference/alpha-similar.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9e1bfaa
Binary files /dev/null and b/test/reference/alpha-similar.mask.argb32.ref.png differ
diff --git a/test/reference/alpha-similar.mask.rgb24.ref.png b/test/reference/alpha-similar.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a1f5280
Binary files /dev/null and b/test/reference/alpha-similar.mask.rgb24.ref.png differ
index 4085d60..a1f5280 100644 (file)
Binary files a/test/reference/alpha-similar.rgb24.ref.png and b/test/reference/alpha-similar.rgb24.ref.png differ
diff --git a/test/reference/api-special-cases.argb32.ref.png b/test/reference/api-special-cases.argb32.ref.png
new file mode 100644 (file)
index 0000000..56b88a9
Binary files /dev/null and b/test/reference/api-special-cases.argb32.ref.png differ
diff --git a/test/reference/api-special-cases.egl.argb32.ref.png b/test/reference/api-special-cases.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..de1dea9
Binary files /dev/null and b/test/reference/api-special-cases.egl.argb32.ref.png differ
diff --git a/test/reference/api-special-cases.mask.argb32.ref.png b/test/reference/api-special-cases.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..56b88a9
Binary files /dev/null and b/test/reference/api-special-cases.mask.argb32.ref.png differ
diff --git a/test/reference/api-special-cases.mask.rgb24.ref.png b/test/reference/api-special-cases.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..56b88a9
Binary files /dev/null and b/test/reference/api-special-cases.mask.rgb24.ref.png differ
diff --git a/test/reference/api-special-cases.rgb24.ref.png b/test/reference/api-special-cases.rgb24.ref.png
new file mode 100644 (file)
index 0000000..56b88a9
Binary files /dev/null and b/test/reference/api-special-cases.rgb24.ref.png differ
diff --git a/test/reference/arc-direction.argb32.ref.png b/test/reference/arc-direction.argb32.ref.png
new file mode 100644 (file)
index 0000000..280c09b
Binary files /dev/null and b/test/reference/arc-direction.argb32.ref.png differ
diff --git a/test/reference/arc-direction.base.argb32.ref.png b/test/reference/arc-direction.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..2790a2b
Binary files /dev/null and b/test/reference/arc-direction.base.argb32.ref.png differ
diff --git a/test/reference/arc-direction.base.ref.png b/test/reference/arc-direction.base.ref.png
new file mode 100644 (file)
index 0000000..2790a2b
Binary files /dev/null and b/test/reference/arc-direction.base.ref.png differ
diff --git a/test/reference/arc-direction.base.rgb24.ref.png b/test/reference/arc-direction.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2790a2b
Binary files /dev/null and b/test/reference/arc-direction.base.rgb24.ref.png differ
diff --git a/test/reference/arc-direction.egl.argb32.ref.png b/test/reference/arc-direction.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..04c356f
Binary files /dev/null and b/test/reference/arc-direction.egl.argb32.ref.png differ
diff --git a/test/reference/arc-direction.mask.argb32.ref.png b/test/reference/arc-direction.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..280c09b
Binary files /dev/null and b/test/reference/arc-direction.mask.argb32.ref.png differ
diff --git a/test/reference/arc-direction.mask.rgb24.ref.png b/test/reference/arc-direction.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..280c09b
Binary files /dev/null and b/test/reference/arc-direction.mask.rgb24.ref.png differ
diff --git a/test/reference/arc-direction.ps.ref.png b/test/reference/arc-direction.ps.ref.png
new file mode 100644 (file)
index 0000000..902ab45
Binary files /dev/null and b/test/reference/arc-direction.ps.ref.png differ
diff --git a/test/reference/arc-direction.ref.png b/test/reference/arc-direction.ref.png
new file mode 100644 (file)
index 0000000..78be3e9
Binary files /dev/null and b/test/reference/arc-direction.ref.png differ
diff --git a/test/reference/arc-direction.rgb24.ref.png b/test/reference/arc-direction.rgb24.ref.png
new file mode 100644 (file)
index 0000000..280c09b
Binary files /dev/null and b/test/reference/arc-direction.rgb24.ref.png differ
diff --git a/test/reference/arc-direction.traps.argb32.ref.png b/test/reference/arc-direction.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..280c09b
Binary files /dev/null and b/test/reference/arc-direction.traps.argb32.ref.png differ
diff --git a/test/reference/arc-direction.traps.ref.png b/test/reference/arc-direction.traps.ref.png
new file mode 100644 (file)
index 0000000..2790a2b
Binary files /dev/null and b/test/reference/arc-direction.traps.ref.png differ
diff --git a/test/reference/arc-direction.traps.rgb24.ref.png b/test/reference/arc-direction.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..280c09b
Binary files /dev/null and b/test/reference/arc-direction.traps.rgb24.ref.png differ
diff --git a/test/reference/arc-infinite-loop.argb32.ref.png b/test/reference/arc-infinite-loop.argb32.ref.png
new file mode 100644 (file)
index 0000000..82d645f
Binary files /dev/null and b/test/reference/arc-infinite-loop.argb32.ref.png differ
diff --git a/test/reference/arc-infinite-loop.egl.argb32.ref.png b/test/reference/arc-infinite-loop.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..82d645f
Binary files /dev/null and b/test/reference/arc-infinite-loop.egl.argb32.ref.png differ
diff --git a/test/reference/arc-infinite-loop.mask.argb32.ref.png b/test/reference/arc-infinite-loop.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..82d645f
Binary files /dev/null and b/test/reference/arc-infinite-loop.mask.argb32.ref.png differ
diff --git a/test/reference/arc-infinite-loop.mask.rgb24.ref.png b/test/reference/arc-infinite-loop.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..82d645f
Binary files /dev/null and b/test/reference/arc-infinite-loop.mask.rgb24.ref.png differ
diff --git a/test/reference/arc-infinite-loop.rgb24.ref.png b/test/reference/arc-infinite-loop.rgb24.ref.png
new file mode 100644 (file)
index 0000000..82d645f
Binary files /dev/null and b/test/reference/arc-infinite-loop.rgb24.ref.png differ
diff --git a/test/reference/arc-looping-dash.argb32.ref.png b/test/reference/arc-looping-dash.argb32.ref.png
new file mode 100644 (file)
index 0000000..516e66c
Binary files /dev/null and b/test/reference/arc-looping-dash.argb32.ref.png differ
diff --git a/test/reference/arc-looping-dash.egl.argb32.ref.png b/test/reference/arc-looping-dash.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ea28611
Binary files /dev/null and b/test/reference/arc-looping-dash.egl.argb32.ref.png differ
diff --git a/test/reference/arc-looping-dash.mask.argb32.ref.png b/test/reference/arc-looping-dash.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..516e66c
Binary files /dev/null and b/test/reference/arc-looping-dash.mask.argb32.ref.png differ
diff --git a/test/reference/arc-looping-dash.mask.rgb24.ref.png b/test/reference/arc-looping-dash.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..516e66c
Binary files /dev/null and b/test/reference/arc-looping-dash.mask.rgb24.ref.png differ
diff --git a/test/reference/arc-looping-dash.rgb24.ref.png b/test/reference/arc-looping-dash.rgb24.ref.png
new file mode 100644 (file)
index 0000000..516e66c
Binary files /dev/null and b/test/reference/arc-looping-dash.rgb24.ref.png differ
diff --git a/test/reference/big-empty-box.egl.argb32.ref.png b/test/reference/big-empty-box.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a88d3b6
Binary files /dev/null and b/test/reference/big-empty-box.egl.argb32.ref.png differ
diff --git a/test/reference/big-empty-triangle.egl.argb32.ref.png b/test/reference/big-empty-triangle.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a88d3b6
Binary files /dev/null and b/test/reference/big-empty-triangle.egl.argb32.ref.png differ
diff --git a/test/reference/big-empty-triangle.mask.argb32.ref.png b/test/reference/big-empty-triangle.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a88d3b6
Binary files /dev/null and b/test/reference/big-empty-triangle.mask.argb32.ref.png differ
diff --git a/test/reference/big-empty-triangle.mask.rgb24.ref.png b/test/reference/big-empty-triangle.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6c2ca32
Binary files /dev/null and b/test/reference/big-empty-triangle.mask.rgb24.ref.png differ
diff --git a/test/reference/big-line.argb32.ref.png b/test/reference/big-line.argb32.ref.png
new file mode 100644 (file)
index 0000000..1bcde8f
Binary files /dev/null and b/test/reference/big-line.argb32.ref.png differ
diff --git a/test/reference/big-line.egl.argb32.ref.png b/test/reference/big-line.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a272132
Binary files /dev/null and b/test/reference/big-line.egl.argb32.ref.png differ
diff --git a/test/reference/big-line.mask.argb32.ref.png b/test/reference/big-line.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1bcde8f
Binary files /dev/null and b/test/reference/big-line.mask.argb32.ref.png differ
diff --git a/test/reference/big-line.mask.rgb24.ref.png b/test/reference/big-line.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1bcde8f
Binary files /dev/null and b/test/reference/big-line.mask.rgb24.ref.png differ
diff --git a/test/reference/big-line.rgb24.ref.png b/test/reference/big-line.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1bcde8f
Binary files /dev/null and b/test/reference/big-line.rgb24.ref.png differ
diff --git a/test/reference/big-little-box.egl.argb32.ref.png b/test/reference/big-little-box.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..928c5e6
Binary files /dev/null and b/test/reference/big-little-box.egl.argb32.ref.png differ
diff --git a/test/reference/big-little-box.mask.argb32.ref.png b/test/reference/big-little-box.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..928c5e6
Binary files /dev/null and b/test/reference/big-little-box.mask.argb32.ref.png differ
diff --git a/test/reference/big-little-box.mask.rgb24.ref.png b/test/reference/big-little-box.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c069d6f
Binary files /dev/null and b/test/reference/big-little-box.mask.rgb24.ref.png differ
index a5c8155..1c2522f 100644 (file)
Binary files a/test/reference/big-little-triangle.argb32.ref.png and b/test/reference/big-little-triangle.argb32.ref.png differ
diff --git a/test/reference/big-little-triangle.egl.argb32.ref.png b/test/reference/big-little-triangle.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1c2522f
Binary files /dev/null and b/test/reference/big-little-triangle.egl.argb32.ref.png differ
diff --git a/test/reference/big-little-triangle.mask.argb32.ref.png b/test/reference/big-little-triangle.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1c2522f
Binary files /dev/null and b/test/reference/big-little-triangle.mask.argb32.ref.png differ
diff --git a/test/reference/big-little-triangle.mask.rgb24.ref.png b/test/reference/big-little-triangle.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..24fc472
Binary files /dev/null and b/test/reference/big-little-triangle.mask.rgb24.ref.png differ
index 30b1178..24fc472 100644 (file)
Binary files a/test/reference/big-little-triangle.rgb24.ref.png and b/test/reference/big-little-triangle.rgb24.ref.png differ
diff --git a/test/reference/big-trap.egl.argb32.ref.png b/test/reference/big-trap.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c0975c9
Binary files /dev/null and b/test/reference/big-trap.egl.argb32.ref.png differ
diff --git a/test/reference/big-trap.mask.argb32.ref.png b/test/reference/big-trap.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c0975c9
Binary files /dev/null and b/test/reference/big-trap.mask.argb32.ref.png differ
diff --git a/test/reference/big-trap.mask.rgb24.ref.png b/test/reference/big-trap.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c0975c9
Binary files /dev/null and b/test/reference/big-trap.mask.rgb24.ref.png differ
diff --git a/test/reference/bilevel-image.argb32.ref.png b/test/reference/bilevel-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-image.argb32.ref.png differ
diff --git a/test/reference/bilevel-image.egl.argb32.ref.png b/test/reference/bilevel-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-image.egl.argb32.ref.png differ
diff --git a/test/reference/bilevel-image.mask.argb32.ref.png b/test/reference/bilevel-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-image.mask.argb32.ref.png differ
diff --git a/test/reference/bilevel-image.mask.rgb24.ref.png b/test/reference/bilevel-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-image.mask.rgb24.ref.png differ
diff --git a/test/reference/bilevel-image.rgb24.ref.png b/test/reference/bilevel-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-image.rgb24.ref.png differ
diff --git a/test/reference/bilevel-xlib-fallback.rgb24.ref.png b/test/reference/bilevel-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/bilevel-xlib-window.rgb24.ref.png b/test/reference/bilevel-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/bilevel-xlib.argb32.ref.png b/test/reference/bilevel-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-xlib.argb32.ref.png differ
diff --git a/test/reference/bilevel-xlib.rgb24.ref.png b/test/reference/bilevel-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3fb25c2
Binary files /dev/null and b/test/reference/bilevel-xlib.rgb24.ref.png differ
diff --git a/test/reference/bitmap-font.argb32.ref.png b/test/reference/bitmap-font.argb32.ref.png
new file mode 100644 (file)
index 0000000..bc2bc52
Binary files /dev/null and b/test/reference/bitmap-font.argb32.ref.png differ
diff --git a/test/reference/bitmap-font.egl.argb32.ref.png b/test/reference/bitmap-font.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bc2bc52
Binary files /dev/null and b/test/reference/bitmap-font.egl.argb32.ref.png differ
diff --git a/test/reference/bitmap-font.mask.argb32.ref.png b/test/reference/bitmap-font.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..bc2bc52
Binary files /dev/null and b/test/reference/bitmap-font.mask.argb32.ref.png differ
diff --git a/test/reference/bitmap-font.mask.rgb24.ref.png b/test/reference/bitmap-font.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..285d742
Binary files /dev/null and b/test/reference/bitmap-font.mask.rgb24.ref.png differ
index 8569064..285d742 100644 (file)
Binary files a/test/reference/bitmap-font.rgb24.ref.png and b/test/reference/bitmap-font.rgb24.ref.png differ
diff --git a/test/reference/bug-40410.argb32.ref.png b/test/reference/bug-40410.argb32.ref.png
new file mode 100644 (file)
index 0000000..ae4420a
Binary files /dev/null and b/test/reference/bug-40410.argb32.ref.png differ
diff --git a/test/reference/bug-40410.egl.argb32.ref.png b/test/reference/bug-40410.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ae4420a
Binary files /dev/null and b/test/reference/bug-40410.egl.argb32.ref.png differ
diff --git a/test/reference/bug-40410.mask.argb32.ref.png b/test/reference/bug-40410.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ae4420a
Binary files /dev/null and b/test/reference/bug-40410.mask.argb32.ref.png differ
diff --git a/test/reference/bug-40410.mask.rgb24.ref.png b/test/reference/bug-40410.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ae4420a
Binary files /dev/null and b/test/reference/bug-40410.mask.rgb24.ref.png differ
diff --git a/test/reference/bug-40410.rgb24.ref.png b/test/reference/bug-40410.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ae4420a
Binary files /dev/null and b/test/reference/bug-40410.rgb24.ref.png differ
diff --git a/test/reference/bug-bo-rectangular.argb32.ref.png b/test/reference/bug-bo-rectangular.argb32.ref.png
new file mode 100644 (file)
index 0000000..ffa4ede
Binary files /dev/null and b/test/reference/bug-bo-rectangular.argb32.ref.png differ
diff --git a/test/reference/bug-bo-rectangular.egl.argb32.ref.png b/test/reference/bug-bo-rectangular.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6118dff
Binary files /dev/null and b/test/reference/bug-bo-rectangular.egl.argb32.ref.png differ
diff --git a/test/reference/bug-bo-rectangular.mask.argb32.ref.png b/test/reference/bug-bo-rectangular.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ffa4ede
Binary files /dev/null and b/test/reference/bug-bo-rectangular.mask.argb32.ref.png differ
diff --git a/test/reference/bug-bo-rectangular.mask.rgb24.ref.png b/test/reference/bug-bo-rectangular.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ffa4ede
Binary files /dev/null and b/test/reference/bug-bo-rectangular.mask.rgb24.ref.png differ
diff --git a/test/reference/bug-bo-rectangular.rgb24.ref.png b/test/reference/bug-bo-rectangular.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ffa4ede
Binary files /dev/null and b/test/reference/bug-bo-rectangular.rgb24.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.argb32.ref.png b/test/reference/bug-bo-ricotz.argb32.ref.png
new file mode 100644 (file)
index 0000000..0e52b24
Binary files /dev/null and b/test/reference/bug-bo-ricotz.argb32.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.base.argb32.ref.png b/test/reference/bug-bo-ricotz.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..ff7a552
Binary files /dev/null and b/test/reference/bug-bo-ricotz.base.argb32.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.base.rgb24.ref.png b/test/reference/bug-bo-ricotz.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ff7a552
Binary files /dev/null and b/test/reference/bug-bo-ricotz.base.rgb24.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.egl.argb32.ref.png b/test/reference/bug-bo-ricotz.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8de674d
Binary files /dev/null and b/test/reference/bug-bo-ricotz.egl.argb32.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.mask.argb32.ref.png b/test/reference/bug-bo-ricotz.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0e52b24
Binary files /dev/null and b/test/reference/bug-bo-ricotz.mask.argb32.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.mask.rgb24.ref.png b/test/reference/bug-bo-ricotz.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0e52b24
Binary files /dev/null and b/test/reference/bug-bo-ricotz.mask.rgb24.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.rgb24.ref.png b/test/reference/bug-bo-ricotz.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0e52b24
Binary files /dev/null and b/test/reference/bug-bo-ricotz.rgb24.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.traps.argb32.ref.png b/test/reference/bug-bo-ricotz.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..0e52b24
Binary files /dev/null and b/test/reference/bug-bo-ricotz.traps.argb32.ref.png differ
diff --git a/test/reference/bug-bo-ricotz.traps.rgb24.ref.png b/test/reference/bug-bo-ricotz.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0e52b24
Binary files /dev/null and b/test/reference/bug-bo-ricotz.traps.rgb24.ref.png differ
diff --git a/test/reference/bug-extents.argb32.ref.png b/test/reference/bug-extents.argb32.ref.png
new file mode 100644 (file)
index 0000000..2c6875e
Binary files /dev/null and b/test/reference/bug-extents.argb32.ref.png differ
diff --git a/test/reference/bug-extents.egl.argb32.ref.png b/test/reference/bug-extents.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d019efa
Binary files /dev/null and b/test/reference/bug-extents.egl.argb32.ref.png differ
diff --git a/test/reference/bug-extents.mask.argb32.ref.png b/test/reference/bug-extents.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2c6875e
Binary files /dev/null and b/test/reference/bug-extents.mask.argb32.ref.png differ
diff --git a/test/reference/bug-extents.mask.rgb24.ref.png b/test/reference/bug-extents.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2c6875e
Binary files /dev/null and b/test/reference/bug-extents.mask.rgb24.ref.png differ
diff --git a/test/reference/bug-extents.rgb24.ref.png b/test/reference/bug-extents.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2c6875e
Binary files /dev/null and b/test/reference/bug-extents.rgb24.ref.png differ
diff --git a/test/reference/bug-seams.argb32.ref.png b/test/reference/bug-seams.argb32.ref.png
new file mode 100644 (file)
index 0000000..99098db
Binary files /dev/null and b/test/reference/bug-seams.argb32.ref.png differ
diff --git a/test/reference/bug-seams.egl.argb32.ref.png b/test/reference/bug-seams.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b95d48
Binary files /dev/null and b/test/reference/bug-seams.egl.argb32.ref.png differ
diff --git a/test/reference/bug-seams.mask.argb32.ref.png b/test/reference/bug-seams.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..99098db
Binary files /dev/null and b/test/reference/bug-seams.mask.argb32.ref.png differ
diff --git a/test/reference/bug-seams.mask.rgb24.ref.png b/test/reference/bug-seams.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..99098db
Binary files /dev/null and b/test/reference/bug-seams.mask.rgb24.ref.png differ
diff --git a/test/reference/bug-seams.rgb24.ref.png b/test/reference/bug-seams.rgb24.ref.png
new file mode 100644 (file)
index 0000000..99098db
Binary files /dev/null and b/test/reference/bug-seams.rgb24.ref.png differ
diff --git a/test/reference/bug-source-cu.argb32.ref.png b/test/reference/bug-source-cu.argb32.ref.png
new file mode 100644 (file)
index 0000000..808feb5
Binary files /dev/null and b/test/reference/bug-source-cu.argb32.ref.png differ
diff --git a/test/reference/bug-source-cu.egl.argb32.ref.png b/test/reference/bug-source-cu.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1349391
Binary files /dev/null and b/test/reference/bug-source-cu.egl.argb32.ref.png differ
diff --git a/test/reference/bug-source-cu.rgb24.ref.png b/test/reference/bug-source-cu.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6cf2b1a
Binary files /dev/null and b/test/reference/bug-source-cu.rgb24.ref.png differ
diff --git a/test/reference/bug-source-cu.traps.argb32.ref.png b/test/reference/bug-source-cu.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..d8837c3
Binary files /dev/null and b/test/reference/bug-source-cu.traps.argb32.ref.png differ
diff --git a/test/reference/bug-source-cu.traps.rgb24.ref.png b/test/reference/bug-source-cu.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..75e3b32
Binary files /dev/null and b/test/reference/bug-source-cu.traps.rgb24.ref.png differ
diff --git a/test/reference/caps-joins-alpha.argb32.ref.png b/test/reference/caps-joins-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..964a70f
Binary files /dev/null and b/test/reference/caps-joins-alpha.argb32.ref.png differ
diff --git a/test/reference/caps-joins-alpha.egl.argb32.ref.png b/test/reference/caps-joins-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..48d9f5e
Binary files /dev/null and b/test/reference/caps-joins-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/caps-joins-alpha.mask.argb32.ref.png b/test/reference/caps-joins-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..964a70f
Binary files /dev/null and b/test/reference/caps-joins-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/caps-joins-alpha.mask.rgb24.ref.png b/test/reference/caps-joins-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..964a70f
Binary files /dev/null and b/test/reference/caps-joins-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/caps-joins-alpha.rgb24.ref.png b/test/reference/caps-joins-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..964a70f
Binary files /dev/null and b/test/reference/caps-joins-alpha.rgb24.ref.png differ
diff --git a/test/reference/caps-joins-curve.argb32.ref.png b/test/reference/caps-joins-curve.argb32.ref.png
new file mode 100644 (file)
index 0000000..3595900
Binary files /dev/null and b/test/reference/caps-joins-curve.argb32.ref.png differ
diff --git a/test/reference/caps-joins-curve.egl.argb32.ref.png b/test/reference/caps-joins-curve.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..985d866
Binary files /dev/null and b/test/reference/caps-joins-curve.egl.argb32.ref.png differ
diff --git a/test/reference/caps-joins-curve.mask.argb32.ref.png b/test/reference/caps-joins-curve.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3595900
Binary files /dev/null and b/test/reference/caps-joins-curve.mask.argb32.ref.png differ
diff --git a/test/reference/caps-joins-curve.mask.rgb24.ref.png b/test/reference/caps-joins-curve.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3595900
Binary files /dev/null and b/test/reference/caps-joins-curve.mask.rgb24.ref.png differ
diff --git a/test/reference/caps-joins-curve.rgb24.ref.png b/test/reference/caps-joins-curve.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3595900
Binary files /dev/null and b/test/reference/caps-joins-curve.rgb24.ref.png differ
diff --git a/test/reference/caps-joins.argb32.ref.png b/test/reference/caps-joins.argb32.ref.png
new file mode 100644 (file)
index 0000000..4983c02
Binary files /dev/null and b/test/reference/caps-joins.argb32.ref.png differ
diff --git a/test/reference/caps-joins.egl.argb32.ref.png b/test/reference/caps-joins.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a5a198f
Binary files /dev/null and b/test/reference/caps-joins.egl.argb32.ref.png differ
diff --git a/test/reference/caps-joins.mask.argb32.ref.png b/test/reference/caps-joins.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4983c02
Binary files /dev/null and b/test/reference/caps-joins.mask.argb32.ref.png differ
diff --git a/test/reference/caps-joins.mask.rgb24.ref.png b/test/reference/caps-joins.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4983c02
Binary files /dev/null and b/test/reference/caps-joins.mask.rgb24.ref.png differ
diff --git a/test/reference/caps-joins.rgb24.ref.png b/test/reference/caps-joins.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4983c02
Binary files /dev/null and b/test/reference/caps-joins.rgb24.ref.png differ
diff --git a/test/reference/caps-sub-paths.argb32.ref.png b/test/reference/caps-sub-paths.argb32.ref.png
new file mode 100644 (file)
index 0000000..7443389
Binary files /dev/null and b/test/reference/caps-sub-paths.argb32.ref.png differ
diff --git a/test/reference/caps-sub-paths.egl.argb32.ref.png b/test/reference/caps-sub-paths.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b2196a2
Binary files /dev/null and b/test/reference/caps-sub-paths.egl.argb32.ref.png differ
diff --git a/test/reference/caps-sub-paths.mask.argb32.ref.png b/test/reference/caps-sub-paths.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7443389
Binary files /dev/null and b/test/reference/caps-sub-paths.mask.argb32.ref.png differ
diff --git a/test/reference/caps-sub-paths.mask.rgb24.ref.png b/test/reference/caps-sub-paths.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7443389
Binary files /dev/null and b/test/reference/caps-sub-paths.mask.rgb24.ref.png differ
diff --git a/test/reference/caps-sub-paths.rgb24.ref.png b/test/reference/caps-sub-paths.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7443389
Binary files /dev/null and b/test/reference/caps-sub-paths.rgb24.ref.png differ
diff --git a/test/reference/caps-tails-curve.argb32.ref.png b/test/reference/caps-tails-curve.argb32.ref.png
new file mode 100644 (file)
index 0000000..b0f477d
Binary files /dev/null and b/test/reference/caps-tails-curve.argb32.ref.png differ
diff --git a/test/reference/caps-tails-curve.egl.argb32.ref.png b/test/reference/caps-tails-curve.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..93172b2
Binary files /dev/null and b/test/reference/caps-tails-curve.egl.argb32.ref.png differ
diff --git a/test/reference/caps-tails-curve.mask.argb32.ref.png b/test/reference/caps-tails-curve.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b0f477d
Binary files /dev/null and b/test/reference/caps-tails-curve.mask.argb32.ref.png differ
diff --git a/test/reference/caps-tails-curve.mask.rgb24.ref.png b/test/reference/caps-tails-curve.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b0f477d
Binary files /dev/null and b/test/reference/caps-tails-curve.mask.rgb24.ref.png differ
diff --git a/test/reference/caps-tails-curve.rgb24.ref.png b/test/reference/caps-tails-curve.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b0f477d
Binary files /dev/null and b/test/reference/caps-tails-curve.rgb24.ref.png differ
diff --git a/test/reference/caps.argb32.ref.png b/test/reference/caps.argb32.ref.png
new file mode 100644 (file)
index 0000000..bf784fd
Binary files /dev/null and b/test/reference/caps.argb32.ref.png differ
diff --git a/test/reference/caps.egl.argb32.ref.png b/test/reference/caps.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..68cae51
Binary files /dev/null and b/test/reference/caps.egl.argb32.ref.png differ
diff --git a/test/reference/caps.mask.argb32.ref.png b/test/reference/caps.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..bf784fd
Binary files /dev/null and b/test/reference/caps.mask.argb32.ref.png differ
diff --git a/test/reference/caps.mask.rgb24.ref.png b/test/reference/caps.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..bf784fd
Binary files /dev/null and b/test/reference/caps.mask.rgb24.ref.png differ
diff --git a/test/reference/caps.rgb24.ref.png b/test/reference/caps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..bf784fd
Binary files /dev/null and b/test/reference/caps.rgb24.ref.png differ
diff --git a/test/reference/checkerboard.argb32.ref.png b/test/reference/checkerboard.argb32.ref.png
new file mode 100644 (file)
index 0000000..1444bc4
Binary files /dev/null and b/test/reference/checkerboard.argb32.ref.png differ
diff --git a/test/reference/checkerboard.egl.argb32.ref.png b/test/reference/checkerboard.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1444bc4
Binary files /dev/null and b/test/reference/checkerboard.egl.argb32.ref.png differ
diff --git a/test/reference/checkerboard.mask.argb32.ref.png b/test/reference/checkerboard.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1444bc4
Binary files /dev/null and b/test/reference/checkerboard.mask.argb32.ref.png differ
diff --git a/test/reference/checkerboard.mask.rgb24.ref.png b/test/reference/checkerboard.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1444bc4
Binary files /dev/null and b/test/reference/checkerboard.mask.rgb24.ref.png differ
diff --git a/test/reference/checkerboard.rgb24.ref.png b/test/reference/checkerboard.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1444bc4
Binary files /dev/null and b/test/reference/checkerboard.rgb24.ref.png differ
diff --git a/test/reference/clear-source.argb32.ref.png b/test/reference/clear-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..352bf45
Binary files /dev/null and b/test/reference/clear-source.argb32.ref.png differ
index b7e8025..352bf45 100644 (file)
Binary files a/test/reference/clear-source.base.argb32.ref.png and b/test/reference/clear-source.base.argb32.ref.png differ
index b7e8025..352bf45 100644 (file)
Binary files a/test/reference/clear-source.base.rgb24.ref.png and b/test/reference/clear-source.base.rgb24.ref.png differ
diff --git a/test/reference/clear-source.egl.argb32.ref.png b/test/reference/clear-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0714bef
Binary files /dev/null and b/test/reference/clear-source.egl.argb32.ref.png differ
diff --git a/test/reference/clear-source.mask.argb32.ref.png b/test/reference/clear-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..352bf45
Binary files /dev/null and b/test/reference/clear-source.mask.argb32.ref.png differ
diff --git a/test/reference/clear-source.mask.rgb24.ref.png b/test/reference/clear-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..352bf45
Binary files /dev/null and b/test/reference/clear-source.mask.rgb24.ref.png differ
diff --git a/test/reference/clear-source.rgb24.ref.png b/test/reference/clear-source.rgb24.ref.png
new file mode 100644 (file)
index 0000000..352bf45
Binary files /dev/null and b/test/reference/clear-source.rgb24.ref.png differ
index b7e8025..352bf45 100644 (file)
Binary files a/test/reference/clear-source.traps.argb32.ref.png and b/test/reference/clear-source.traps.argb32.ref.png differ
index b7e8025..352bf45 100644 (file)
Binary files a/test/reference/clear-source.traps.rgb24.ref.png and b/test/reference/clear-source.traps.rgb24.ref.png differ
index 2e756e2..102ac3d 100644 (file)
Binary files a/test/reference/clear.argb32.ref.png and b/test/reference/clear.argb32.ref.png differ
diff --git a/test/reference/clear.mask.argb32.ref.png b/test/reference/clear.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..102ac3d
Binary files /dev/null and b/test/reference/clear.mask.argb32.ref.png differ
diff --git a/test/reference/clear.mask.rgb24.ref.png b/test/reference/clear.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3267aff
Binary files /dev/null and b/test/reference/clear.mask.rgb24.ref.png differ
index dc1e509..3267aff 100644 (file)
Binary files a/test/reference/clear.rgb24.ref.png and b/test/reference/clear.rgb24.ref.png differ
diff --git a/test/reference/clip-all.argb32.ref.png b/test/reference/clip-all.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-all.argb32.ref.png differ
diff --git a/test/reference/clip-all.egl.argb32.ref.png b/test/reference/clip-all.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-all.egl.argb32.ref.png differ
diff --git a/test/reference/clip-all.mask.argb32.ref.png b/test/reference/clip-all.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-all.mask.argb32.ref.png differ
diff --git a/test/reference/clip-all.mask.rgb24.ref.png b/test/reference/clip-all.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-all.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-all.rgb24.ref.png b/test/reference/clip-all.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-all.rgb24.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-aa.argb32.ref.png b/test/reference/clip-complex-shape-eo-aa.argb32.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-aa.argb32.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-aa.egl.argb32.ref.png b/test/reference/clip-complex-shape-eo-aa.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-aa.egl.argb32.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-aa.mask.argb32.ref.png b/test/reference/clip-complex-shape-eo-aa.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-aa.mask.argb32.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-aa.mask.rgb24.ref.png b/test/reference/clip-complex-shape-eo-aa.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-aa.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-aa.rgb24.ref.png b/test/reference/clip-complex-shape-eo-aa.rgb24.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-aa.rgb24.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-mono.argb32.ref.png b/test/reference/clip-complex-shape-eo-mono.argb32.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-mono.argb32.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-mono.egl.argb32.ref.png b/test/reference/clip-complex-shape-eo-mono.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-mono.egl.argb32.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-mono.mask.argb32.ref.png b/test/reference/clip-complex-shape-eo-mono.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-mono.mask.argb32.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-mono.mask.rgb24.ref.png b/test/reference/clip-complex-shape-eo-mono.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-mono.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-complex-shape-eo-mono.rgb24.ref.png b/test/reference/clip-complex-shape-eo-mono.rgb24.ref.png
new file mode 100644 (file)
index 0000000..bafbb8a
Binary files /dev/null and b/test/reference/clip-complex-shape-eo-mono.rgb24.ref.png differ
diff --git a/test/reference/clip-contexts.argb32.ref.png b/test/reference/clip-contexts.argb32.ref.png
new file mode 100644 (file)
index 0000000..0d575a6
Binary files /dev/null and b/test/reference/clip-contexts.argb32.ref.png differ
diff --git a/test/reference/clip-contexts.egl.argb32.ref.png b/test/reference/clip-contexts.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b47c079
Binary files /dev/null and b/test/reference/clip-contexts.egl.argb32.ref.png differ
diff --git a/test/reference/clip-contexts.mask.argb32.ref.png b/test/reference/clip-contexts.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0d575a6
Binary files /dev/null and b/test/reference/clip-contexts.mask.argb32.ref.png differ
diff --git a/test/reference/clip-contexts.mask.rgb24.ref.png b/test/reference/clip-contexts.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d575a6
Binary files /dev/null and b/test/reference/clip-contexts.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-contexts.rgb24.ref.png b/test/reference/clip-contexts.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d575a6
Binary files /dev/null and b/test/reference/clip-contexts.rgb24.ref.png differ
diff --git a/test/reference/clip-device-offset.egl.argb32.ref.png b/test/reference/clip-device-offset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a88d3b6
Binary files /dev/null and b/test/reference/clip-device-offset.egl.argb32.ref.png differ
diff --git a/test/reference/clip-device-offset.mask.argb32.ref.png b/test/reference/clip-device-offset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..06be985
Binary files /dev/null and b/test/reference/clip-device-offset.mask.argb32.ref.png differ
diff --git a/test/reference/clip-device-offset.mask.rgb24.ref.png b/test/reference/clip-device-offset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2419384
Binary files /dev/null and b/test/reference/clip-device-offset.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-disjoint-hatching.argb32.ref.png b/test/reference/clip-disjoint-hatching.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b22544
Binary files /dev/null and b/test/reference/clip-disjoint-hatching.argb32.ref.png differ
index dbac90b..55f26d0 100644 (file)
Binary files a/test/reference/clip-disjoint-hatching.base.argb32.ref.png and b/test/reference/clip-disjoint-hatching.base.argb32.ref.png differ
index dbac90b..55f26d0 100644 (file)
Binary files a/test/reference/clip-disjoint-hatching.base.rgb24.ref.png and b/test/reference/clip-disjoint-hatching.base.rgb24.ref.png differ
diff --git a/test/reference/clip-disjoint-hatching.egl.argb32.ref.png b/test/reference/clip-disjoint-hatching.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6d4a927
Binary files /dev/null and b/test/reference/clip-disjoint-hatching.egl.argb32.ref.png differ
diff --git a/test/reference/clip-disjoint-hatching.mask.argb32.ref.png b/test/reference/clip-disjoint-hatching.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a29f04a
Binary files /dev/null and b/test/reference/clip-disjoint-hatching.mask.argb32.ref.png differ
diff --git a/test/reference/clip-disjoint-hatching.mask.rgb24.ref.png b/test/reference/clip-disjoint-hatching.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a29f04a
Binary files /dev/null and b/test/reference/clip-disjoint-hatching.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-disjoint-hatching.rgb24.ref.png b/test/reference/clip-disjoint-hatching.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6b22544
Binary files /dev/null and b/test/reference/clip-disjoint-hatching.rgb24.ref.png differ
diff --git a/test/reference/clip-disjoint.egl.argb32.ref.png b/test/reference/clip-disjoint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0ba35b5
Binary files /dev/null and b/test/reference/clip-disjoint.egl.argb32.ref.png differ
diff --git a/test/reference/clip-disjoint.mask.argb32.ref.png b/test/reference/clip-disjoint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4e18b7c
Binary files /dev/null and b/test/reference/clip-disjoint.mask.argb32.ref.png differ
diff --git a/test/reference/clip-disjoint.mask.rgb24.ref.png b/test/reference/clip-disjoint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4e18b7c
Binary files /dev/null and b/test/reference/clip-disjoint.mask.rgb24.ref.png differ
index a4c9989..6577a08 100644 (file)
Binary files a/test/reference/clip-disjoint.ref.png and b/test/reference/clip-disjoint.ref.png differ
diff --git a/test/reference/clip-empty-group.argb32.ref.png b/test/reference/clip-empty-group.argb32.ref.png
new file mode 100644 (file)
index 0000000..a59ca47
Binary files /dev/null and b/test/reference/clip-empty-group.argb32.ref.png differ
diff --git a/test/reference/clip-empty-group.egl.argb32.ref.png b/test/reference/clip-empty-group.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a59ca47
Binary files /dev/null and b/test/reference/clip-empty-group.egl.argb32.ref.png differ
diff --git a/test/reference/clip-empty-group.mask.argb32.ref.png b/test/reference/clip-empty-group.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a59ca47
Binary files /dev/null and b/test/reference/clip-empty-group.mask.argb32.ref.png differ
diff --git a/test/reference/clip-empty-group.mask.rgb24.ref.png b/test/reference/clip-empty-group.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a59ca47
Binary files /dev/null and b/test/reference/clip-empty-group.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-empty-group.rgb24.ref.png b/test/reference/clip-empty-group.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a59ca47
Binary files /dev/null and b/test/reference/clip-empty-group.rgb24.ref.png differ
diff --git a/test/reference/clip-empty-save.argb32.ref.png b/test/reference/clip-empty-save.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty-save.argb32.ref.png differ
diff --git a/test/reference/clip-empty-save.egl.argb32.ref.png b/test/reference/clip-empty-save.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty-save.egl.argb32.ref.png differ
diff --git a/test/reference/clip-empty-save.mask.argb32.ref.png b/test/reference/clip-empty-save.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty-save.mask.argb32.ref.png differ
diff --git a/test/reference/clip-empty-save.mask.rgb24.ref.png b/test/reference/clip-empty-save.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty-save.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-empty-save.rgb24.ref.png b/test/reference/clip-empty-save.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty-save.rgb24.ref.png differ
diff --git a/test/reference/clip-empty.argb32.ref.png b/test/reference/clip-empty.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty.argb32.ref.png differ
diff --git a/test/reference/clip-empty.egl.argb32.ref.png b/test/reference/clip-empty.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty.egl.argb32.ref.png differ
diff --git a/test/reference/clip-empty.mask.argb32.ref.png b/test/reference/clip-empty.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty.mask.argb32.ref.png differ
diff --git a/test/reference/clip-empty.mask.rgb24.ref.png b/test/reference/clip-empty.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-empty.rgb24.ref.png b/test/reference/clip-empty.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/clip-empty.rgb24.ref.png differ
index 66af094..e86177c 100644 (file)
Binary files a/test/reference/clip-fill-eo-unbounded.argb32.ref.png and b/test/reference/clip-fill-eo-unbounded.argb32.ref.png differ
index 19b9f09..81ecfb9 100644 (file)
Binary files a/test/reference/clip-fill-eo-unbounded.base.argb32.ref.png and b/test/reference/clip-fill-eo-unbounded.base.argb32.ref.png differ
index 1ad0b17..d6a5939 100644 (file)
Binary files a/test/reference/clip-fill-eo-unbounded.base.rgb24.ref.png and b/test/reference/clip-fill-eo-unbounded.base.rgb24.ref.png differ
diff --git a/test/reference/clip-fill-eo-unbounded.mask.argb32.ref.png b/test/reference/clip-fill-eo-unbounded.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2340bdf
Binary files /dev/null and b/test/reference/clip-fill-eo-unbounded.mask.argb32.ref.png differ
diff --git a/test/reference/clip-fill-eo-unbounded.mask.rgb24.ref.png b/test/reference/clip-fill-eo-unbounded.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..299bd72
Binary files /dev/null and b/test/reference/clip-fill-eo-unbounded.mask.rgb24.ref.png differ
index 272e0e8..cd0c9b7 100644 (file)
Binary files a/test/reference/clip-fill-eo-unbounded.rgb24.ref.png and b/test/reference/clip-fill-eo-unbounded.rgb24.ref.png differ
diff --git a/test/reference/clip-fill-no-op.argb32.ref.png b/test/reference/clip-fill-no-op.argb32.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-fill-no-op.argb32.ref.png differ
diff --git a/test/reference/clip-fill-no-op.egl.argb32.ref.png b/test/reference/clip-fill-no-op.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..11442ad
Binary files /dev/null and b/test/reference/clip-fill-no-op.egl.argb32.ref.png differ
diff --git a/test/reference/clip-fill-no-op.mask.argb32.ref.png b/test/reference/clip-fill-no-op.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-fill-no-op.mask.argb32.ref.png differ
diff --git a/test/reference/clip-fill-no-op.mask.rgb24.ref.png b/test/reference/clip-fill-no-op.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-fill-no-op.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-fill-no-op.rgb24.ref.png b/test/reference/clip-fill-no-op.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-fill-no-op.rgb24.ref.png differ
index 66af094..e86177c 100644 (file)
Binary files a/test/reference/clip-fill-nz-unbounded.argb32.ref.png and b/test/reference/clip-fill-nz-unbounded.argb32.ref.png differ
index 19b9f09..81ecfb9 100644 (file)
Binary files a/test/reference/clip-fill-nz-unbounded.base.argb32.ref.png and b/test/reference/clip-fill-nz-unbounded.base.argb32.ref.png differ
index 1ad0b17..d6a5939 100644 (file)
Binary files a/test/reference/clip-fill-nz-unbounded.base.rgb24.ref.png and b/test/reference/clip-fill-nz-unbounded.base.rgb24.ref.png differ
diff --git a/test/reference/clip-fill-nz-unbounded.mask.argb32.ref.png b/test/reference/clip-fill-nz-unbounded.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..05b2628
Binary files /dev/null and b/test/reference/clip-fill-nz-unbounded.mask.argb32.ref.png differ
diff --git a/test/reference/clip-fill-nz-unbounded.mask.rgb24.ref.png b/test/reference/clip-fill-nz-unbounded.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9ce760b
Binary files /dev/null and b/test/reference/clip-fill-nz-unbounded.mask.rgb24.ref.png differ
index 272e0e8..cd0c9b7 100644 (file)
Binary files a/test/reference/clip-fill-nz-unbounded.rgb24.ref.png and b/test/reference/clip-fill-nz-unbounded.rgb24.ref.png differ
diff --git a/test/reference/clip-fill-rule-pixel-aligned.argb32.ref.png b/test/reference/clip-fill-rule-pixel-aligned.argb32.ref.png
new file mode 100644 (file)
index 0000000..9b82c4b
Binary files /dev/null and b/test/reference/clip-fill-rule-pixel-aligned.argb32.ref.png differ
diff --git a/test/reference/clip-fill-rule-pixel-aligned.egl.argb32.ref.png b/test/reference/clip-fill-rule-pixel-aligned.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9b82c4b
Binary files /dev/null and b/test/reference/clip-fill-rule-pixel-aligned.egl.argb32.ref.png differ
diff --git a/test/reference/clip-fill-rule-pixel-aligned.mask.argb32.ref.png b/test/reference/clip-fill-rule-pixel-aligned.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9b82c4b
Binary files /dev/null and b/test/reference/clip-fill-rule-pixel-aligned.mask.argb32.ref.png differ
diff --git a/test/reference/clip-fill-rule-pixel-aligned.mask.rgb24.ref.png b/test/reference/clip-fill-rule-pixel-aligned.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0b4f068
Binary files /dev/null and b/test/reference/clip-fill-rule-pixel-aligned.mask.rgb24.ref.png differ
index 1970c47..0b4f068 100644 (file)
Binary files a/test/reference/clip-fill-rule-pixel-aligned.rgb24.ref.png and b/test/reference/clip-fill-rule-pixel-aligned.rgb24.ref.png differ
index 0af1530..cb23ea6 100644 (file)
Binary files a/test/reference/clip-fill-rule.argb32.ref.png and b/test/reference/clip-fill-rule.argb32.ref.png differ
index 6b083a7..cb23ea6 100644 (file)
Binary files a/test/reference/clip-fill-rule.base.argb32.ref.png and b/test/reference/clip-fill-rule.base.argb32.ref.png differ
index d21472d..5265dde 100644 (file)
Binary files a/test/reference/clip-fill-rule.base.rgb24.ref.png and b/test/reference/clip-fill-rule.base.rgb24.ref.png differ
diff --git a/test/reference/clip-fill-rule.egl.argb32.ref.png b/test/reference/clip-fill-rule.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2da4f3c
Binary files /dev/null and b/test/reference/clip-fill-rule.egl.argb32.ref.png differ
diff --git a/test/reference/clip-fill-rule.mask.argb32.ref.png b/test/reference/clip-fill-rule.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..cb23ea6
Binary files /dev/null and b/test/reference/clip-fill-rule.mask.argb32.ref.png differ
diff --git a/test/reference/clip-fill-rule.mask.rgb24.ref.png b/test/reference/clip-fill-rule.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5265dde
Binary files /dev/null and b/test/reference/clip-fill-rule.mask.rgb24.ref.png differ
index 7001dbe..5265dde 100644 (file)
Binary files a/test/reference/clip-fill-rule.rgb24.ref.png and b/test/reference/clip-fill-rule.rgb24.ref.png differ
diff --git a/test/reference/clip-fill.argb32.ref.png b/test/reference/clip-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..da091b9
Binary files /dev/null and b/test/reference/clip-fill.argb32.ref.png differ
index d6e84a3..72dc229 100644 (file)
Binary files a/test/reference/clip-fill.base.argb32.ref.png and b/test/reference/clip-fill.base.argb32.ref.png differ
index d6e84a3..72dc229 100644 (file)
Binary files a/test/reference/clip-fill.base.rgb24.ref.png and b/test/reference/clip-fill.base.rgb24.ref.png differ
diff --git a/test/reference/clip-fill.egl.argb32.ref.png b/test/reference/clip-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f2f8bce
Binary files /dev/null and b/test/reference/clip-fill.egl.argb32.ref.png differ
diff --git a/test/reference/clip-fill.mask.argb32.ref.png b/test/reference/clip-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c3f2700
Binary files /dev/null and b/test/reference/clip-fill.mask.argb32.ref.png differ
diff --git a/test/reference/clip-fill.mask.rgb24.ref.png b/test/reference/clip-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c3f2700
Binary files /dev/null and b/test/reference/clip-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-fill.rgb24.ref.png b/test/reference/clip-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da091b9
Binary files /dev/null and b/test/reference/clip-fill.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-aligned-rectangles.argb32.ref.png b/test/reference/clip-group-shapes-aligned-rectangles.argb32.ref.png
new file mode 100644 (file)
index 0000000..cba7507
Binary files /dev/null and b/test/reference/clip-group-shapes-aligned-rectangles.argb32.ref.png differ
diff --git a/test/reference/clip-group-shapes-aligned-rectangles.egl.argb32.ref.png b/test/reference/clip-group-shapes-aligned-rectangles.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..cba7507
Binary files /dev/null and b/test/reference/clip-group-shapes-aligned-rectangles.egl.argb32.ref.png differ
diff --git a/test/reference/clip-group-shapes-aligned-rectangles.mask.argb32.ref.png b/test/reference/clip-group-shapes-aligned-rectangles.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..cba7507
Binary files /dev/null and b/test/reference/clip-group-shapes-aligned-rectangles.mask.argb32.ref.png differ
diff --git a/test/reference/clip-group-shapes-aligned-rectangles.mask.rgb24.ref.png b/test/reference/clip-group-shapes-aligned-rectangles.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..cba7507
Binary files /dev/null and b/test/reference/clip-group-shapes-aligned-rectangles.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-aligned-rectangles.rgb24.ref.png b/test/reference/clip-group-shapes-aligned-rectangles.rgb24.ref.png
new file mode 100644 (file)
index 0000000..cba7507
Binary files /dev/null and b/test/reference/clip-group-shapes-aligned-rectangles.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-circles.argb32.ref.png b/test/reference/clip-group-shapes-circles.argb32.ref.png
new file mode 100644 (file)
index 0000000..31219b2
Binary files /dev/null and b/test/reference/clip-group-shapes-circles.argb32.ref.png differ
index 1a67714..7dd6a83 100644 (file)
Binary files a/test/reference/clip-group-shapes-circles.base.argb32.ref.png and b/test/reference/clip-group-shapes-circles.base.argb32.ref.png differ
index 1a67714..7dd6a83 100644 (file)
Binary files a/test/reference/clip-group-shapes-circles.base.rgb24.ref.png and b/test/reference/clip-group-shapes-circles.base.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-circles.egl.argb32.ref.png b/test/reference/clip-group-shapes-circles.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9c4aa47
Binary files /dev/null and b/test/reference/clip-group-shapes-circles.egl.argb32.ref.png differ
diff --git a/test/reference/clip-group-shapes-circles.mask.argb32.ref.png b/test/reference/clip-group-shapes-circles.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7dd6a83
Binary files /dev/null and b/test/reference/clip-group-shapes-circles.mask.argb32.ref.png differ
diff --git a/test/reference/clip-group-shapes-circles.mask.rgb24.ref.png b/test/reference/clip-group-shapes-circles.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7dd6a83
Binary files /dev/null and b/test/reference/clip-group-shapes-circles.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-circles.rgb24.ref.png b/test/reference/clip-group-shapes-circles.rgb24.ref.png
new file mode 100644 (file)
index 0000000..31219b2
Binary files /dev/null and b/test/reference/clip-group-shapes-circles.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-unaligned-rectangles.argb32.ref.png b/test/reference/clip-group-shapes-unaligned-rectangles.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ad4118
Binary files /dev/null and b/test/reference/clip-group-shapes-unaligned-rectangles.argb32.ref.png differ
index 877e78b..2ad4118 100644 (file)
Binary files a/test/reference/clip-group-shapes-unaligned-rectangles.base.argb32.ref.png and b/test/reference/clip-group-shapes-unaligned-rectangles.base.argb32.ref.png differ
index 877e78b..2ad4118 100644 (file)
Binary files a/test/reference/clip-group-shapes-unaligned-rectangles.base.rgb24.ref.png and b/test/reference/clip-group-shapes-unaligned-rectangles.base.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-unaligned-rectangles.egl.argb32.ref.png b/test/reference/clip-group-shapes-unaligned-rectangles.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ad4118
Binary files /dev/null and b/test/reference/clip-group-shapes-unaligned-rectangles.egl.argb32.ref.png differ
diff --git a/test/reference/clip-group-shapes-unaligned-rectangles.mask.argb32.ref.png b/test/reference/clip-group-shapes-unaligned-rectangles.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..877e78b
Binary files /dev/null and b/test/reference/clip-group-shapes-unaligned-rectangles.mask.argb32.ref.png differ
diff --git a/test/reference/clip-group-shapes-unaligned-rectangles.mask.rgb24.ref.png b/test/reference/clip-group-shapes-unaligned-rectangles.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..877e78b
Binary files /dev/null and b/test/reference/clip-group-shapes-unaligned-rectangles.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-group-shapes-unaligned-rectangles.rgb24.ref.png b/test/reference/clip-group-shapes-unaligned-rectangles.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2ad4118
Binary files /dev/null and b/test/reference/clip-group-shapes-unaligned-rectangles.rgb24.ref.png differ
diff --git a/test/reference/clip-image.argb32.ref.png b/test/reference/clip-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..0f71f73
Binary files /dev/null and b/test/reference/clip-image.argb32.ref.png differ
index 062c721..0f71f73 100644 (file)
Binary files a/test/reference/clip-image.base.argb32.ref.png and b/test/reference/clip-image.base.argb32.ref.png differ
index 062c721..0f71f73 100644 (file)
Binary files a/test/reference/clip-image.base.rgb24.ref.png and b/test/reference/clip-image.base.rgb24.ref.png differ
diff --git a/test/reference/clip-image.egl.argb32.ref.png b/test/reference/clip-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..dd53444
Binary files /dev/null and b/test/reference/clip-image.egl.argb32.ref.png differ
diff --git a/test/reference/clip-image.mask.argb32.ref.png b/test/reference/clip-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..86c28af
Binary files /dev/null and b/test/reference/clip-image.mask.argb32.ref.png differ
diff --git a/test/reference/clip-image.mask.rgb24.ref.png b/test/reference/clip-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..86c28af
Binary files /dev/null and b/test/reference/clip-image.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-image.rgb24.ref.png b/test/reference/clip-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0f71f73
Binary files /dev/null and b/test/reference/clip-image.rgb24.ref.png differ
diff --git a/test/reference/clip-intersect.argb32.ref.png b/test/reference/clip-intersect.argb32.ref.png
new file mode 100644 (file)
index 0000000..6627b3a
Binary files /dev/null and b/test/reference/clip-intersect.argb32.ref.png differ
index 2e97b54..6627b3a 100644 (file)
Binary files a/test/reference/clip-intersect.base.argb32.ref.png and b/test/reference/clip-intersect.base.argb32.ref.png differ
index 2e97b54..6627b3a 100644 (file)
Binary files a/test/reference/clip-intersect.base.rgb24.ref.png and b/test/reference/clip-intersect.base.rgb24.ref.png differ
diff --git a/test/reference/clip-intersect.egl.argb32.ref.png b/test/reference/clip-intersect.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6627b3a
Binary files /dev/null and b/test/reference/clip-intersect.egl.argb32.ref.png differ
diff --git a/test/reference/clip-intersect.mask.argb32.ref.png b/test/reference/clip-intersect.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6627b3a
Binary files /dev/null and b/test/reference/clip-intersect.mask.argb32.ref.png differ
diff --git a/test/reference/clip-intersect.mask.rgb24.ref.png b/test/reference/clip-intersect.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6627b3a
Binary files /dev/null and b/test/reference/clip-intersect.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-intersect.rgb24.ref.png b/test/reference/clip-intersect.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6627b3a
Binary files /dev/null and b/test/reference/clip-intersect.rgb24.ref.png differ
diff --git a/test/reference/clip-mixed-antialias.argb32.ref.png b/test/reference/clip-mixed-antialias.argb32.ref.png
new file mode 100644 (file)
index 0000000..243c4dd
Binary files /dev/null and b/test/reference/clip-mixed-antialias.argb32.ref.png differ
diff --git a/test/reference/clip-mixed-antialias.egl.argb32.ref.png b/test/reference/clip-mixed-antialias.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1a8a6b0
Binary files /dev/null and b/test/reference/clip-mixed-antialias.egl.argb32.ref.png differ
diff --git a/test/reference/clip-mixed-antialias.mask.argb32.ref.png b/test/reference/clip-mixed-antialias.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..243c4dd
Binary files /dev/null and b/test/reference/clip-mixed-antialias.mask.argb32.ref.png differ
diff --git a/test/reference/clip-mixed-antialias.mask.rgb24.ref.png b/test/reference/clip-mixed-antialias.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..243c4dd
Binary files /dev/null and b/test/reference/clip-mixed-antialias.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-mixed-antialias.rgb24.ref.png b/test/reference/clip-mixed-antialias.rgb24.ref.png
new file mode 100644 (file)
index 0000000..243c4dd
Binary files /dev/null and b/test/reference/clip-mixed-antialias.rgb24.ref.png differ
index 927a7d4..ce0cc0d 100644 (file)
Binary files a/test/reference/clip-nesting.argb32.ref.png and b/test/reference/clip-nesting.argb32.ref.png differ
index 01168df..ce0cc0d 100644 (file)
Binary files a/test/reference/clip-nesting.base.argb32.ref.png and b/test/reference/clip-nesting.base.argb32.ref.png differ
index d087ab6..5247843 100644 (file)
Binary files a/test/reference/clip-nesting.base.rgb24.ref.png and b/test/reference/clip-nesting.base.rgb24.ref.png differ
diff --git a/test/reference/clip-nesting.egl.argb32.ref.png b/test/reference/clip-nesting.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a4e4e6
Binary files /dev/null and b/test/reference/clip-nesting.egl.argb32.ref.png differ
diff --git a/test/reference/clip-nesting.mask.argb32.ref.png b/test/reference/clip-nesting.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ce0cc0d
Binary files /dev/null and b/test/reference/clip-nesting.mask.argb32.ref.png differ
diff --git a/test/reference/clip-nesting.mask.rgb24.ref.png b/test/reference/clip-nesting.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5247843
Binary files /dev/null and b/test/reference/clip-nesting.mask.rgb24.ref.png differ
index 432318d..5247843 100644 (file)
Binary files a/test/reference/clip-nesting.rgb24.ref.png and b/test/reference/clip-nesting.rgb24.ref.png differ
index 47c16de..9c90984 100644 (file)
Binary files a/test/reference/clip-operator.argb32.ref.png and b/test/reference/clip-operator.argb32.ref.png differ
index 63a7baa..39a92b0 100644 (file)
Binary files a/test/reference/clip-operator.base.argb32.ref.png and b/test/reference/clip-operator.base.argb32.ref.png differ
index d3d84f2..eed3469 100644 (file)
Binary files a/test/reference/clip-operator.base.rgb24.ref.png and b/test/reference/clip-operator.base.rgb24.ref.png differ
diff --git a/test/reference/clip-operator.mask.argb32.ref.png b/test/reference/clip-operator.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8db1a07
Binary files /dev/null and b/test/reference/clip-operator.mask.argb32.ref.png differ
diff --git a/test/reference/clip-operator.mask.rgb24.ref.png b/test/reference/clip-operator.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ddd1ec3
Binary files /dev/null and b/test/reference/clip-operator.mask.rgb24.ref.png differ
index 8ef57e1..63a0758 100644 (file)
Binary files a/test/reference/clip-operator.rgb24.ref.png and b/test/reference/clip-operator.rgb24.ref.png differ
index 1a562cd..a4179d2 100644 (file)
Binary files a/test/reference/clip-operator.traps.argb32.ref.png and b/test/reference/clip-operator.traps.argb32.ref.png differ
index 8933505..f35c9d5 100644 (file)
Binary files a/test/reference/clip-operator.traps.rgb24.ref.png and b/test/reference/clip-operator.traps.rgb24.ref.png differ
diff --git a/test/reference/clip-polygons.argb32.ref.png b/test/reference/clip-polygons.argb32.ref.png
new file mode 100644 (file)
index 0000000..1b76cd0
Binary files /dev/null and b/test/reference/clip-polygons.argb32.ref.png differ
diff --git a/test/reference/clip-polygons.base.argb32.ref.png b/test/reference/clip-polygons.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..e139ef3
Binary files /dev/null and b/test/reference/clip-polygons.base.argb32.ref.png differ
diff --git a/test/reference/clip-polygons.base.rgb24.ref.png b/test/reference/clip-polygons.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e139ef3
Binary files /dev/null and b/test/reference/clip-polygons.base.rgb24.ref.png differ
diff --git a/test/reference/clip-polygons.egl.argb32.ref.png b/test/reference/clip-polygons.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1b76cd0
Binary files /dev/null and b/test/reference/clip-polygons.egl.argb32.ref.png differ
diff --git a/test/reference/clip-polygons.mask.argb32.ref.png b/test/reference/clip-polygons.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e139ef3
Binary files /dev/null and b/test/reference/clip-polygons.mask.argb32.ref.png differ
diff --git a/test/reference/clip-polygons.mask.rgb24.ref.png b/test/reference/clip-polygons.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e139ef3
Binary files /dev/null and b/test/reference/clip-polygons.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-polygons.rgb24.ref.png b/test/reference/clip-polygons.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1b76cd0
Binary files /dev/null and b/test/reference/clip-polygons.rgb24.ref.png differ
diff --git a/test/reference/clip-polygons.traps.argb32.ref.png b/test/reference/clip-polygons.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..e139ef3
Binary files /dev/null and b/test/reference/clip-polygons.traps.argb32.ref.png differ
diff --git a/test/reference/clip-polygons.traps.rgb24.ref.png b/test/reference/clip-polygons.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e139ef3
Binary files /dev/null and b/test/reference/clip-polygons.traps.rgb24.ref.png differ
diff --git a/test/reference/clip-push-group.argb32.ref.png b/test/reference/clip-push-group.argb32.ref.png
new file mode 100644 (file)
index 0000000..86724a2
Binary files /dev/null and b/test/reference/clip-push-group.argb32.ref.png differ
index de6ac63..86724a2 100644 (file)
Binary files a/test/reference/clip-push-group.base.argb32.ref.png and b/test/reference/clip-push-group.base.argb32.ref.png differ
index de6ac63..86724a2 100644 (file)
Binary files a/test/reference/clip-push-group.base.rgb24.ref.png and b/test/reference/clip-push-group.base.rgb24.ref.png differ
diff --git a/test/reference/clip-push-group.egl.argb32.ref.png b/test/reference/clip-push-group.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..276a082
Binary files /dev/null and b/test/reference/clip-push-group.egl.argb32.ref.png differ
diff --git a/test/reference/clip-push-group.mask.argb32.ref.png b/test/reference/clip-push-group.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..86724a2
Binary files /dev/null and b/test/reference/clip-push-group.mask.argb32.ref.png differ
diff --git a/test/reference/clip-push-group.mask.rgb24.ref.png b/test/reference/clip-push-group.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..86724a2
Binary files /dev/null and b/test/reference/clip-push-group.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-push-group.rgb24.ref.png b/test/reference/clip-push-group.rgb24.ref.png
new file mode 100644 (file)
index 0000000..86724a2
Binary files /dev/null and b/test/reference/clip-push-group.rgb24.ref.png differ
diff --git a/test/reference/clip-rectilinear.argb32.ref.png b/test/reference/clip-rectilinear.argb32.ref.png
new file mode 100644 (file)
index 0000000..9d910db
Binary files /dev/null and b/test/reference/clip-rectilinear.argb32.ref.png differ
diff --git a/test/reference/clip-rectilinear.base.argb32.ref.png b/test/reference/clip-rectilinear.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..9d910db
Binary files /dev/null and b/test/reference/clip-rectilinear.base.argb32.ref.png differ
diff --git a/test/reference/clip-rectilinear.base.rgb24.ref.png b/test/reference/clip-rectilinear.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9d910db
Binary files /dev/null and b/test/reference/clip-rectilinear.base.rgb24.ref.png differ
diff --git a/test/reference/clip-rectilinear.egl.argb32.ref.png b/test/reference/clip-rectilinear.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9d910db
Binary files /dev/null and b/test/reference/clip-rectilinear.egl.argb32.ref.png differ
diff --git a/test/reference/clip-rectilinear.mask.argb32.ref.png b/test/reference/clip-rectilinear.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2a27bec
Binary files /dev/null and b/test/reference/clip-rectilinear.mask.argb32.ref.png differ
diff --git a/test/reference/clip-rectilinear.mask.rgb24.ref.png b/test/reference/clip-rectilinear.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2a27bec
Binary files /dev/null and b/test/reference/clip-rectilinear.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-rectilinear.rgb24.ref.png b/test/reference/clip-rectilinear.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9d910db
Binary files /dev/null and b/test/reference/clip-rectilinear.rgb24.ref.png differ
diff --git a/test/reference/clip-rectilinear.traps.argb32.ref.png b/test/reference/clip-rectilinear.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..2a27bec
Binary files /dev/null and b/test/reference/clip-rectilinear.traps.argb32.ref.png differ
diff --git a/test/reference/clip-rectilinear.traps.rgb24.ref.png b/test/reference/clip-rectilinear.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2a27bec
Binary files /dev/null and b/test/reference/clip-rectilinear.traps.rgb24.ref.png differ
diff --git a/test/reference/clip-rotate-image-surface-paint.argb32.ref.png b/test/reference/clip-rotate-image-surface-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..1093804
Binary files /dev/null and b/test/reference/clip-rotate-image-surface-paint.argb32.ref.png differ
diff --git a/test/reference/clip-rotate-image-surface-paint.egl.argb32.ref.png b/test/reference/clip-rotate-image-surface-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..7913870
Binary files /dev/null and b/test/reference/clip-rotate-image-surface-paint.egl.argb32.ref.png differ
diff --git a/test/reference/clip-rotate-image-surface-paint.mask.argb32.ref.png b/test/reference/clip-rotate-image-surface-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1093804
Binary files /dev/null and b/test/reference/clip-rotate-image-surface-paint.mask.argb32.ref.png differ
diff --git a/test/reference/clip-rotate-image-surface-paint.mask.rgb24.ref.png b/test/reference/clip-rotate-image-surface-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1093804
Binary files /dev/null and b/test/reference/clip-rotate-image-surface-paint.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-rotate-image-surface-paint.rgb24.ref.png b/test/reference/clip-rotate-image-surface-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1093804
Binary files /dev/null and b/test/reference/clip-rotate-image-surface-paint.rgb24.ref.png differ
diff --git a/test/reference/clip-rotate-image-surface-paint.xlib-fallback.rgb24.ref.png b/test/reference/clip-rotate-image-surface-paint.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1093804
Binary files /dev/null and b/test/reference/clip-rotate-image-surface-paint.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/clip-rotate-image-surface-paint.xlib-window.rgb24.ref.png b/test/reference/clip-rotate-image-surface-paint.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1093804
Binary files /dev/null and b/test/reference/clip-rotate-image-surface-paint.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/clip-shape.argb32.ref.png b/test/reference/clip-shape.argb32.ref.png
new file mode 100644 (file)
index 0000000..8f71b25
Binary files /dev/null and b/test/reference/clip-shape.argb32.ref.png differ
index 8757979..5d79521 100644 (file)
Binary files a/test/reference/clip-shape.base.argb32.ref.png and b/test/reference/clip-shape.base.argb32.ref.png differ
index 8757979..5d79521 100644 (file)
Binary files a/test/reference/clip-shape.base.rgb24.ref.png and b/test/reference/clip-shape.base.rgb24.ref.png differ
diff --git a/test/reference/clip-shape.egl.argb32.ref.png b/test/reference/clip-shape.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a669b3
Binary files /dev/null and b/test/reference/clip-shape.egl.argb32.ref.png differ
diff --git a/test/reference/clip-shape.mask.argb32.ref.png b/test/reference/clip-shape.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..03edf68
Binary files /dev/null and b/test/reference/clip-shape.mask.argb32.ref.png differ
diff --git a/test/reference/clip-shape.mask.rgb24.ref.png b/test/reference/clip-shape.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..03edf68
Binary files /dev/null and b/test/reference/clip-shape.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-shape.rgb24.ref.png b/test/reference/clip-shape.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8f71b25
Binary files /dev/null and b/test/reference/clip-shape.rgb24.ref.png differ
diff --git a/test/reference/clip-stroke-no-op.argb32.ref.png b/test/reference/clip-stroke-no-op.argb32.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-stroke-no-op.argb32.ref.png differ
diff --git a/test/reference/clip-stroke-no-op.egl.argb32.ref.png b/test/reference/clip-stroke-no-op.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..11442ad
Binary files /dev/null and b/test/reference/clip-stroke-no-op.egl.argb32.ref.png differ
diff --git a/test/reference/clip-stroke-no-op.mask.argb32.ref.png b/test/reference/clip-stroke-no-op.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-stroke-no-op.mask.argb32.ref.png differ
diff --git a/test/reference/clip-stroke-no-op.mask.rgb24.ref.png b/test/reference/clip-stroke-no-op.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-stroke-no-op.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-stroke-no-op.rgb24.ref.png b/test/reference/clip-stroke-no-op.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2256461
Binary files /dev/null and b/test/reference/clip-stroke-no-op.rgb24.ref.png differ
index df0ee64..8bf64c1 100644 (file)
Binary files a/test/reference/clip-stroke-unbounded.argb32.ref.png and b/test/reference/clip-stroke-unbounded.argb32.ref.png differ
index aea8cba..de0d589 100644 (file)
Binary files a/test/reference/clip-stroke-unbounded.base.argb32.ref.png and b/test/reference/clip-stroke-unbounded.base.argb32.ref.png differ
index 70cddac..7d204ee 100644 (file)
Binary files a/test/reference/clip-stroke-unbounded.base.rgb24.ref.png and b/test/reference/clip-stroke-unbounded.base.rgb24.ref.png differ
diff --git a/test/reference/clip-stroke-unbounded.mask.argb32.ref.png b/test/reference/clip-stroke-unbounded.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..274feb6
Binary files /dev/null and b/test/reference/clip-stroke-unbounded.mask.argb32.ref.png differ
diff --git a/test/reference/clip-stroke-unbounded.mask.rgb24.ref.png b/test/reference/clip-stroke-unbounded.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a9a8f7b
Binary files /dev/null and b/test/reference/clip-stroke-unbounded.mask.rgb24.ref.png differ
index 7e53e69..2dbe36b 100644 (file)
Binary files a/test/reference/clip-stroke-unbounded.rgb24.ref.png and b/test/reference/clip-stroke-unbounded.rgb24.ref.png differ
index 0a6342d..31ed15e 100644 (file)
Binary files a/test/reference/clip-stroke.base.argb32.ref.png and b/test/reference/clip-stroke.base.argb32.ref.png differ
index 0a6342d..31ed15e 100644 (file)
Binary files a/test/reference/clip-stroke.base.rgb24.ref.png and b/test/reference/clip-stroke.base.rgb24.ref.png differ
diff --git a/test/reference/clip-stroke.egl.argb32.ref.png b/test/reference/clip-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..fd23b28
Binary files /dev/null and b/test/reference/clip-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/clip-stroke.mask.argb32.ref.png b/test/reference/clip-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..afa7fc0
Binary files /dev/null and b/test/reference/clip-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/clip-stroke.mask.rgb24.ref.png b/test/reference/clip-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..afa7fc0
Binary files /dev/null and b/test/reference/clip-stroke.mask.rgb24.ref.png differ
index c40fe63..bf6d888 100644 (file)
Binary files a/test/reference/clip-stroke.ref.png and b/test/reference/clip-stroke.ref.png differ
diff --git a/test/reference/clip-text.argb32.ref.png b/test/reference/clip-text.argb32.ref.png
new file mode 100644 (file)
index 0000000..c4b013d
Binary files /dev/null and b/test/reference/clip-text.argb32.ref.png differ
index eed421f..e2b2ca7 100644 (file)
Binary files a/test/reference/clip-text.base.argb32.ref.png and b/test/reference/clip-text.base.argb32.ref.png differ
index eed421f..e2b2ca7 100644 (file)
Binary files a/test/reference/clip-text.base.rgb24.ref.png and b/test/reference/clip-text.base.rgb24.ref.png differ
diff --git a/test/reference/clip-text.mask.argb32.ref.png b/test/reference/clip-text.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..98484cd
Binary files /dev/null and b/test/reference/clip-text.mask.argb32.ref.png differ
diff --git a/test/reference/clip-text.mask.rgb24.ref.png b/test/reference/clip-text.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..98484cd
Binary files /dev/null and b/test/reference/clip-text.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-text.rgb24.ref.png b/test/reference/clip-text.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c4b013d
Binary files /dev/null and b/test/reference/clip-text.rgb24.ref.png differ
index eed421f..2a68298 100644 (file)
Binary files a/test/reference/clip-text.traps.argb32.ref.png and b/test/reference/clip-text.traps.argb32.ref.png differ
index eed421f..2a68298 100644 (file)
Binary files a/test/reference/clip-text.traps.rgb24.ref.png and b/test/reference/clip-text.traps.rgb24.ref.png differ
diff --git a/test/reference/clip-twice-rectangle.argb32.ref.png b/test/reference/clip-twice-rectangle.argb32.ref.png
new file mode 100644 (file)
index 0000000..d0e65ea
Binary files /dev/null and b/test/reference/clip-twice-rectangle.argb32.ref.png differ
diff --git a/test/reference/clip-twice-rectangle.egl.argb32.ref.png b/test/reference/clip-twice-rectangle.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d0e65ea
Binary files /dev/null and b/test/reference/clip-twice-rectangle.egl.argb32.ref.png differ
diff --git a/test/reference/clip-twice-rectangle.mask.argb32.ref.png b/test/reference/clip-twice-rectangle.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d0e65ea
Binary files /dev/null and b/test/reference/clip-twice-rectangle.mask.argb32.ref.png differ
diff --git a/test/reference/clip-twice-rectangle.mask.rgb24.ref.png b/test/reference/clip-twice-rectangle.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d0e65ea
Binary files /dev/null and b/test/reference/clip-twice-rectangle.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-twice-rectangle.rgb24.ref.png b/test/reference/clip-twice-rectangle.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d0e65ea
Binary files /dev/null and b/test/reference/clip-twice-rectangle.rgb24.ref.png differ
index e0bdf32..877e3db 100644 (file)
Binary files a/test/reference/clip-twice.argb32.ref.png and b/test/reference/clip-twice.argb32.ref.png differ
index ba62180..a3dcca4 100644 (file)
Binary files a/test/reference/clip-twice.base.argb32.ref.png and b/test/reference/clip-twice.base.argb32.ref.png differ
index 9cbdc4d..0c4aaba 100644 (file)
Binary files a/test/reference/clip-twice.base.rgb24.ref.png and b/test/reference/clip-twice.base.rgb24.ref.png differ
diff --git a/test/reference/clip-twice.egl.argb32.ref.png b/test/reference/clip-twice.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8bebef5
Binary files /dev/null and b/test/reference/clip-twice.egl.argb32.ref.png differ
diff --git a/test/reference/clip-twice.mask.argb32.ref.png b/test/reference/clip-twice.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..828dd23
Binary files /dev/null and b/test/reference/clip-twice.mask.argb32.ref.png differ
diff --git a/test/reference/clip-twice.mask.rgb24.ref.png b/test/reference/clip-twice.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8b6baed
Binary files /dev/null and b/test/reference/clip-twice.mask.rgb24.ref.png differ
index 97cb680..325fdff 100644 (file)
Binary files a/test/reference/clip-twice.rgb24.ref.png and b/test/reference/clip-twice.rgb24.ref.png differ
diff --git a/test/reference/clip-unbounded.argb32.ref.png b/test/reference/clip-unbounded.argb32.ref.png
new file mode 100644 (file)
index 0000000..0b65905
Binary files /dev/null and b/test/reference/clip-unbounded.argb32.ref.png differ
diff --git a/test/reference/clip-unbounded.egl.argb32.ref.png b/test/reference/clip-unbounded.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0b65905
Binary files /dev/null and b/test/reference/clip-unbounded.egl.argb32.ref.png differ
diff --git a/test/reference/clip-unbounded.mask.argb32.ref.png b/test/reference/clip-unbounded.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0b65905
Binary files /dev/null and b/test/reference/clip-unbounded.mask.argb32.ref.png differ
diff --git a/test/reference/clip-unbounded.mask.rgb24.ref.png b/test/reference/clip-unbounded.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2baf9f4
Binary files /dev/null and b/test/reference/clip-unbounded.mask.rgb24.ref.png differ
diff --git a/test/reference/clip-xlib-fallback.rgb24.ref.png b/test/reference/clip-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..062c721
Binary files /dev/null and b/test/reference/clip-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/clip-xlib-window.rgb24.ref.png b/test/reference/clip-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..062c721
Binary files /dev/null and b/test/reference/clip-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/clip-xlib.argb32.ref.png b/test/reference/clip-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..062c721
Binary files /dev/null and b/test/reference/clip-xlib.argb32.ref.png differ
diff --git a/test/reference/clip-xlib.rgb24.ref.png b/test/reference/clip-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..062c721
Binary files /dev/null and b/test/reference/clip-xlib.rgb24.ref.png differ
diff --git a/test/reference/clipped-group.argb32.ref.png b/test/reference/clipped-group.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ab8773
Binary files /dev/null and b/test/reference/clipped-group.argb32.ref.png differ
index 9855e61..bea4c75 100644 (file)
Binary files a/test/reference/clipped-group.base.argb32.ref.png and b/test/reference/clipped-group.base.argb32.ref.png differ
index 9855e61..bea4c75 100644 (file)
Binary files a/test/reference/clipped-group.base.rgb24.ref.png and b/test/reference/clipped-group.base.rgb24.ref.png differ
diff --git a/test/reference/clipped-group.egl.argb32.ref.png b/test/reference/clipped-group.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..032ff2f
Binary files /dev/null and b/test/reference/clipped-group.egl.argb32.ref.png differ
diff --git a/test/reference/clipped-group.mask.argb32.ref.png b/test/reference/clipped-group.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..53b149f
Binary files /dev/null and b/test/reference/clipped-group.mask.argb32.ref.png differ
diff --git a/test/reference/clipped-group.mask.rgb24.ref.png b/test/reference/clipped-group.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..53b149f
Binary files /dev/null and b/test/reference/clipped-group.mask.rgb24.ref.png differ
diff --git a/test/reference/clipped-group.rgb24.ref.png b/test/reference/clipped-group.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ab8773
Binary files /dev/null and b/test/reference/clipped-group.rgb24.ref.png differ
diff --git a/test/reference/clipped-surface.argb32.ref.png b/test/reference/clipped-surface.argb32.ref.png
new file mode 100644 (file)
index 0000000..8e8b008
Binary files /dev/null and b/test/reference/clipped-surface.argb32.ref.png differ
diff --git a/test/reference/clipped-surface.egl.argb32.ref.png b/test/reference/clipped-surface.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d1ee90b
Binary files /dev/null and b/test/reference/clipped-surface.egl.argb32.ref.png differ
diff --git a/test/reference/clipped-surface.mask.argb32.ref.png b/test/reference/clipped-surface.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8e8b008
Binary files /dev/null and b/test/reference/clipped-surface.mask.argb32.ref.png differ
diff --git a/test/reference/clipped-surface.mask.rgb24.ref.png b/test/reference/clipped-surface.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8e8b008
Binary files /dev/null and b/test/reference/clipped-surface.mask.rgb24.ref.png differ
diff --git a/test/reference/clipped-surface.rgb24.ref.png b/test/reference/clipped-surface.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8e8b008
Binary files /dev/null and b/test/reference/clipped-surface.rgb24.ref.png differ
diff --git a/test/reference/close-path-current-point.argb32.ref.png b/test/reference/close-path-current-point.argb32.ref.png
new file mode 100644 (file)
index 0000000..ab3124b
Binary files /dev/null and b/test/reference/close-path-current-point.argb32.ref.png differ
diff --git a/test/reference/close-path-current-point.egl.argb32.ref.png b/test/reference/close-path-current-point.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2e5f3da
Binary files /dev/null and b/test/reference/close-path-current-point.egl.argb32.ref.png differ
diff --git a/test/reference/close-path-current-point.mask.argb32.ref.png b/test/reference/close-path-current-point.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ab3124b
Binary files /dev/null and b/test/reference/close-path-current-point.mask.argb32.ref.png differ
diff --git a/test/reference/close-path-current-point.mask.rgb24.ref.png b/test/reference/close-path-current-point.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ab3124b
Binary files /dev/null and b/test/reference/close-path-current-point.mask.rgb24.ref.png differ
diff --git a/test/reference/close-path-current-point.rgb24.ref.png b/test/reference/close-path-current-point.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ab3124b
Binary files /dev/null and b/test/reference/close-path-current-point.rgb24.ref.png differ
diff --git a/test/reference/close-path.argb32.ref.png b/test/reference/close-path.argb32.ref.png
new file mode 100644 (file)
index 0000000..5506ff8
Binary files /dev/null and b/test/reference/close-path.argb32.ref.png differ
diff --git a/test/reference/close-path.egl.argb32.ref.png b/test/reference/close-path.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b61675a
Binary files /dev/null and b/test/reference/close-path.egl.argb32.ref.png differ
diff --git a/test/reference/close-path.mask.argb32.ref.png b/test/reference/close-path.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5506ff8
Binary files /dev/null and b/test/reference/close-path.mask.argb32.ref.png differ
diff --git a/test/reference/close-path.mask.rgb24.ref.png b/test/reference/close-path.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5506ff8
Binary files /dev/null and b/test/reference/close-path.mask.rgb24.ref.png differ
diff --git a/test/reference/close-path.rgb24.ref.png b/test/reference/close-path.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5506ff8
Binary files /dev/null and b/test/reference/close-path.rgb24.ref.png differ
diff --git a/test/reference/composite-integer-translate-over-repeat.argb32.ref.png b/test/reference/composite-integer-translate-over-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..c425749
Binary files /dev/null and b/test/reference/composite-integer-translate-over-repeat.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-over-repeat.egl.argb32.ref.png b/test/reference/composite-integer-translate-over-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c425749
Binary files /dev/null and b/test/reference/composite-integer-translate-over-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-over-repeat.mask.argb32.ref.png b/test/reference/composite-integer-translate-over-repeat.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c425749
Binary files /dev/null and b/test/reference/composite-integer-translate-over-repeat.mask.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-over-repeat.mask.rgb24.ref.png b/test/reference/composite-integer-translate-over-repeat.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c425749
Binary files /dev/null and b/test/reference/composite-integer-translate-over-repeat.mask.rgb24.ref.png differ
diff --git a/test/reference/composite-integer-translate-over-repeat.rgb24.ref.png b/test/reference/composite-integer-translate-over-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c425749
Binary files /dev/null and b/test/reference/composite-integer-translate-over-repeat.rgb24.ref.png differ
diff --git a/test/reference/composite-integer-translate-over.argb32.ref.png b/test/reference/composite-integer-translate-over.argb32.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-over.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-over.egl.argb32.ref.png b/test/reference/composite-integer-translate-over.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0efd275
Binary files /dev/null and b/test/reference/composite-integer-translate-over.egl.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-over.mask.argb32.ref.png b/test/reference/composite-integer-translate-over.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-over.mask.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-over.mask.rgb24.ref.png b/test/reference/composite-integer-translate-over.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-over.mask.rgb24.ref.png differ
diff --git a/test/reference/composite-integer-translate-over.rgb24.ref.png b/test/reference/composite-integer-translate-over.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-over.rgb24.ref.png differ
diff --git a/test/reference/composite-integer-translate-source.argb32.ref.png b/test/reference/composite-integer-translate-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-source.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-source.egl.argb32.ref.png b/test/reference/composite-integer-translate-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0efd275
Binary files /dev/null and b/test/reference/composite-integer-translate-source.egl.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-source.mask.argb32.ref.png b/test/reference/composite-integer-translate-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-source.mask.argb32.ref.png differ
diff --git a/test/reference/composite-integer-translate-source.mask.rgb24.ref.png b/test/reference/composite-integer-translate-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-source.mask.rgb24.ref.png differ
diff --git a/test/reference/composite-integer-translate-source.rgb24.ref.png b/test/reference/composite-integer-translate-source.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7ac3ddf
Binary files /dev/null and b/test/reference/composite-integer-translate-source.rgb24.ref.png differ
diff --git a/test/reference/copy-disjoint.argb32.ref.png b/test/reference/copy-disjoint.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.argb32.ref.png differ
diff --git a/test/reference/copy-disjoint.base.argb32.ref.png b/test/reference/copy-disjoint.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.base.argb32.ref.png differ
diff --git a/test/reference/copy-disjoint.base.rgb24.ref.png b/test/reference/copy-disjoint.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.base.rgb24.ref.png differ
diff --git a/test/reference/copy-disjoint.egl.argb32.ref.png b/test/reference/copy-disjoint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.egl.argb32.ref.png differ
diff --git a/test/reference/copy-disjoint.mask.argb32.ref.png b/test/reference/copy-disjoint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.mask.argb32.ref.png differ
diff --git a/test/reference/copy-disjoint.mask.rgb24.ref.png b/test/reference/copy-disjoint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.mask.rgb24.ref.png differ
diff --git a/test/reference/copy-disjoint.ref.png b/test/reference/copy-disjoint.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.ref.png differ
diff --git a/test/reference/copy-disjoint.rgb24.ref.png b/test/reference/copy-disjoint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.rgb24.ref.png differ
diff --git a/test/reference/copy-disjoint.traps.argb32.ref.png b/test/reference/copy-disjoint.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.traps.argb32.ref.png differ
diff --git a/test/reference/copy-disjoint.traps.rgb24.ref.png b/test/reference/copy-disjoint.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/copy-disjoint.traps.rgb24.ref.png differ
diff --git a/test/reference/copy-path.argb32.ref.png b/test/reference/copy-path.argb32.ref.png
new file mode 100644 (file)
index 0000000..b50e9e4
Binary files /dev/null and b/test/reference/copy-path.argb32.ref.png differ
diff --git a/test/reference/copy-path.egl.argb32.ref.png b/test/reference/copy-path.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1b98fa7
Binary files /dev/null and b/test/reference/copy-path.egl.argb32.ref.png differ
diff --git a/test/reference/copy-path.mask.argb32.ref.png b/test/reference/copy-path.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b50e9e4
Binary files /dev/null and b/test/reference/copy-path.mask.argb32.ref.png differ
diff --git a/test/reference/copy-path.mask.rgb24.ref.png b/test/reference/copy-path.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b50e9e4
Binary files /dev/null and b/test/reference/copy-path.mask.rgb24.ref.png differ
diff --git a/test/reference/copy-path.rgb24.ref.png b/test/reference/copy-path.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b50e9e4
Binary files /dev/null and b/test/reference/copy-path.rgb24.ref.png differ
diff --git a/test/reference/create-from-png-stream.argb32.ref.png b/test/reference/create-from-png-stream.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png-stream.argb32.ref.png differ
diff --git a/test/reference/create-from-png-stream.egl.argb32.ref.png b/test/reference/create-from-png-stream.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a50f4c
Binary files /dev/null and b/test/reference/create-from-png-stream.egl.argb32.ref.png differ
diff --git a/test/reference/create-from-png-stream.mask.argb32.ref.png b/test/reference/create-from-png-stream.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png-stream.mask.argb32.ref.png differ
diff --git a/test/reference/create-from-png-stream.mask.rgb24.ref.png b/test/reference/create-from-png-stream.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png-stream.mask.rgb24.ref.png differ
diff --git a/test/reference/create-from-png-stream.rgb24.ref.png b/test/reference/create-from-png-stream.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png-stream.rgb24.ref.png differ
diff --git a/test/reference/create-from-png.argb32.ref.png b/test/reference/create-from-png.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png.argb32.ref.png differ
diff --git a/test/reference/create-from-png.egl.argb32.ref.png b/test/reference/create-from-png.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..21465ce
Binary files /dev/null and b/test/reference/create-from-png.egl.argb32.ref.png differ
diff --git a/test/reference/create-from-png.mask.argb32.ref.png b/test/reference/create-from-png.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png.mask.argb32.ref.png differ
diff --git a/test/reference/create-from-png.mask.rgb24.ref.png b/test/reference/create-from-png.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png.mask.rgb24.ref.png differ
diff --git a/test/reference/create-from-png.rgb24.ref.png b/test/reference/create-from-png.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png.rgb24.ref.png differ
diff --git a/test/reference/create-from-png.traps.argb32.ref.png b/test/reference/create-from-png.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png.traps.argb32.ref.png differ
diff --git a/test/reference/create-from-png.traps.rgb24.ref.png b/test/reference/create-from-png.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/create-from-png.traps.rgb24.ref.png differ
diff --git a/test/reference/culled-glyphs.argb32.ref.png b/test/reference/culled-glyphs.argb32.ref.png
new file mode 100644 (file)
index 0000000..6701295
Binary files /dev/null and b/test/reference/culled-glyphs.argb32.ref.png differ
index 08aad33..6701295 100644 (file)
Binary files a/test/reference/culled-glyphs.base.argb32.ref.png and b/test/reference/culled-glyphs.base.argb32.ref.png differ
index 08aad33..6701295 100644 (file)
Binary files a/test/reference/culled-glyphs.base.rgb24.ref.png and b/test/reference/culled-glyphs.base.rgb24.ref.png differ
diff --git a/test/reference/culled-glyphs.mask.argb32.ref.png b/test/reference/culled-glyphs.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6701295
Binary files /dev/null and b/test/reference/culled-glyphs.mask.argb32.ref.png differ
diff --git a/test/reference/culled-glyphs.mask.rgb24.ref.png b/test/reference/culled-glyphs.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6701295
Binary files /dev/null and b/test/reference/culled-glyphs.mask.rgb24.ref.png differ
diff --git a/test/reference/culled-glyphs.rgb24.ref.png b/test/reference/culled-glyphs.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6701295
Binary files /dev/null and b/test/reference/culled-glyphs.rgb24.ref.png differ
index 08aad33..6701295 100644 (file)
Binary files a/test/reference/culled-glyphs.traps.argb32.ref.png and b/test/reference/culled-glyphs.traps.argb32.ref.png differ
index 08aad33..6701295 100644 (file)
Binary files a/test/reference/culled-glyphs.traps.rgb24.ref.png and b/test/reference/culled-glyphs.traps.rgb24.ref.png differ
diff --git a/test/reference/curve-to-as-line-to.argb32.ref.png b/test/reference/curve-to-as-line-to.argb32.ref.png
new file mode 100644 (file)
index 0000000..d241183
Binary files /dev/null and b/test/reference/curve-to-as-line-to.argb32.ref.png differ
diff --git a/test/reference/curve-to-as-line-to.egl.argb32.ref.png b/test/reference/curve-to-as-line-to.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d241183
Binary files /dev/null and b/test/reference/curve-to-as-line-to.egl.argb32.ref.png differ
diff --git a/test/reference/curve-to-as-line-to.mask.argb32.ref.png b/test/reference/curve-to-as-line-to.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d241183
Binary files /dev/null and b/test/reference/curve-to-as-line-to.mask.argb32.ref.png differ
diff --git a/test/reference/curve-to-as-line-to.mask.rgb24.ref.png b/test/reference/curve-to-as-line-to.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d241183
Binary files /dev/null and b/test/reference/curve-to-as-line-to.mask.rgb24.ref.png differ
diff --git a/test/reference/curve-to-as-line-to.rgb24.ref.png b/test/reference/curve-to-as-line-to.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d241183
Binary files /dev/null and b/test/reference/curve-to-as-line-to.rgb24.ref.png differ
diff --git a/test/reference/dash-caps-joins.argb32.ref.png b/test/reference/dash-caps-joins.argb32.ref.png
new file mode 100644 (file)
index 0000000..b09b86f
Binary files /dev/null and b/test/reference/dash-caps-joins.argb32.ref.png differ
diff --git a/test/reference/dash-caps-joins.egl.argb32.ref.png b/test/reference/dash-caps-joins.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0bc97c7
Binary files /dev/null and b/test/reference/dash-caps-joins.egl.argb32.ref.png differ
diff --git a/test/reference/dash-caps-joins.mask.argb32.ref.png b/test/reference/dash-caps-joins.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b09b86f
Binary files /dev/null and b/test/reference/dash-caps-joins.mask.argb32.ref.png differ
diff --git a/test/reference/dash-caps-joins.mask.rgb24.ref.png b/test/reference/dash-caps-joins.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b09b86f
Binary files /dev/null and b/test/reference/dash-caps-joins.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-caps-joins.rgb24.ref.png b/test/reference/dash-caps-joins.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b09b86f
Binary files /dev/null and b/test/reference/dash-caps-joins.rgb24.ref.png differ
diff --git a/test/reference/dash-curve.argb32.ref.png b/test/reference/dash-curve.argb32.ref.png
new file mode 100644 (file)
index 0000000..8bebde2
Binary files /dev/null and b/test/reference/dash-curve.argb32.ref.png differ
diff --git a/test/reference/dash-curve.egl.argb32.ref.png b/test/reference/dash-curve.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a4659f
Binary files /dev/null and b/test/reference/dash-curve.egl.argb32.ref.png differ
diff --git a/test/reference/dash-curve.mask.argb32.ref.png b/test/reference/dash-curve.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8bebde2
Binary files /dev/null and b/test/reference/dash-curve.mask.argb32.ref.png differ
diff --git a/test/reference/dash-curve.mask.rgb24.ref.png b/test/reference/dash-curve.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8bebde2
Binary files /dev/null and b/test/reference/dash-curve.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-curve.rgb24.ref.png b/test/reference/dash-curve.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8bebde2
Binary files /dev/null and b/test/reference/dash-curve.rgb24.ref.png differ
diff --git a/test/reference/dash-infinite-loop.argb32.ref.png b/test/reference/dash-infinite-loop.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ae1717
Binary files /dev/null and b/test/reference/dash-infinite-loop.argb32.ref.png differ
diff --git a/test/reference/dash-infinite-loop.egl.argb32.ref.png b/test/reference/dash-infinite-loop.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4e6973d
Binary files /dev/null and b/test/reference/dash-infinite-loop.egl.argb32.ref.png differ
diff --git a/test/reference/dash-infinite-loop.mask.argb32.ref.png b/test/reference/dash-infinite-loop.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ae1717
Binary files /dev/null and b/test/reference/dash-infinite-loop.mask.argb32.ref.png differ
diff --git a/test/reference/dash-infinite-loop.mask.rgb24.ref.png b/test/reference/dash-infinite-loop.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2ae1717
Binary files /dev/null and b/test/reference/dash-infinite-loop.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-infinite-loop.rgb24.ref.png b/test/reference/dash-infinite-loop.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2ae1717
Binary files /dev/null and b/test/reference/dash-infinite-loop.rgb24.ref.png differ
diff --git a/test/reference/dash-no-dash.argb32.ref.png b/test/reference/dash-no-dash.argb32.ref.png
new file mode 100644 (file)
index 0000000..c150a4f
Binary files /dev/null and b/test/reference/dash-no-dash.argb32.ref.png differ
diff --git a/test/reference/dash-no-dash.egl.argb32.ref.png b/test/reference/dash-no-dash.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c150a4f
Binary files /dev/null and b/test/reference/dash-no-dash.egl.argb32.ref.png differ
diff --git a/test/reference/dash-no-dash.mask.argb32.ref.png b/test/reference/dash-no-dash.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c150a4f
Binary files /dev/null and b/test/reference/dash-no-dash.mask.argb32.ref.png differ
diff --git a/test/reference/dash-no-dash.mask.rgb24.ref.png b/test/reference/dash-no-dash.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c150a4f
Binary files /dev/null and b/test/reference/dash-no-dash.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-no-dash.rgb24.ref.png b/test/reference/dash-no-dash.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c150a4f
Binary files /dev/null and b/test/reference/dash-no-dash.rgb24.ref.png differ
diff --git a/test/reference/dash-offset-negative.argb32.ref.png b/test/reference/dash-offset-negative.argb32.ref.png
new file mode 100644 (file)
index 0000000..df22d08
Binary files /dev/null and b/test/reference/dash-offset-negative.argb32.ref.png differ
diff --git a/test/reference/dash-offset-negative.egl.argb32.ref.png b/test/reference/dash-offset-negative.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..df22d08
Binary files /dev/null and b/test/reference/dash-offset-negative.egl.argb32.ref.png differ
diff --git a/test/reference/dash-offset-negative.mask.argb32.ref.png b/test/reference/dash-offset-negative.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..df22d08
Binary files /dev/null and b/test/reference/dash-offset-negative.mask.argb32.ref.png differ
diff --git a/test/reference/dash-offset-negative.mask.rgb24.ref.png b/test/reference/dash-offset-negative.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..df22d08
Binary files /dev/null and b/test/reference/dash-offset-negative.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-offset-negative.rgb24.ref.png b/test/reference/dash-offset-negative.rgb24.ref.png
new file mode 100644 (file)
index 0000000..df22d08
Binary files /dev/null and b/test/reference/dash-offset-negative.rgb24.ref.png differ
diff --git a/test/reference/dash-offset.argb32.ref.png b/test/reference/dash-offset.argb32.ref.png
new file mode 100644 (file)
index 0000000..52600c4
Binary files /dev/null and b/test/reference/dash-offset.argb32.ref.png differ
diff --git a/test/reference/dash-offset.egl.argb32.ref.png b/test/reference/dash-offset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..52600c4
Binary files /dev/null and b/test/reference/dash-offset.egl.argb32.ref.png differ
diff --git a/test/reference/dash-offset.mask.argb32.ref.png b/test/reference/dash-offset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..52600c4
Binary files /dev/null and b/test/reference/dash-offset.mask.argb32.ref.png differ
diff --git a/test/reference/dash-offset.mask.rgb24.ref.png b/test/reference/dash-offset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..52600c4
Binary files /dev/null and b/test/reference/dash-offset.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-offset.rgb24.ref.png b/test/reference/dash-offset.rgb24.ref.png
new file mode 100644 (file)
index 0000000..52600c4
Binary files /dev/null and b/test/reference/dash-offset.rgb24.ref.png differ
diff --git a/test/reference/dash-scale.argb32.ref.png b/test/reference/dash-scale.argb32.ref.png
new file mode 100644 (file)
index 0000000..deef9dc
Binary files /dev/null and b/test/reference/dash-scale.argb32.ref.png differ
diff --git a/test/reference/dash-scale.egl.argb32.ref.png b/test/reference/dash-scale.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..61d7bb8
Binary files /dev/null and b/test/reference/dash-scale.egl.argb32.ref.png differ
diff --git a/test/reference/dash-scale.mask.argb32.ref.png b/test/reference/dash-scale.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..deef9dc
Binary files /dev/null and b/test/reference/dash-scale.mask.argb32.ref.png differ
diff --git a/test/reference/dash-scale.mask.rgb24.ref.png b/test/reference/dash-scale.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..deef9dc
Binary files /dev/null and b/test/reference/dash-scale.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-scale.rgb24.ref.png b/test/reference/dash-scale.rgb24.ref.png
new file mode 100644 (file)
index 0000000..deef9dc
Binary files /dev/null and b/test/reference/dash-scale.rgb24.ref.png differ
diff --git a/test/reference/dash-state.argb32.ref.png b/test/reference/dash-state.argb32.ref.png
new file mode 100644 (file)
index 0000000..31551cf
Binary files /dev/null and b/test/reference/dash-state.argb32.ref.png differ
diff --git a/test/reference/dash-state.egl.argb32.ref.png b/test/reference/dash-state.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..de99b14
Binary files /dev/null and b/test/reference/dash-state.egl.argb32.ref.png differ
diff --git a/test/reference/dash-state.mask.argb32.ref.png b/test/reference/dash-state.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..31551cf
Binary files /dev/null and b/test/reference/dash-state.mask.argb32.ref.png differ
diff --git a/test/reference/dash-state.mask.rgb24.ref.png b/test/reference/dash-state.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..31551cf
Binary files /dev/null and b/test/reference/dash-state.mask.rgb24.ref.png differ
diff --git a/test/reference/dash-state.rgb24.ref.png b/test/reference/dash-state.rgb24.ref.png
new file mode 100644 (file)
index 0000000..31551cf
Binary files /dev/null and b/test/reference/dash-state.rgb24.ref.png differ
diff --git a/test/reference/dash-zero-length.argb32.ref.png b/test/reference/dash-zero-length.argb32.ref.png
new file mode 100644 (file)
index 0000000..fdc5f5e
Binary files /dev/null and b/test/reference/dash-zero-length.argb32.ref.png differ
diff --git a/test/reference/dash-zero-length.egl.argb32.ref.png b/test/reference/dash-zero-length.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4d61657
Binary files /dev/null and b/test/reference/dash-zero-length.egl.argb32.ref.png differ
diff --git a/test/reference/dash-zero-length.mask.argb32.ref.png b/test/reference/dash-zero-length.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..fdc5f5e
Binary files /dev/null and b/test/reference/dash-zero-length.mask.argb32.ref.png differ
diff --git a/test/reference/dash-zero-length.mask.rgb24.ref.png b/test/reference/dash-zero-length.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b14bd8d
Binary files /dev/null and b/test/reference/dash-zero-length.mask.rgb24.ref.png differ
index 74d5df2..b14bd8d 100644 (file)
Binary files a/test/reference/dash-zero-length.rgb24.ref.png and b/test/reference/dash-zero-length.rgb24.ref.png differ
diff --git a/test/reference/degenerate-arc.egl.argb32.ref.png b/test/reference/degenerate-arc.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bb425ff
Binary files /dev/null and b/test/reference/degenerate-arc.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-arc.mask.argb32.ref.png b/test/reference/degenerate-arc.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4da4fd6
Binary files /dev/null and b/test/reference/degenerate-arc.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-arc.mask.rgb24.ref.png b/test/reference/degenerate-arc.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4da4fd6
Binary files /dev/null and b/test/reference/degenerate-arc.mask.rgb24.ref.png differ
index 6bcfb8b..d83e2c7 100644 (file)
Binary files a/test/reference/degenerate-arc.ref.png and b/test/reference/degenerate-arc.ref.png differ
diff --git a/test/reference/degenerate-arcs.argb32.ref.png b/test/reference/degenerate-arcs.argb32.ref.png
new file mode 100644 (file)
index 0000000..fc1869d
Binary files /dev/null and b/test/reference/degenerate-arcs.argb32.ref.png differ
diff --git a/test/reference/degenerate-arcs.egl.argb32.ref.png b/test/reference/degenerate-arcs.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a80a3ef
Binary files /dev/null and b/test/reference/degenerate-arcs.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-arcs.mask.argb32.ref.png b/test/reference/degenerate-arcs.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..fc1869d
Binary files /dev/null and b/test/reference/degenerate-arcs.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-arcs.mask.rgb24.ref.png b/test/reference/degenerate-arcs.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fc1869d
Binary files /dev/null and b/test/reference/degenerate-arcs.mask.rgb24.ref.png differ
diff --git a/test/reference/degenerate-arcs.rgb24.ref.png b/test/reference/degenerate-arcs.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fc1869d
Binary files /dev/null and b/test/reference/degenerate-arcs.rgb24.ref.png differ
diff --git a/test/reference/degenerate-curve-to.argb32.ref.png b/test/reference/degenerate-curve-to.argb32.ref.png
new file mode 100644 (file)
index 0000000..18ab11e
Binary files /dev/null and b/test/reference/degenerate-curve-to.argb32.ref.png differ
diff --git a/test/reference/degenerate-curve-to.egl.argb32.ref.png b/test/reference/degenerate-curve-to.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..18ab11e
Binary files /dev/null and b/test/reference/degenerate-curve-to.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-curve-to.mask.argb32.ref.png b/test/reference/degenerate-curve-to.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..18ab11e
Binary files /dev/null and b/test/reference/degenerate-curve-to.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-curve-to.mask.rgb24.ref.png b/test/reference/degenerate-curve-to.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..18ab11e
Binary files /dev/null and b/test/reference/degenerate-curve-to.mask.rgb24.ref.png differ
diff --git a/test/reference/degenerate-curve-to.rgb24.ref.png b/test/reference/degenerate-curve-to.rgb24.ref.png
new file mode 100644 (file)
index 0000000..18ab11e
Binary files /dev/null and b/test/reference/degenerate-curve-to.rgb24.ref.png differ
diff --git a/test/reference/degenerate-dash.argb32.ref.png b/test/reference/degenerate-dash.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ddfc8b
Binary files /dev/null and b/test/reference/degenerate-dash.argb32.ref.png differ
diff --git a/test/reference/degenerate-dash.egl.argb32.ref.png b/test/reference/degenerate-dash.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..eba9966
Binary files /dev/null and b/test/reference/degenerate-dash.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-dash.mask.argb32.ref.png b/test/reference/degenerate-dash.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ddfc8b
Binary files /dev/null and b/test/reference/degenerate-dash.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-dash.mask.rgb24.ref.png b/test/reference/degenerate-dash.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2ddfc8b
Binary files /dev/null and b/test/reference/degenerate-dash.mask.rgb24.ref.png differ
diff --git a/test/reference/degenerate-dash.rgb24.ref.png b/test/reference/degenerate-dash.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2ddfc8b
Binary files /dev/null and b/test/reference/degenerate-dash.rgb24.ref.png differ
diff --git a/test/reference/degenerate-linear-gradient.argb32.ref.png b/test/reference/degenerate-linear-gradient.argb32.ref.png
new file mode 100644 (file)
index 0000000..ceed48a
Binary files /dev/null and b/test/reference/degenerate-linear-gradient.argb32.ref.png differ
diff --git a/test/reference/degenerate-linear-gradient.egl.argb32.ref.png b/test/reference/degenerate-linear-gradient.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d0a838c
Binary files /dev/null and b/test/reference/degenerate-linear-gradient.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-linear-gradient.mask.argb32.ref.png b/test/reference/degenerate-linear-gradient.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ceed48a
Binary files /dev/null and b/test/reference/degenerate-linear-gradient.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-linear-gradient.mask.rgb24.ref.png b/test/reference/degenerate-linear-gradient.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ceed48a
Binary files /dev/null and b/test/reference/degenerate-linear-gradient.mask.rgb24.ref.png differ
diff --git a/test/reference/degenerate-linear-gradient.rgb24.ref.png b/test/reference/degenerate-linear-gradient.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ceed48a
Binary files /dev/null and b/test/reference/degenerate-linear-gradient.rgb24.ref.png differ
index 5078b8a..0459397 100644 (file)
Binary files a/test/reference/degenerate-path.argb32.ref.png and b/test/reference/degenerate-path.argb32.ref.png differ
diff --git a/test/reference/degenerate-path.egl.argb32.ref.png b/test/reference/degenerate-path.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0459397
Binary files /dev/null and b/test/reference/degenerate-path.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-path.mask.argb32.ref.png b/test/reference/degenerate-path.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0459397
Binary files /dev/null and b/test/reference/degenerate-path.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-path.mask.rgb24.ref.png b/test/reference/degenerate-path.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..07fda63
Binary files /dev/null and b/test/reference/degenerate-path.mask.rgb24.ref.png differ
index d25513a..07fda63 100644 (file)
Binary files a/test/reference/degenerate-path.rgb24.ref.png and b/test/reference/degenerate-path.rgb24.ref.png differ
diff --git a/test/reference/degenerate-pen.argb32.ref.png b/test/reference/degenerate-pen.argb32.ref.png
new file mode 100644 (file)
index 0000000..ea65d22
Binary files /dev/null and b/test/reference/degenerate-pen.argb32.ref.png differ
diff --git a/test/reference/degenerate-pen.egl.argb32.ref.png b/test/reference/degenerate-pen.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..84b3b4e
Binary files /dev/null and b/test/reference/degenerate-pen.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-pen.mask.argb32.ref.png b/test/reference/degenerate-pen.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ea65d22
Binary files /dev/null and b/test/reference/degenerate-pen.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-pen.mask.rgb24.ref.png b/test/reference/degenerate-pen.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ea65d22
Binary files /dev/null and b/test/reference/degenerate-pen.mask.rgb24.ref.png differ
diff --git a/test/reference/degenerate-pen.rgb24.ref.png b/test/reference/degenerate-pen.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ea65d22
Binary files /dev/null and b/test/reference/degenerate-pen.rgb24.ref.png differ
diff --git a/test/reference/degenerate-radial-gradient.argb32.ref.png b/test/reference/degenerate-radial-gradient.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a5213b
Binary files /dev/null and b/test/reference/degenerate-radial-gradient.argb32.ref.png differ
diff --git a/test/reference/degenerate-radial-gradient.egl.argb32.ref.png b/test/reference/degenerate-radial-gradient.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a5213b
Binary files /dev/null and b/test/reference/degenerate-radial-gradient.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-radial-gradient.mask.argb32.ref.png b/test/reference/degenerate-radial-gradient.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a5213b
Binary files /dev/null and b/test/reference/degenerate-radial-gradient.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-radial-gradient.mask.rgb24.ref.png b/test/reference/degenerate-radial-gradient.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9a5213b
Binary files /dev/null and b/test/reference/degenerate-radial-gradient.mask.rgb24.ref.png differ
diff --git a/test/reference/degenerate-radial-gradient.rgb24.ref.png b/test/reference/degenerate-radial-gradient.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9a5213b
Binary files /dev/null and b/test/reference/degenerate-radial-gradient.rgb24.ref.png differ
diff --git a/test/reference/degenerate-rel-curve-to.argb32.ref.png b/test/reference/degenerate-rel-curve-to.argb32.ref.png
new file mode 100644 (file)
index 0000000..c4293ad
Binary files /dev/null and b/test/reference/degenerate-rel-curve-to.argb32.ref.png differ
diff --git a/test/reference/degenerate-rel-curve-to.egl.argb32.ref.png b/test/reference/degenerate-rel-curve-to.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c4293ad
Binary files /dev/null and b/test/reference/degenerate-rel-curve-to.egl.argb32.ref.png differ
diff --git a/test/reference/degenerate-rel-curve-to.mask.argb32.ref.png b/test/reference/degenerate-rel-curve-to.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c4293ad
Binary files /dev/null and b/test/reference/degenerate-rel-curve-to.mask.argb32.ref.png differ
diff --git a/test/reference/degenerate-rel-curve-to.mask.rgb24.ref.png b/test/reference/degenerate-rel-curve-to.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c4293ad
Binary files /dev/null and b/test/reference/degenerate-rel-curve-to.mask.rgb24.ref.png differ
diff --git a/test/reference/degenerate-rel-curve-to.rgb24.ref.png b/test/reference/degenerate-rel-curve-to.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c4293ad
Binary files /dev/null and b/test/reference/degenerate-rel-curve-to.rgb24.ref.png differ
diff --git a/test/reference/degenerate-solid-dash.ref.png b/test/reference/degenerate-solid-dash.ref.png
new file mode 100644 (file)
index 0000000..9511289
Binary files /dev/null and b/test/reference/degenerate-solid-dash.ref.png differ
diff --git a/test/reference/device-offset-fractional.argb32.ref.png b/test/reference/device-offset-fractional.argb32.ref.png
new file mode 100644 (file)
index 0000000..b1eef5f
Binary files /dev/null and b/test/reference/device-offset-fractional.argb32.ref.png differ
diff --git a/test/reference/device-offset-fractional.egl.argb32.ref.png b/test/reference/device-offset-fractional.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..62ca7f6
Binary files /dev/null and b/test/reference/device-offset-fractional.egl.argb32.ref.png differ
diff --git a/test/reference/device-offset-fractional.mask.argb32.ref.png b/test/reference/device-offset-fractional.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b1eef5f
Binary files /dev/null and b/test/reference/device-offset-fractional.mask.argb32.ref.png differ
diff --git a/test/reference/device-offset-fractional.mask.rgb24.ref.png b/test/reference/device-offset-fractional.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b1eef5f
Binary files /dev/null and b/test/reference/device-offset-fractional.mask.rgb24.ref.png differ
diff --git a/test/reference/device-offset-fractional.rgb24.ref.png b/test/reference/device-offset-fractional.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b1eef5f
Binary files /dev/null and b/test/reference/device-offset-fractional.rgb24.ref.png differ
diff --git a/test/reference/device-offset-positive.argb32.ref.png b/test/reference/device-offset-positive.argb32.ref.png
new file mode 100644 (file)
index 0000000..1115bca
Binary files /dev/null and b/test/reference/device-offset-positive.argb32.ref.png differ
diff --git a/test/reference/device-offset-positive.egl.argb32.ref.png b/test/reference/device-offset-positive.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1115bca
Binary files /dev/null and b/test/reference/device-offset-positive.egl.argb32.ref.png differ
diff --git a/test/reference/device-offset-positive.mask.argb32.ref.png b/test/reference/device-offset-positive.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1115bca
Binary files /dev/null and b/test/reference/device-offset-positive.mask.argb32.ref.png differ
diff --git a/test/reference/device-offset-positive.mask.rgb24.ref.png b/test/reference/device-offset-positive.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dcdd332
Binary files /dev/null and b/test/reference/device-offset-positive.mask.rgb24.ref.png differ
index 3281f49..dcdd332 100644 (file)
Binary files a/test/reference/device-offset-positive.rgb24.ref.png and b/test/reference/device-offset-positive.rgb24.ref.png differ
diff --git a/test/reference/device-offset-scale.argb32.ref.png b/test/reference/device-offset-scale.argb32.ref.png
new file mode 100644 (file)
index 0000000..fdffbf3
Binary files /dev/null and b/test/reference/device-offset-scale.argb32.ref.png differ
diff --git a/test/reference/device-offset-scale.egl.argb32.ref.png b/test/reference/device-offset-scale.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..30b0075
Binary files /dev/null and b/test/reference/device-offset-scale.egl.argb32.ref.png differ
diff --git a/test/reference/device-offset-scale.mask.argb32.ref.png b/test/reference/device-offset-scale.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..fdffbf3
Binary files /dev/null and b/test/reference/device-offset-scale.mask.argb32.ref.png differ
diff --git a/test/reference/device-offset-scale.mask.rgb24.ref.png b/test/reference/device-offset-scale.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fdffbf3
Binary files /dev/null and b/test/reference/device-offset-scale.mask.rgb24.ref.png differ
diff --git a/test/reference/device-offset-scale.rgb24.ref.png b/test/reference/device-offset-scale.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fdffbf3
Binary files /dev/null and b/test/reference/device-offset-scale.rgb24.ref.png differ
diff --git a/test/reference/device-offset.argb32.ref.png b/test/reference/device-offset.argb32.ref.png
new file mode 100644 (file)
index 0000000..43ced46
Binary files /dev/null and b/test/reference/device-offset.argb32.ref.png differ
diff --git a/test/reference/device-offset.egl.argb32.ref.png b/test/reference/device-offset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..43ced46
Binary files /dev/null and b/test/reference/device-offset.egl.argb32.ref.png differ
diff --git a/test/reference/device-offset.mask.argb32.ref.png b/test/reference/device-offset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..43ced46
Binary files /dev/null and b/test/reference/device-offset.mask.argb32.ref.png differ
diff --git a/test/reference/device-offset.mask.rgb24.ref.png b/test/reference/device-offset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f19acba
Binary files /dev/null and b/test/reference/device-offset.mask.rgb24.ref.png differ
index 634388f..f19acba 100644 (file)
Binary files a/test/reference/device-offset.rgb24.ref.png and b/test/reference/device-offset.rgb24.ref.png differ
diff --git a/test/reference/drunkard-tails.argb32.ref.png b/test/reference/drunkard-tails.argb32.ref.png
new file mode 100644 (file)
index 0000000..053e470
Binary files /dev/null and b/test/reference/drunkard-tails.argb32.ref.png differ
diff --git a/test/reference/drunkard-tails.egl.argb32.ref.png b/test/reference/drunkard-tails.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6061af7
Binary files /dev/null and b/test/reference/drunkard-tails.egl.argb32.ref.png differ
diff --git a/test/reference/drunkard-tails.mask.argb32.ref.png b/test/reference/drunkard-tails.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..053e470
Binary files /dev/null and b/test/reference/drunkard-tails.mask.argb32.ref.png differ
diff --git a/test/reference/drunkard-tails.mask.rgb24.ref.png b/test/reference/drunkard-tails.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..053e470
Binary files /dev/null and b/test/reference/drunkard-tails.mask.rgb24.ref.png differ
diff --git a/test/reference/drunkard-tails.rgb24.ref.png b/test/reference/drunkard-tails.rgb24.ref.png
new file mode 100644 (file)
index 0000000..053e470
Binary files /dev/null and b/test/reference/drunkard-tails.rgb24.ref.png differ
diff --git a/test/reference/extend-pad-border.argb32.ref.png b/test/reference/extend-pad-border.argb32.ref.png
new file mode 100644 (file)
index 0000000..f4fc524
Binary files /dev/null and b/test/reference/extend-pad-border.argb32.ref.png differ
diff --git a/test/reference/extend-pad-border.egl.argb32.ref.png b/test/reference/extend-pad-border.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4c39d9a
Binary files /dev/null and b/test/reference/extend-pad-border.egl.argb32.ref.png differ
diff --git a/test/reference/extend-pad-border.mask.argb32.ref.png b/test/reference/extend-pad-border.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f4fc524
Binary files /dev/null and b/test/reference/extend-pad-border.mask.argb32.ref.png differ
diff --git a/test/reference/extend-pad-border.mask.rgb24.ref.png b/test/reference/extend-pad-border.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f4fc524
Binary files /dev/null and b/test/reference/extend-pad-border.mask.rgb24.ref.png differ
diff --git a/test/reference/extend-pad-border.rgb24.ref.png b/test/reference/extend-pad-border.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f4fc524
Binary files /dev/null and b/test/reference/extend-pad-border.rgb24.ref.png differ
diff --git a/test/reference/extend-pad-similar.argb32.ref.png b/test/reference/extend-pad-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad-similar.argb32.ref.png differ
diff --git a/test/reference/extend-pad-similar.egl.argb32.ref.png b/test/reference/extend-pad-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad-similar.egl.argb32.ref.png differ
diff --git a/test/reference/extend-pad-similar.mask.argb32.ref.png b/test/reference/extend-pad-similar.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad-similar.mask.argb32.ref.png differ
diff --git a/test/reference/extend-pad-similar.mask.rgb24.ref.png b/test/reference/extend-pad-similar.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad-similar.mask.rgb24.ref.png differ
diff --git a/test/reference/extend-pad-similar.rgb24.ref.png b/test/reference/extend-pad-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad-similar.rgb24.ref.png differ
diff --git a/test/reference/extend-pad.argb32.ref.png b/test/reference/extend-pad.argb32.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad.argb32.ref.png differ
diff --git a/test/reference/extend-pad.egl.argb32.ref.png b/test/reference/extend-pad.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad.egl.argb32.ref.png differ
diff --git a/test/reference/extend-pad.mask.argb32.ref.png b/test/reference/extend-pad.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad.mask.argb32.ref.png differ
diff --git a/test/reference/extend-pad.mask.rgb24.ref.png b/test/reference/extend-pad.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad.mask.rgb24.ref.png differ
diff --git a/test/reference/extend-pad.rgb24.ref.png b/test/reference/extend-pad.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9345221
Binary files /dev/null and b/test/reference/extend-pad.rgb24.ref.png differ
diff --git a/test/reference/extend-reflect-similar.argb32.ref.png b/test/reference/extend-reflect-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect-similar.argb32.ref.png differ
diff --git a/test/reference/extend-reflect-similar.egl.argb32.ref.png b/test/reference/extend-reflect-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c6ece9a
Binary files /dev/null and b/test/reference/extend-reflect-similar.egl.argb32.ref.png differ
diff --git a/test/reference/extend-reflect-similar.mask.argb32.ref.png b/test/reference/extend-reflect-similar.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect-similar.mask.argb32.ref.png differ
diff --git a/test/reference/extend-reflect-similar.mask.rgb24.ref.png b/test/reference/extend-reflect-similar.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect-similar.mask.rgb24.ref.png differ
diff --git a/test/reference/extend-reflect-similar.rgb24.ref.png b/test/reference/extend-reflect-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect-similar.rgb24.ref.png differ
diff --git a/test/reference/extend-reflect.argb32.ref.png b/test/reference/extend-reflect.argb32.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect.argb32.ref.png differ
diff --git a/test/reference/extend-reflect.egl.argb32.ref.png b/test/reference/extend-reflect.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f308426
Binary files /dev/null and b/test/reference/extend-reflect.egl.argb32.ref.png differ
diff --git a/test/reference/extend-reflect.mask.argb32.ref.png b/test/reference/extend-reflect.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect.mask.argb32.ref.png differ
diff --git a/test/reference/extend-reflect.mask.rgb24.ref.png b/test/reference/extend-reflect.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect.mask.rgb24.ref.png differ
diff --git a/test/reference/extend-reflect.rgb24.ref.png b/test/reference/extend-reflect.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5fc3448
Binary files /dev/null and b/test/reference/extend-reflect.rgb24.ref.png differ
diff --git a/test/reference/extend-repeat-similar.argb32.ref.png b/test/reference/extend-repeat-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat-similar.argb32.ref.png differ
diff --git a/test/reference/extend-repeat-similar.egl.argb32.ref.png b/test/reference/extend-repeat-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c6ece9a
Binary files /dev/null and b/test/reference/extend-repeat-similar.egl.argb32.ref.png differ
diff --git a/test/reference/extend-repeat-similar.mask.argb32.ref.png b/test/reference/extend-repeat-similar.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat-similar.mask.argb32.ref.png differ
diff --git a/test/reference/extend-repeat-similar.mask.rgb24.ref.png b/test/reference/extend-repeat-similar.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat-similar.mask.rgb24.ref.png differ
diff --git a/test/reference/extend-repeat-similar.rgb24.ref.png b/test/reference/extend-repeat-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat-similar.rgb24.ref.png differ
diff --git a/test/reference/extend-repeat.argb32.ref.png b/test/reference/extend-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat.argb32.ref.png differ
diff --git a/test/reference/extend-repeat.egl.argb32.ref.png b/test/reference/extend-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b4cc92e
Binary files /dev/null and b/test/reference/extend-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/extend-repeat.mask.argb32.ref.png b/test/reference/extend-repeat.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat.mask.argb32.ref.png differ
diff --git a/test/reference/extend-repeat.mask.rgb24.ref.png b/test/reference/extend-repeat.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat.mask.rgb24.ref.png differ
diff --git a/test/reference/extend-repeat.rgb24.ref.png b/test/reference/extend-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..81f0503
Binary files /dev/null and b/test/reference/extend-repeat.rgb24.ref.png differ
diff --git a/test/reference/extended-blend-alpha-mask.egl.argb32.ref.png b/test/reference/extended-blend-alpha-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b3ff319
Binary files /dev/null and b/test/reference/extended-blend-alpha-mask.egl.argb32.ref.png differ
diff --git a/test/reference/extended-blend-alpha-mask.mask.argb32.ref.png b/test/reference/extended-blend-alpha-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a1dd2a9
Binary files /dev/null and b/test/reference/extended-blend-alpha-mask.mask.argb32.ref.png differ
diff --git a/test/reference/extended-blend-alpha-mask.mask.rgb24.ref.png b/test/reference/extended-blend-alpha-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b5f12f1
Binary files /dev/null and b/test/reference/extended-blend-alpha-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/extended-blend-alpha.egl.argb32.ref.png b/test/reference/extended-blend-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..cc8bf77
Binary files /dev/null and b/test/reference/extended-blend-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/extended-blend-alpha.mask.argb32.ref.png b/test/reference/extended-blend-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4d56a21
Binary files /dev/null and b/test/reference/extended-blend-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/extended-blend-alpha.mask.rgb24.ref.png b/test/reference/extended-blend-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..86d0e2d
Binary files /dev/null and b/test/reference/extended-blend-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/extended-blend-mask.egl.argb32.ref.png b/test/reference/extended-blend-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b575e9c
Binary files /dev/null and b/test/reference/extended-blend-mask.egl.argb32.ref.png differ
diff --git a/test/reference/extended-blend-mask.mask.argb32.ref.png b/test/reference/extended-blend-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5fa78e4
Binary files /dev/null and b/test/reference/extended-blend-mask.mask.argb32.ref.png differ
diff --git a/test/reference/extended-blend-mask.mask.rgb24.ref.png b/test/reference/extended-blend-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1c85474
Binary files /dev/null and b/test/reference/extended-blend-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/extended-blend-solid-alpha.egl.argb32.ref.png b/test/reference/extended-blend-solid-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3b1a381
Binary files /dev/null and b/test/reference/extended-blend-solid-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/extended-blend-solid-alpha.mask.argb32.ref.png b/test/reference/extended-blend-solid-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4d56a21
Binary files /dev/null and b/test/reference/extended-blend-solid-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/extended-blend-solid-alpha.mask.rgb24.ref.png b/test/reference/extended-blend-solid-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..86d0e2d
Binary files /dev/null and b/test/reference/extended-blend-solid-alpha.mask.rgb24.ref.png differ
index 083fe87..902ef88 100644 (file)
Binary files a/test/reference/extended-blend-solid.argb32.ref.png and b/test/reference/extended-blend-solid.argb32.ref.png differ
diff --git a/test/reference/extended-blend-solid.egl.argb32.ref.png b/test/reference/extended-blend-solid.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5ecd73f
Binary files /dev/null and b/test/reference/extended-blend-solid.egl.argb32.ref.png differ
diff --git a/test/reference/extended-blend-solid.mask.argb32.ref.png b/test/reference/extended-blend-solid.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..902ef88
Binary files /dev/null and b/test/reference/extended-blend-solid.mask.argb32.ref.png differ
diff --git a/test/reference/extended-blend-solid.mask.rgb24.ref.png b/test/reference/extended-blend-solid.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4580e0d
Binary files /dev/null and b/test/reference/extended-blend-solid.mask.rgb24.ref.png differ
index 083fe87..902ef88 100644 (file)
Binary files a/test/reference/extended-blend.argb32.ref.png and b/test/reference/extended-blend.argb32.ref.png differ
diff --git a/test/reference/extended-blend.egl.argb32.ref.png b/test/reference/extended-blend.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a8bf1f4
Binary files /dev/null and b/test/reference/extended-blend.egl.argb32.ref.png differ
diff --git a/test/reference/extended-blend.mask.argb32.ref.png b/test/reference/extended-blend.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..902ef88
Binary files /dev/null and b/test/reference/extended-blend.mask.argb32.ref.png differ
diff --git a/test/reference/extended-blend.mask.rgb24.ref.png b/test/reference/extended-blend.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4580e0d
Binary files /dev/null and b/test/reference/extended-blend.mask.rgb24.ref.png differ
index cbe93ca..fd0666a 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi144x144.ref.png and b/test/reference/fallback-resolution.ppi144x144.ref.png differ
index 4c16ca1..ec6685c 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi144x72.ref.png and b/test/reference/fallback-resolution.ppi144x72.ref.png differ
index b213587..969c04f 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi288x72.ref.png and b/test/reference/fallback-resolution.ppi288x72.ref.png differ
index b63e66e..bbab065 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi576x72.ref.png and b/test/reference/fallback-resolution.ppi576x72.ref.png differ
index 9d232c0..3f55629 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi72x144.ref.png and b/test/reference/fallback-resolution.ppi72x144.ref.png differ
index fdbc382..9d50b64 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi72x288.ref.png and b/test/reference/fallback-resolution.ppi72x288.ref.png differ
index c943f08..7b4d62e 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi72x576.ref.png and b/test/reference/fallback-resolution.ppi72x576.ref.png differ
index 5d1df2c..690c0af 100644 (file)
Binary files a/test/reference/fallback-resolution.ppi72x72.ref.png and b/test/reference/fallback-resolution.ppi72x72.ref.png differ
diff --git a/test/reference/fallback.argb32.ref.png b/test/reference/fallback.argb32.ref.png
new file mode 100644 (file)
index 0000000..32386d5
Binary files /dev/null and b/test/reference/fallback.argb32.ref.png differ
diff --git a/test/reference/fallback.base.argb32.ref.png b/test/reference/fallback.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..c0c5f46
Binary files /dev/null and b/test/reference/fallback.base.argb32.ref.png differ
diff --git a/test/reference/fallback.base.rgb24.ref.png b/test/reference/fallback.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..18b6a7c
Binary files /dev/null and b/test/reference/fallback.base.rgb24.ref.png differ
diff --git a/test/reference/fallback.egl.argb32.ref.png b/test/reference/fallback.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c3deb80
Binary files /dev/null and b/test/reference/fallback.egl.argb32.ref.png differ
diff --git a/test/reference/fallback.image16.rgb24.ref.png b/test/reference/fallback.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d90ab0e
Binary files /dev/null and b/test/reference/fallback.image16.rgb24.ref.png differ
diff --git a/test/reference/fallback.mask.argb32.ref.png b/test/reference/fallback.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7ce573
Binary files /dev/null and b/test/reference/fallback.mask.argb32.ref.png differ
diff --git a/test/reference/fallback.mask.rgb24.ref.png b/test/reference/fallback.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..16d3c14
Binary files /dev/null and b/test/reference/fallback.mask.rgb24.ref.png differ
diff --git a/test/reference/fallback.rgb24.ref.png b/test/reference/fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6d728ab
Binary files /dev/null and b/test/reference/fallback.rgb24.ref.png differ
diff --git a/test/reference/fallback.traps.argb32.ref.png b/test/reference/fallback.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7ce573
Binary files /dev/null and b/test/reference/fallback.traps.argb32.ref.png differ
diff --git a/test/reference/fallback.traps.rgb24.ref.png b/test/reference/fallback.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..16d3c14
Binary files /dev/null and b/test/reference/fallback.traps.rgb24.ref.png differ
diff --git a/test/reference/fill-alpha-pattern.argb32.ref.png b/test/reference/fill-alpha-pattern.argb32.ref.png
new file mode 100644 (file)
index 0000000..4344f23
Binary files /dev/null and b/test/reference/fill-alpha-pattern.argb32.ref.png differ
diff --git a/test/reference/fill-alpha-pattern.egl.argb32.ref.png b/test/reference/fill-alpha-pattern.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..845614a
Binary files /dev/null and b/test/reference/fill-alpha-pattern.egl.argb32.ref.png differ
diff --git a/test/reference/fill-alpha-pattern.mask.argb32.ref.png b/test/reference/fill-alpha-pattern.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4344f23
Binary files /dev/null and b/test/reference/fill-alpha-pattern.mask.argb32.ref.png differ
diff --git a/test/reference/fill-alpha-pattern.mask.rgb24.ref.png b/test/reference/fill-alpha-pattern.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4344f23
Binary files /dev/null and b/test/reference/fill-alpha-pattern.mask.rgb24.ref.png differ
diff --git a/test/reference/fill-alpha-pattern.rgb24.ref.png b/test/reference/fill-alpha-pattern.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4344f23
Binary files /dev/null and b/test/reference/fill-alpha-pattern.rgb24.ref.png differ
diff --git a/test/reference/fill-alpha.argb32.ref.png b/test/reference/fill-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..9de7b50
Binary files /dev/null and b/test/reference/fill-alpha.argb32.ref.png differ
diff --git a/test/reference/fill-alpha.egl.argb32.ref.png b/test/reference/fill-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..aef4325
Binary files /dev/null and b/test/reference/fill-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/fill-alpha.mask.argb32.ref.png b/test/reference/fill-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9de7b50
Binary files /dev/null and b/test/reference/fill-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/fill-alpha.mask.rgb24.ref.png b/test/reference/fill-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9de7b50
Binary files /dev/null and b/test/reference/fill-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/fill-alpha.rgb24.ref.png b/test/reference/fill-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9de7b50
Binary files /dev/null and b/test/reference/fill-alpha.rgb24.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha-add.argb32.ref.png b/test/reference/fill-and-stroke-alpha-add.argb32.ref.png
new file mode 100644 (file)
index 0000000..c804c7a
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha-add.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha-add.egl.argb32.ref.png b/test/reference/fill-and-stroke-alpha-add.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..7edcb4f
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha-add.egl.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha-add.mask.argb32.ref.png b/test/reference/fill-and-stroke-alpha-add.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c804c7a
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha-add.mask.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha-add.mask.rgb24.ref.png b/test/reference/fill-and-stroke-alpha-add.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c804c7a
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha-add.mask.rgb24.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha-add.rgb24.ref.png b/test/reference/fill-and-stroke-alpha-add.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c804c7a
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha-add.rgb24.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha.argb32.ref.png b/test/reference/fill-and-stroke-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..e22ebf9
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha.egl.argb32.ref.png b/test/reference/fill-and-stroke-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..cf00822
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha.mask.argb32.ref.png b/test/reference/fill-and-stroke-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e22ebf9
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha.mask.rgb24.ref.png b/test/reference/fill-and-stroke-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e22ebf9
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/fill-and-stroke-alpha.rgb24.ref.png b/test/reference/fill-and-stroke-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e22ebf9
Binary files /dev/null and b/test/reference/fill-and-stroke-alpha.rgb24.ref.png differ
index f1aa633..b51f4b0 100644 (file)
Binary files a/test/reference/fill-and-stroke.argb32.ref.png and b/test/reference/fill-and-stroke.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke.egl.argb32.ref.png b/test/reference/fill-and-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0544c26
Binary files /dev/null and b/test/reference/fill-and-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke.mask.argb32.ref.png b/test/reference/fill-and-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b51f4b0
Binary files /dev/null and b/test/reference/fill-and-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/fill-and-stroke.mask.rgb24.ref.png b/test/reference/fill-and-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4017293
Binary files /dev/null and b/test/reference/fill-and-stroke.mask.rgb24.ref.png differ
index 7081d72..4017293 100644 (file)
Binary files a/test/reference/fill-and-stroke.rgb24.ref.png and b/test/reference/fill-and-stroke.rgb24.ref.png differ
index 57e61db..38bb1a0 100644 (file)
Binary files a/test/reference/fill-degenerate-sort-order.argb32.ref.png and b/test/reference/fill-degenerate-sort-order.argb32.ref.png differ
diff --git a/test/reference/fill-degenerate-sort-order.egl.argb32.ref.png b/test/reference/fill-degenerate-sort-order.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..383b8f2
Binary files /dev/null and b/test/reference/fill-degenerate-sort-order.egl.argb32.ref.png differ
diff --git a/test/reference/fill-degenerate-sort-order.mask.argb32.ref.png b/test/reference/fill-degenerate-sort-order.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..38bb1a0
Binary files /dev/null and b/test/reference/fill-degenerate-sort-order.mask.argb32.ref.png differ
diff --git a/test/reference/fill-degenerate-sort-order.mask.rgb24.ref.png b/test/reference/fill-degenerate-sort-order.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c392c21
Binary files /dev/null and b/test/reference/fill-degenerate-sort-order.mask.rgb24.ref.png differ
index 5e807b1..c392c21 100644 (file)
Binary files a/test/reference/fill-degenerate-sort-order.rgb24.ref.png and b/test/reference/fill-degenerate-sort-order.rgb24.ref.png differ
diff --git a/test/reference/fill-disjoint.argb32.ref.png b/test/reference/fill-disjoint.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.argb32.ref.png differ
diff --git a/test/reference/fill-disjoint.base.argb32.ref.png b/test/reference/fill-disjoint.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.base.argb32.ref.png differ
diff --git a/test/reference/fill-disjoint.base.rgb24.ref.png b/test/reference/fill-disjoint.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.base.rgb24.ref.png differ
diff --git a/test/reference/fill-disjoint.egl.argb32.ref.png b/test/reference/fill-disjoint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.egl.argb32.ref.png differ
diff --git a/test/reference/fill-disjoint.mask.argb32.ref.png b/test/reference/fill-disjoint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.mask.argb32.ref.png differ
diff --git a/test/reference/fill-disjoint.mask.rgb24.ref.png b/test/reference/fill-disjoint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.mask.rgb24.ref.png differ
diff --git a/test/reference/fill-disjoint.ref.png b/test/reference/fill-disjoint.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.ref.png differ
diff --git a/test/reference/fill-disjoint.rgb24.ref.png b/test/reference/fill-disjoint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.rgb24.ref.png differ
diff --git a/test/reference/fill-disjoint.traps.argb32.ref.png b/test/reference/fill-disjoint.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.traps.argb32.ref.png differ
diff --git a/test/reference/fill-disjoint.traps.rgb24.ref.png b/test/reference/fill-disjoint.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..da9a3b1
Binary files /dev/null and b/test/reference/fill-disjoint.traps.rgb24.ref.png differ
diff --git a/test/reference/fill-empty.egl.argb32.ref.png b/test/reference/fill-empty.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8c26f7e
Binary files /dev/null and b/test/reference/fill-empty.egl.argb32.ref.png differ
diff --git a/test/reference/fill-empty.mask.argb32.ref.png b/test/reference/fill-empty.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8c26f7e
Binary files /dev/null and b/test/reference/fill-empty.mask.argb32.ref.png differ
diff --git a/test/reference/fill-empty.mask.rgb24.ref.png b/test/reference/fill-empty.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dc7a8a0
Binary files /dev/null and b/test/reference/fill-empty.mask.rgb24.ref.png differ
diff --git a/test/reference/fill-image.argb32.ref.png b/test/reference/fill-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..068fbb7
Binary files /dev/null and b/test/reference/fill-image.argb32.ref.png differ
index b94ed91..1e67073 100644 (file)
Binary files a/test/reference/fill-image.base.argb32.ref.png and b/test/reference/fill-image.base.argb32.ref.png differ
index b94ed91..1e67073 100644 (file)
Binary files a/test/reference/fill-image.base.rgb24.ref.png and b/test/reference/fill-image.base.rgb24.ref.png differ
diff --git a/test/reference/fill-image.egl.argb32.ref.png b/test/reference/fill-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3db91ef
Binary files /dev/null and b/test/reference/fill-image.egl.argb32.ref.png differ
diff --git a/test/reference/fill-image.mask.argb32.ref.png b/test/reference/fill-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..068fbb7
Binary files /dev/null and b/test/reference/fill-image.mask.argb32.ref.png differ
diff --git a/test/reference/fill-image.mask.rgb24.ref.png b/test/reference/fill-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..068fbb7
Binary files /dev/null and b/test/reference/fill-image.mask.rgb24.ref.png differ
diff --git a/test/reference/fill-image.rgb24.ref.png b/test/reference/fill-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..068fbb7
Binary files /dev/null and b/test/reference/fill-image.rgb24.ref.png differ
index b94ed91..1e67073 100644 (file)
Binary files a/test/reference/fill-image.traps.argb32.ref.png and b/test/reference/fill-image.traps.argb32.ref.png differ
index b94ed91..1e67073 100644 (file)
Binary files a/test/reference/fill-image.traps.rgb24.ref.png and b/test/reference/fill-image.traps.rgb24.ref.png differ
diff --git a/test/reference/fill-missed-stop.argb32.ref.png b/test/reference/fill-missed-stop.argb32.ref.png
new file mode 100644 (file)
index 0000000..477eec9
Binary files /dev/null and b/test/reference/fill-missed-stop.argb32.ref.png differ
diff --git a/test/reference/fill-missed-stop.egl.argb32.ref.png b/test/reference/fill-missed-stop.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..7083e6e
Binary files /dev/null and b/test/reference/fill-missed-stop.egl.argb32.ref.png differ
diff --git a/test/reference/fill-missed-stop.mask.argb32.ref.png b/test/reference/fill-missed-stop.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..477eec9
Binary files /dev/null and b/test/reference/fill-missed-stop.mask.argb32.ref.png differ
diff --git a/test/reference/fill-missed-stop.mask.rgb24.ref.png b/test/reference/fill-missed-stop.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2e663f0
Binary files /dev/null and b/test/reference/fill-missed-stop.mask.rgb24.ref.png differ
index 3f9d2ad..2e663f0 100644 (file)
Binary files a/test/reference/fill-missed-stop.rgb24.ref.png and b/test/reference/fill-missed-stop.rgb24.ref.png differ
diff --git a/test/reference/fill-rule.argb32.ref.png b/test/reference/fill-rule.argb32.ref.png
new file mode 100644 (file)
index 0000000..23e0a3a
Binary files /dev/null and b/test/reference/fill-rule.argb32.ref.png differ
diff --git a/test/reference/fill-rule.egl.argb32.ref.png b/test/reference/fill-rule.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3683f7d
Binary files /dev/null and b/test/reference/fill-rule.egl.argb32.ref.png differ
diff --git a/test/reference/fill-rule.mask.argb32.ref.png b/test/reference/fill-rule.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..23e0a3a
Binary files /dev/null and b/test/reference/fill-rule.mask.argb32.ref.png differ
diff --git a/test/reference/fill-rule.mask.rgb24.ref.png b/test/reference/fill-rule.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..55486e6
Binary files /dev/null and b/test/reference/fill-rule.mask.rgb24.ref.png differ
index 704172f..55486e6 100644 (file)
Binary files a/test/reference/fill-rule.rgb24.ref.png and b/test/reference/fill-rule.rgb24.ref.png differ
diff --git a/test/reference/fill-xlib-fallback.rgb24.ref.png b/test/reference/fill-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1e67073
Binary files /dev/null and b/test/reference/fill-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/fill-xlib-window.rgb24.ref.png b/test/reference/fill-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1e67073
Binary files /dev/null and b/test/reference/fill-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/fill-xlib.argb32.ref.png b/test/reference/fill-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..1e67073
Binary files /dev/null and b/test/reference/fill-xlib.argb32.ref.png differ
diff --git a/test/reference/fill-xlib.rgb24.ref.png b/test/reference/fill-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1e67073
Binary files /dev/null and b/test/reference/fill-xlib.rgb24.ref.png differ
diff --git a/test/reference/filter-bilinear-extents.argb32.ref.png b/test/reference/filter-bilinear-extents.argb32.ref.png
new file mode 100644 (file)
index 0000000..797e798
Binary files /dev/null and b/test/reference/filter-bilinear-extents.argb32.ref.png differ
diff --git a/test/reference/filter-bilinear-extents.egl.argb32.ref.png b/test/reference/filter-bilinear-extents.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4b8fa42
Binary files /dev/null and b/test/reference/filter-bilinear-extents.egl.argb32.ref.png differ
diff --git a/test/reference/filter-bilinear-extents.mask.argb32.ref.png b/test/reference/filter-bilinear-extents.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..797e798
Binary files /dev/null and b/test/reference/filter-bilinear-extents.mask.argb32.ref.png differ
diff --git a/test/reference/filter-bilinear-extents.mask.rgb24.ref.png b/test/reference/filter-bilinear-extents.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..797e798
Binary files /dev/null and b/test/reference/filter-bilinear-extents.mask.rgb24.ref.png differ
diff --git a/test/reference/filter-bilinear-extents.rgb24.ref.png b/test/reference/filter-bilinear-extents.rgb24.ref.png
new file mode 100644 (file)
index 0000000..797e798
Binary files /dev/null and b/test/reference/filter-bilinear-extents.rgb24.ref.png differ
diff --git a/test/reference/filter-nearest-offset.argb32.ref.png b/test/reference/filter-nearest-offset.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cca9a1
Binary files /dev/null and b/test/reference/filter-nearest-offset.argb32.ref.png differ
diff --git a/test/reference/filter-nearest-offset.egl.argb32.ref.png b/test/reference/filter-nearest-offset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0efd8e4
Binary files /dev/null and b/test/reference/filter-nearest-offset.egl.argb32.ref.png differ
diff --git a/test/reference/filter-nearest-offset.mask.argb32.ref.png b/test/reference/filter-nearest-offset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cca9a1
Binary files /dev/null and b/test/reference/filter-nearest-offset.mask.argb32.ref.png differ
diff --git a/test/reference/filter-nearest-offset.mask.rgb24.ref.png b/test/reference/filter-nearest-offset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8cca9a1
Binary files /dev/null and b/test/reference/filter-nearest-offset.mask.rgb24.ref.png differ
diff --git a/test/reference/filter-nearest-offset.rgb24.ref.png b/test/reference/filter-nearest-offset.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8cca9a1
Binary files /dev/null and b/test/reference/filter-nearest-offset.rgb24.ref.png differ
diff --git a/test/reference/filter-nearest-transformed.argb32.ref.png b/test/reference/filter-nearest-transformed.argb32.ref.png
new file mode 100644 (file)
index 0000000..24adf8b
Binary files /dev/null and b/test/reference/filter-nearest-transformed.argb32.ref.png differ
diff --git a/test/reference/filter-nearest-transformed.egl.argb32.ref.png b/test/reference/filter-nearest-transformed.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..be4a22a
Binary files /dev/null and b/test/reference/filter-nearest-transformed.egl.argb32.ref.png differ
diff --git a/test/reference/filter-nearest-transformed.mask.argb32.ref.png b/test/reference/filter-nearest-transformed.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..24adf8b
Binary files /dev/null and b/test/reference/filter-nearest-transformed.mask.argb32.ref.png differ
diff --git a/test/reference/filter-nearest-transformed.mask.rgb24.ref.png b/test/reference/filter-nearest-transformed.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..24adf8b
Binary files /dev/null and b/test/reference/filter-nearest-transformed.mask.rgb24.ref.png differ
diff --git a/test/reference/filter-nearest-transformed.rgb24.ref.png b/test/reference/filter-nearest-transformed.rgb24.ref.png
new file mode 100644 (file)
index 0000000..24adf8b
Binary files /dev/null and b/test/reference/filter-nearest-transformed.rgb24.ref.png differ
index ea50762..8960179 100644 (file)
Binary files a/test/reference/finer-grained-fallbacks.argb32.ref.png and b/test/reference/finer-grained-fallbacks.argb32.ref.png differ
diff --git a/test/reference/finer-grained-fallbacks.egl.argb32.ref.png b/test/reference/finer-grained-fallbacks.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..22f9cc6
Binary files /dev/null and b/test/reference/finer-grained-fallbacks.egl.argb32.ref.png differ
diff --git a/test/reference/finer-grained-fallbacks.mask.argb32.ref.png b/test/reference/finer-grained-fallbacks.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cd99d0
Binary files /dev/null and b/test/reference/finer-grained-fallbacks.mask.argb32.ref.png differ
diff --git a/test/reference/finer-grained-fallbacks.mask.rgb24.ref.png b/test/reference/finer-grained-fallbacks.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5d6cd94
Binary files /dev/null and b/test/reference/finer-grained-fallbacks.mask.rgb24.ref.png differ
index 08467b0..1a9a0c0 100644 (file)
Binary files a/test/reference/finer-grained-fallbacks.rgb24.ref.png and b/test/reference/finer-grained-fallbacks.rgb24.ref.png differ
diff --git a/test/reference/font-matrix-translation.argb32.ref.png b/test/reference/font-matrix-translation.argb32.ref.png
new file mode 100644 (file)
index 0000000..a4a1082
Binary files /dev/null and b/test/reference/font-matrix-translation.argb32.ref.png differ
index dd5faba..a4a1082 100644 (file)
Binary files a/test/reference/font-matrix-translation.base.argb32.ref.png and b/test/reference/font-matrix-translation.base.argb32.ref.png differ
index dd5faba..a4a1082 100644 (file)
Binary files a/test/reference/font-matrix-translation.base.rgb24.ref.png and b/test/reference/font-matrix-translation.base.rgb24.ref.png differ
diff --git a/test/reference/font-matrix-translation.mask.argb32.ref.png b/test/reference/font-matrix-translation.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a4a1082
Binary files /dev/null and b/test/reference/font-matrix-translation.mask.argb32.ref.png differ
diff --git a/test/reference/font-matrix-translation.mask.rgb24.ref.png b/test/reference/font-matrix-translation.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a4a1082
Binary files /dev/null and b/test/reference/font-matrix-translation.mask.rgb24.ref.png differ
diff --git a/test/reference/font-matrix-translation.rgb24.ref.png b/test/reference/font-matrix-translation.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a4a1082
Binary files /dev/null and b/test/reference/font-matrix-translation.rgb24.ref.png differ
index dd5faba..a4a1082 100644 (file)
Binary files a/test/reference/font-matrix-translation.traps.argb32.ref.png and b/test/reference/font-matrix-translation.traps.argb32.ref.png differ
diff --git a/test/reference/font-matrix-translation.traps.ref.png b/test/reference/font-matrix-translation.traps.ref.png
new file mode 100644 (file)
index 0000000..a4a1082
Binary files /dev/null and b/test/reference/font-matrix-translation.traps.ref.png differ
index dd5faba..a4a1082 100644 (file)
Binary files a/test/reference/font-matrix-translation.traps.rgb24.ref.png and b/test/reference/font-matrix-translation.traps.rgb24.ref.png differ
diff --git a/test/reference/ft-show-glyphs-positioning.argb32.ref.png b/test/reference/ft-show-glyphs-positioning.argb32.ref.png
new file mode 100644 (file)
index 0000000..af6dcaf
Binary files /dev/null and b/test/reference/ft-show-glyphs-positioning.argb32.ref.png differ
index b49ed47..af6dcaf 100644 (file)
Binary files a/test/reference/ft-show-glyphs-positioning.base.argb32.ref.png and b/test/reference/ft-show-glyphs-positioning.base.argb32.ref.png differ
index b49ed47..af6dcaf 100644 (file)
Binary files a/test/reference/ft-show-glyphs-positioning.base.rgb24.ref.png and b/test/reference/ft-show-glyphs-positioning.base.rgb24.ref.png differ
diff --git a/test/reference/ft-show-glyphs-positioning.mask.argb32.ref.png b/test/reference/ft-show-glyphs-positioning.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..af6dcaf
Binary files /dev/null and b/test/reference/ft-show-glyphs-positioning.mask.argb32.ref.png differ
diff --git a/test/reference/ft-show-glyphs-positioning.mask.rgb24.ref.png b/test/reference/ft-show-glyphs-positioning.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af6dcaf
Binary files /dev/null and b/test/reference/ft-show-glyphs-positioning.mask.rgb24.ref.png differ
diff --git a/test/reference/ft-show-glyphs-positioning.rgb24.ref.png b/test/reference/ft-show-glyphs-positioning.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af6dcaf
Binary files /dev/null and b/test/reference/ft-show-glyphs-positioning.rgb24.ref.png differ
index b49ed47..af6dcaf 100644 (file)
Binary files a/test/reference/ft-show-glyphs-positioning.traps.argb32.ref.png and b/test/reference/ft-show-glyphs-positioning.traps.argb32.ref.png differ
diff --git a/test/reference/ft-show-glyphs-positioning.traps.ref.png b/test/reference/ft-show-glyphs-positioning.traps.ref.png
new file mode 100644 (file)
index 0000000..af6dcaf
Binary files /dev/null and b/test/reference/ft-show-glyphs-positioning.traps.ref.png differ
index b49ed47..af6dcaf 100644 (file)
Binary files a/test/reference/ft-show-glyphs-positioning.traps.rgb24.ref.png and b/test/reference/ft-show-glyphs-positioning.traps.rgb24.ref.png differ
diff --git a/test/reference/ft-show-glyphs-table.argb32.ref.png b/test/reference/ft-show-glyphs-table.argb32.ref.png
new file mode 100644 (file)
index 0000000..ed69124
Binary files /dev/null and b/test/reference/ft-show-glyphs-table.argb32.ref.png differ
index c762dc7..ed69124 100644 (file)
Binary files a/test/reference/ft-show-glyphs-table.base.argb32.ref.png and b/test/reference/ft-show-glyphs-table.base.argb32.ref.png differ
index c762dc7..ed69124 100644 (file)
Binary files a/test/reference/ft-show-glyphs-table.base.rgb24.ref.png and b/test/reference/ft-show-glyphs-table.base.rgb24.ref.png differ
diff --git a/test/reference/ft-show-glyphs-table.mask.argb32.ref.png b/test/reference/ft-show-glyphs-table.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ed69124
Binary files /dev/null and b/test/reference/ft-show-glyphs-table.mask.argb32.ref.png differ
diff --git a/test/reference/ft-show-glyphs-table.mask.rgb24.ref.png b/test/reference/ft-show-glyphs-table.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ed69124
Binary files /dev/null and b/test/reference/ft-show-glyphs-table.mask.rgb24.ref.png differ
diff --git a/test/reference/ft-show-glyphs-table.rgb24.ref.png b/test/reference/ft-show-glyphs-table.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ed69124
Binary files /dev/null and b/test/reference/ft-show-glyphs-table.rgb24.ref.png differ
index c762dc7..ed69124 100644 (file)
Binary files a/test/reference/ft-show-glyphs-table.traps.argb32.ref.png and b/test/reference/ft-show-glyphs-table.traps.argb32.ref.png differ
diff --git a/test/reference/ft-show-glyphs-table.traps.ref.png b/test/reference/ft-show-glyphs-table.traps.ref.png
new file mode 100644 (file)
index 0000000..ed69124
Binary files /dev/null and b/test/reference/ft-show-glyphs-table.traps.ref.png differ
index c762dc7..ed69124 100644 (file)
Binary files a/test/reference/ft-show-glyphs-table.traps.rgb24.ref.png and b/test/reference/ft-show-glyphs-table.traps.rgb24.ref.png differ
diff --git a/test/reference/ft-text-antialias-none.argb32.ref.png b/test/reference/ft-text-antialias-none.argb32.ref.png
new file mode 100644 (file)
index 0000000..c638c9e
Binary files /dev/null and b/test/reference/ft-text-antialias-none.argb32.ref.png differ
diff --git a/test/reference/ft-text-antialias-none.mask.argb32.ref.png b/test/reference/ft-text-antialias-none.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c638c9e
Binary files /dev/null and b/test/reference/ft-text-antialias-none.mask.argb32.ref.png differ
diff --git a/test/reference/ft-text-antialias-none.mask.rgb24.ref.png b/test/reference/ft-text-antialias-none.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c638c9e
Binary files /dev/null and b/test/reference/ft-text-antialias-none.mask.rgb24.ref.png differ
diff --git a/test/reference/ft-text-antialias-none.rgb24.ref.png b/test/reference/ft-text-antialias-none.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c638c9e
Binary files /dev/null and b/test/reference/ft-text-antialias-none.rgb24.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type1.argb32.ref.png b/test/reference/ft-text-vertical-layout-type1.argb32.ref.png
new file mode 100644 (file)
index 0000000..4941965
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type1.argb32.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type1.mask.argb32.ref.png b/test/reference/ft-text-vertical-layout-type1.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4941965
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type1.mask.argb32.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type1.mask.rgb24.ref.png b/test/reference/ft-text-vertical-layout-type1.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4941965
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type1.mask.rgb24.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type1.rgb24.ref.png b/test/reference/ft-text-vertical-layout-type1.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4941965
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type1.rgb24.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type3.argb32.ref.png b/test/reference/ft-text-vertical-layout-type3.argb32.ref.png
new file mode 100644 (file)
index 0000000..7f7b428
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type3.argb32.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type3.mask.argb32.ref.png b/test/reference/ft-text-vertical-layout-type3.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7f7b428
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type3.mask.argb32.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type3.mask.rgb24.ref.png b/test/reference/ft-text-vertical-layout-type3.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7f7b428
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type3.mask.rgb24.ref.png differ
diff --git a/test/reference/ft-text-vertical-layout-type3.rgb24.ref.png b/test/reference/ft-text-vertical-layout-type3.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7f7b428
Binary files /dev/null and b/test/reference/ft-text-vertical-layout-type3.rgb24.ref.png differ
diff --git a/test/reference/get-group-target.argb32.ref.png b/test/reference/get-group-target.argb32.ref.png
new file mode 100644 (file)
index 0000000..d162775
Binary files /dev/null and b/test/reference/get-group-target.argb32.ref.png differ
diff --git a/test/reference/get-group-target.egl.argb32.ref.png b/test/reference/get-group-target.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d162775
Binary files /dev/null and b/test/reference/get-group-target.egl.argb32.ref.png differ
diff --git a/test/reference/get-group-target.mask.argb32.ref.png b/test/reference/get-group-target.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d162775
Binary files /dev/null and b/test/reference/get-group-target.mask.argb32.ref.png differ
diff --git a/test/reference/get-group-target.mask.rgb24.ref.png b/test/reference/get-group-target.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d162775
Binary files /dev/null and b/test/reference/get-group-target.mask.rgb24.ref.png differ
diff --git a/test/reference/get-group-target.rgb24.ref.png b/test/reference/get-group-target.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d162775
Binary files /dev/null and b/test/reference/get-group-target.rgb24.ref.png differ
diff --git a/test/reference/gl-surface-source.base.argb32.ref.png b/test/reference/gl-surface-source.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/gl-surface-source.base.argb32.ref.png differ
diff --git a/test/reference/gl-surface-source.base.rgb24.ref.png b/test/reference/gl-surface-source.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/gl-surface-source.base.rgb24.ref.png differ
diff --git a/test/reference/gl-surface-source.mask.argb32.ref.png b/test/reference/gl-surface-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/gl-surface-source.mask.argb32.ref.png differ
diff --git a/test/reference/gl-surface-source.mask.rgb24.ref.png b/test/reference/gl-surface-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/gl-surface-source.mask.rgb24.ref.png differ
diff --git a/test/reference/gl-surface-source.traps.argb32.ref.png b/test/reference/gl-surface-source.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/gl-surface-source.traps.argb32.ref.png differ
diff --git a/test/reference/gl-surface-source.traps.rgb24.ref.png b/test/reference/gl-surface-source.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/gl-surface-source.traps.rgb24.ref.png differ
diff --git a/test/reference/glyph-cache-pressure.argb32.ref.png b/test/reference/glyph-cache-pressure.argb32.ref.png
new file mode 100644 (file)
index 0000000..a6e1b06
Binary files /dev/null and b/test/reference/glyph-cache-pressure.argb32.ref.png differ
index 14182f1..a6e1b06 100644 (file)
Binary files a/test/reference/glyph-cache-pressure.base.argb32.ref.png and b/test/reference/glyph-cache-pressure.base.argb32.ref.png differ
index 14182f1..a6e1b06 100644 (file)
Binary files a/test/reference/glyph-cache-pressure.base.rgb24.ref.png and b/test/reference/glyph-cache-pressure.base.rgb24.ref.png differ
diff --git a/test/reference/glyph-cache-pressure.mask.argb32.ref.png b/test/reference/glyph-cache-pressure.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a6e1b06
Binary files /dev/null and b/test/reference/glyph-cache-pressure.mask.argb32.ref.png differ
diff --git a/test/reference/glyph-cache-pressure.mask.rgb24.ref.png b/test/reference/glyph-cache-pressure.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a6e1b06
Binary files /dev/null and b/test/reference/glyph-cache-pressure.mask.rgb24.ref.png differ
diff --git a/test/reference/glyph-cache-pressure.rgb24.ref.png b/test/reference/glyph-cache-pressure.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a6e1b06
Binary files /dev/null and b/test/reference/glyph-cache-pressure.rgb24.ref.png differ
index 14182f1..a6e1b06 100644 (file)
Binary files a/test/reference/glyph-cache-pressure.traps.argb32.ref.png and b/test/reference/glyph-cache-pressure.traps.argb32.ref.png differ
diff --git a/test/reference/glyph-cache-pressure.traps.ref.png b/test/reference/glyph-cache-pressure.traps.ref.png
new file mode 100644 (file)
index 0000000..a6e1b06
Binary files /dev/null and b/test/reference/glyph-cache-pressure.traps.ref.png differ
index 14182f1..a6e1b06 100644 (file)
Binary files a/test/reference/glyph-cache-pressure.traps.rgb24.ref.png and b/test/reference/glyph-cache-pressure.traps.rgb24.ref.png differ
diff --git a/test/reference/gradient-alpha.argb32.ref.png b/test/reference/gradient-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..f64b26a
Binary files /dev/null and b/test/reference/gradient-alpha.argb32.ref.png differ
diff --git a/test/reference/gradient-alpha.egl.argb32.ref.png b/test/reference/gradient-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d7c3890
Binary files /dev/null and b/test/reference/gradient-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/gradient-alpha.mask.argb32.ref.png b/test/reference/gradient-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f64b26a
Binary files /dev/null and b/test/reference/gradient-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/gradient-alpha.mask.rgb24.ref.png b/test/reference/gradient-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c7258d
Binary files /dev/null and b/test/reference/gradient-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/gradient-constant-alpha.argb32.ref.png b/test/reference/gradient-constant-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..7f49e2c
Binary files /dev/null and b/test/reference/gradient-constant-alpha.argb32.ref.png differ
diff --git a/test/reference/gradient-constant-alpha.egl.argb32.ref.png b/test/reference/gradient-constant-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6fab7cb
Binary files /dev/null and b/test/reference/gradient-constant-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/gradient-constant-alpha.mask.argb32.ref.png b/test/reference/gradient-constant-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7f49e2c
Binary files /dev/null and b/test/reference/gradient-constant-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/gradient-constant-alpha.mask.rgb24.ref.png b/test/reference/gradient-constant-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..69cd596
Binary files /dev/null and b/test/reference/gradient-constant-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/gradient-zero-stops-mask.egl.argb32.ref.png b/test/reference/gradient-zero-stops-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a50f4c
Binary files /dev/null and b/test/reference/gradient-zero-stops-mask.egl.argb32.ref.png differ
diff --git a/test/reference/gradient-zero-stops-mask.mask.argb32.ref.png b/test/reference/gradient-zero-stops-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a50f4c
Binary files /dev/null and b/test/reference/gradient-zero-stops-mask.mask.argb32.ref.png differ
diff --git a/test/reference/gradient-zero-stops-mask.mask.rgb24.ref.png b/test/reference/gradient-zero-stops-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..21465ce
Binary files /dev/null and b/test/reference/gradient-zero-stops-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/gradient-zero-stops.argb32.ref.png b/test/reference/gradient-zero-stops.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a50f4c
Binary files /dev/null and b/test/reference/gradient-zero-stops.argb32.ref.png differ
diff --git a/test/reference/gradient-zero-stops.egl.argb32.ref.png b/test/reference/gradient-zero-stops.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a50f4c
Binary files /dev/null and b/test/reference/gradient-zero-stops.egl.argb32.ref.png differ
diff --git a/test/reference/gradient-zero-stops.mask.argb32.ref.png b/test/reference/gradient-zero-stops.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a50f4c
Binary files /dev/null and b/test/reference/gradient-zero-stops.mask.argb32.ref.png differ
diff --git a/test/reference/gradient-zero-stops.mask.rgb24.ref.png b/test/reference/gradient-zero-stops.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..21465ce
Binary files /dev/null and b/test/reference/gradient-zero-stops.mask.rgb24.ref.png differ
index eb24e4b..21465ce 100644 (file)
Binary files a/test/reference/gradient-zero-stops.rgb24.ref.png and b/test/reference/gradient-zero-stops.rgb24.ref.png differ
diff --git a/test/reference/group-clip.argb32.ref.png b/test/reference/group-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..7b8a753
Binary files /dev/null and b/test/reference/group-clip.argb32.ref.png differ
diff --git a/test/reference/group-clip.egl.argb32.ref.png b/test/reference/group-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5a71b56
Binary files /dev/null and b/test/reference/group-clip.egl.argb32.ref.png differ
diff --git a/test/reference/group-clip.mask.argb32.ref.png b/test/reference/group-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7b8a753
Binary files /dev/null and b/test/reference/group-clip.mask.argb32.ref.png differ
diff --git a/test/reference/group-clip.mask.rgb24.ref.png b/test/reference/group-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7b8a753
Binary files /dev/null and b/test/reference/group-clip.mask.rgb24.ref.png differ
diff --git a/test/reference/group-clip.rgb24.ref.png b/test/reference/group-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7b8a753
Binary files /dev/null and b/test/reference/group-clip.rgb24.ref.png differ
diff --git a/test/reference/group-paint.argb32.ref.png b/test/reference/group-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/group-paint.argb32.ref.png differ
diff --git a/test/reference/group-paint.egl.argb32.ref.png b/test/reference/group-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/group-paint.egl.argb32.ref.png differ
diff --git a/test/reference/group-paint.mask.argb32.ref.png b/test/reference/group-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/group-paint.mask.argb32.ref.png differ
diff --git a/test/reference/group-paint.mask.rgb24.ref.png b/test/reference/group-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/group-paint.mask.rgb24.ref.png differ
diff --git a/test/reference/group-paint.rgb24.ref.png b/test/reference/group-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1ed070c
Binary files /dev/null and b/test/reference/group-paint.rgb24.ref.png differ
diff --git a/test/reference/group-unaligned.argb32.ref.png b/test/reference/group-unaligned.argb32.ref.png
new file mode 100644 (file)
index 0000000..beb0ae2
Binary files /dev/null and b/test/reference/group-unaligned.argb32.ref.png differ
diff --git a/test/reference/group-unaligned.egl.argb32.ref.png b/test/reference/group-unaligned.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..cdaefd8
Binary files /dev/null and b/test/reference/group-unaligned.egl.argb32.ref.png differ
diff --git a/test/reference/group-unaligned.mask.argb32.ref.png b/test/reference/group-unaligned.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..beb0ae2
Binary files /dev/null and b/test/reference/group-unaligned.mask.argb32.ref.png differ
diff --git a/test/reference/group-unaligned.mask.rgb24.ref.png b/test/reference/group-unaligned.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..beb0ae2
Binary files /dev/null and b/test/reference/group-unaligned.mask.rgb24.ref.png differ
diff --git a/test/reference/group-unaligned.rgb24.ref.png b/test/reference/group-unaligned.rgb24.ref.png
new file mode 100644 (file)
index 0000000..beb0ae2
Binary files /dev/null and b/test/reference/group-unaligned.rgb24.ref.png differ
diff --git a/test/reference/halo-transform.argb32.ref.png b/test/reference/halo-transform.argb32.ref.png
new file mode 100644 (file)
index 0000000..96c6f42
Binary files /dev/null and b/test/reference/halo-transform.argb32.ref.png differ
index ac314b0..45cb90f 100644 (file)
Binary files a/test/reference/halo-transform.base.argb32.ref.png and b/test/reference/halo-transform.base.argb32.ref.png differ
index ac314b0..45cb90f 100644 (file)
Binary files a/test/reference/halo-transform.base.rgb24.ref.png and b/test/reference/halo-transform.base.rgb24.ref.png differ
diff --git a/test/reference/halo-transform.mask.argb32.ref.png b/test/reference/halo-transform.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..96c6f42
Binary files /dev/null and b/test/reference/halo-transform.mask.argb32.ref.png differ
diff --git a/test/reference/halo-transform.mask.rgb24.ref.png b/test/reference/halo-transform.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..96c6f42
Binary files /dev/null and b/test/reference/halo-transform.mask.rgb24.ref.png differ
diff --git a/test/reference/halo-transform.rgb24.ref.png b/test/reference/halo-transform.rgb24.ref.png
new file mode 100644 (file)
index 0000000..96c6f42
Binary files /dev/null and b/test/reference/halo-transform.rgb24.ref.png differ
index ac314b0..96c6f42 100644 (file)
Binary files a/test/reference/halo-transform.traps.argb32.ref.png and b/test/reference/halo-transform.traps.argb32.ref.png differ
diff --git a/test/reference/halo-transform.traps.ref.png b/test/reference/halo-transform.traps.ref.png
new file mode 100644 (file)
index 0000000..45cb90f
Binary files /dev/null and b/test/reference/halo-transform.traps.ref.png differ
index ac314b0..96c6f42 100644 (file)
Binary files a/test/reference/halo-transform.traps.rgb24.ref.png and b/test/reference/halo-transform.traps.rgb24.ref.png differ
diff --git a/test/reference/halo.argb32.ref.png b/test/reference/halo.argb32.ref.png
new file mode 100644 (file)
index 0000000..191ee47
Binary files /dev/null and b/test/reference/halo.argb32.ref.png differ
index bc971d8..c915a24 100644 (file)
Binary files a/test/reference/halo.base.argb32.ref.png and b/test/reference/halo.base.argb32.ref.png differ
index bc971d8..c915a24 100644 (file)
Binary files a/test/reference/halo.base.rgb24.ref.png and b/test/reference/halo.base.rgb24.ref.png differ
diff --git a/test/reference/halo.mask.argb32.ref.png b/test/reference/halo.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..191ee47
Binary files /dev/null and b/test/reference/halo.mask.argb32.ref.png differ
diff --git a/test/reference/halo.mask.rgb24.ref.png b/test/reference/halo.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..191ee47
Binary files /dev/null and b/test/reference/halo.mask.rgb24.ref.png differ
diff --git a/test/reference/halo.rgb24.ref.png b/test/reference/halo.rgb24.ref.png
new file mode 100644 (file)
index 0000000..191ee47
Binary files /dev/null and b/test/reference/halo.rgb24.ref.png differ
index bc971d8..191ee47 100644 (file)
Binary files a/test/reference/halo.traps.argb32.ref.png and b/test/reference/halo.traps.argb32.ref.png differ
diff --git a/test/reference/halo.traps.ref.png b/test/reference/halo.traps.ref.png
new file mode 100644 (file)
index 0000000..c915a24
Binary files /dev/null and b/test/reference/halo.traps.ref.png differ
index bc971d8..191ee47 100644 (file)
Binary files a/test/reference/halo.traps.rgb24.ref.png and b/test/reference/halo.traps.rgb24.ref.png differ
index 26cc637..73e156d 100644 (file)
Binary files a/test/reference/hatchings.base.argb32.ref.png and b/test/reference/hatchings.base.argb32.ref.png differ
index 26cc637..73e156d 100644 (file)
Binary files a/test/reference/hatchings.base.rgb24.ref.png and b/test/reference/hatchings.base.rgb24.ref.png differ
diff --git a/test/reference/hatchings.egl.argb32.ref.png b/test/reference/hatchings.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3f041b0
Binary files /dev/null and b/test/reference/hatchings.egl.argb32.ref.png differ
diff --git a/test/reference/hatchings.mask.argb32.ref.png b/test/reference/hatchings.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..77fe853
Binary files /dev/null and b/test/reference/hatchings.mask.argb32.ref.png differ
diff --git a/test/reference/hatchings.mask.rgb24.ref.png b/test/reference/hatchings.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..77fe853
Binary files /dev/null and b/test/reference/hatchings.mask.rgb24.ref.png differ
index a8af87c..d4c18b4 100644 (file)
Binary files a/test/reference/hatchings.ref.png and b/test/reference/hatchings.ref.png differ
diff --git a/test/reference/horizontal-clip.argb32.ref.png b/test/reference/horizontal-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..43dd07f
Binary files /dev/null and b/test/reference/horizontal-clip.argb32.ref.png differ
diff --git a/test/reference/horizontal-clip.egl.argb32.ref.png b/test/reference/horizontal-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..43dd07f
Binary files /dev/null and b/test/reference/horizontal-clip.egl.argb32.ref.png differ
diff --git a/test/reference/horizontal-clip.mask.argb32.ref.png b/test/reference/horizontal-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..43dd07f
Binary files /dev/null and b/test/reference/horizontal-clip.mask.argb32.ref.png differ
diff --git a/test/reference/horizontal-clip.mask.rgb24.ref.png b/test/reference/horizontal-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..43dd07f
Binary files /dev/null and b/test/reference/horizontal-clip.mask.rgb24.ref.png differ
diff --git a/test/reference/horizontal-clip.rgb24.ref.png b/test/reference/horizontal-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..43dd07f
Binary files /dev/null and b/test/reference/horizontal-clip.rgb24.ref.png differ
diff --git a/test/reference/huge-linear.argb32.ref.png b/test/reference/huge-linear.argb32.ref.png
new file mode 100644 (file)
index 0000000..f89217b
Binary files /dev/null and b/test/reference/huge-linear.argb32.ref.png differ
diff --git a/test/reference/huge-linear.egl.argb32.ref.png b/test/reference/huge-linear.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a85078d
Binary files /dev/null and b/test/reference/huge-linear.egl.argb32.ref.png differ
diff --git a/test/reference/huge-linear.mask.argb32.ref.png b/test/reference/huge-linear.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f89217b
Binary files /dev/null and b/test/reference/huge-linear.mask.argb32.ref.png differ
diff --git a/test/reference/huge-linear.mask.rgb24.ref.png b/test/reference/huge-linear.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f89217b
Binary files /dev/null and b/test/reference/huge-linear.mask.rgb24.ref.png differ
diff --git a/test/reference/huge-linear.rgb24.ref.png b/test/reference/huge-linear.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f89217b
Binary files /dev/null and b/test/reference/huge-linear.rgb24.ref.png differ
diff --git a/test/reference/huge-radial.argb32.ref.png b/test/reference/huge-radial.argb32.ref.png
new file mode 100644 (file)
index 0000000..541bb30
Binary files /dev/null and b/test/reference/huge-radial.argb32.ref.png differ
diff --git a/test/reference/huge-radial.egl.argb32.ref.png b/test/reference/huge-radial.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0648e5f
Binary files /dev/null and b/test/reference/huge-radial.egl.argb32.ref.png differ
diff --git a/test/reference/huge-radial.mask.argb32.ref.png b/test/reference/huge-radial.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..541bb30
Binary files /dev/null and b/test/reference/huge-radial.mask.argb32.ref.png differ
diff --git a/test/reference/huge-radial.mask.rgb24.ref.png b/test/reference/huge-radial.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..541bb30
Binary files /dev/null and b/test/reference/huge-radial.mask.rgb24.ref.png differ
diff --git a/test/reference/huge-radial.rgb24.ref.png b/test/reference/huge-radial.rgb24.ref.png
new file mode 100644 (file)
index 0000000..541bb30
Binary files /dev/null and b/test/reference/huge-radial.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-aligned.argb32.ref.png b/test/reference/image-bug-710072-aligned.argb32.ref.png
new file mode 100644 (file)
index 0000000..42abd20
Binary files /dev/null and b/test/reference/image-bug-710072-aligned.argb32.ref.png differ
diff --git a/test/reference/image-bug-710072-aligned.egl.argb32.ref.png b/test/reference/image-bug-710072-aligned.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..78e53d6
Binary files /dev/null and b/test/reference/image-bug-710072-aligned.egl.argb32.ref.png differ
diff --git a/test/reference/image-bug-710072-aligned.mask.argb32.ref.png b/test/reference/image-bug-710072-aligned.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..42abd20
Binary files /dev/null and b/test/reference/image-bug-710072-aligned.mask.argb32.ref.png differ
diff --git a/test/reference/image-bug-710072-aligned.mask.rgb24.ref.png b/test/reference/image-bug-710072-aligned.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..42abd20
Binary files /dev/null and b/test/reference/image-bug-710072-aligned.mask.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-aligned.rgb24.ref.png b/test/reference/image-bug-710072-aligned.rgb24.ref.png
new file mode 100644 (file)
index 0000000..42abd20
Binary files /dev/null and b/test/reference/image-bug-710072-aligned.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-aligned.xlib-fallback.rgb24.ref.png b/test/reference/image-bug-710072-aligned.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..42abd20
Binary files /dev/null and b/test/reference/image-bug-710072-aligned.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-aligned.xlib-window.rgb24.ref.png b/test/reference/image-bug-710072-aligned.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..42abd20
Binary files /dev/null and b/test/reference/image-bug-710072-aligned.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-unaligned.argb32.ref.png b/test/reference/image-bug-710072-unaligned.argb32.ref.png
new file mode 100644 (file)
index 0000000..13efa30
Binary files /dev/null and b/test/reference/image-bug-710072-unaligned.argb32.ref.png differ
diff --git a/test/reference/image-bug-710072-unaligned.egl.argb32.ref.png b/test/reference/image-bug-710072-unaligned.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..396da65
Binary files /dev/null and b/test/reference/image-bug-710072-unaligned.egl.argb32.ref.png differ
diff --git a/test/reference/image-bug-710072-unaligned.mask.argb32.ref.png b/test/reference/image-bug-710072-unaligned.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..13efa30
Binary files /dev/null and b/test/reference/image-bug-710072-unaligned.mask.argb32.ref.png differ
diff --git a/test/reference/image-bug-710072-unaligned.mask.rgb24.ref.png b/test/reference/image-bug-710072-unaligned.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13efa30
Binary files /dev/null and b/test/reference/image-bug-710072-unaligned.mask.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-unaligned.rgb24.ref.png b/test/reference/image-bug-710072-unaligned.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13efa30
Binary files /dev/null and b/test/reference/image-bug-710072-unaligned.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-unaligned.xlib-fallback.rgb24.ref.png b/test/reference/image-bug-710072-unaligned.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a5a6e6
Binary files /dev/null and b/test/reference/image-bug-710072-unaligned.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/image-bug-710072-unaligned.xlib-window.rgb24.ref.png b/test/reference/image-bug-710072-unaligned.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a5a6e6
Binary files /dev/null and b/test/reference/image-bug-710072-unaligned.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/image-surface-source.egl.argb32.ref.png b/test/reference/image-surface-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..908a673
Binary files /dev/null and b/test/reference/image-surface-source.egl.argb32.ref.png differ
diff --git a/test/reference/image-surface-source.mask.argb32.ref.png b/test/reference/image-surface-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/image-surface-source.mask.argb32.ref.png differ
diff --git a/test/reference/image-surface-source.mask.rgb24.ref.png b/test/reference/image-surface-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/image-surface-source.mask.rgb24.ref.png differ
diff --git a/test/reference/image-surface-source.xlib-fallback.rgb24.ref.png b/test/reference/image-surface-source.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/image-surface-source.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/image-surface-source.xlib-window.rgb24.ref.png b/test/reference/image-surface-source.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/image-surface-source.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/implicit-close.argb32.ref.png b/test/reference/implicit-close.argb32.ref.png
new file mode 100644 (file)
index 0000000..f15f8a3
Binary files /dev/null and b/test/reference/implicit-close.argb32.ref.png differ
diff --git a/test/reference/implicit-close.egl.argb32.ref.png b/test/reference/implicit-close.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f15f8a3
Binary files /dev/null and b/test/reference/implicit-close.egl.argb32.ref.png differ
diff --git a/test/reference/implicit-close.mask.argb32.ref.png b/test/reference/implicit-close.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f15f8a3
Binary files /dev/null and b/test/reference/implicit-close.mask.argb32.ref.png differ
diff --git a/test/reference/implicit-close.mask.rgb24.ref.png b/test/reference/implicit-close.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f15f8a3
Binary files /dev/null and b/test/reference/implicit-close.mask.rgb24.ref.png differ
diff --git a/test/reference/implicit-close.rgb24.ref.png b/test/reference/implicit-close.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f15f8a3
Binary files /dev/null and b/test/reference/implicit-close.rgb24.ref.png differ
diff --git a/test/reference/infinite-join.argb32.ref.png b/test/reference/infinite-join.argb32.ref.png
new file mode 100644 (file)
index 0000000..54a9112
Binary files /dev/null and b/test/reference/infinite-join.argb32.ref.png differ
diff --git a/test/reference/infinite-join.egl.argb32.ref.png b/test/reference/infinite-join.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..54a9112
Binary files /dev/null and b/test/reference/infinite-join.egl.argb32.ref.png differ
diff --git a/test/reference/infinite-join.mask.argb32.ref.png b/test/reference/infinite-join.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..54a9112
Binary files /dev/null and b/test/reference/infinite-join.mask.argb32.ref.png differ
diff --git a/test/reference/infinite-join.mask.rgb24.ref.png b/test/reference/infinite-join.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..54a9112
Binary files /dev/null and b/test/reference/infinite-join.mask.rgb24.ref.png differ
diff --git a/test/reference/infinite-join.rgb24.ref.png b/test/reference/infinite-join.rgb24.ref.png
new file mode 100644 (file)
index 0000000..54a9112
Binary files /dev/null and b/test/reference/infinite-join.rgb24.ref.png differ
index 40defe6..b7bbb97 100644 (file)
Binary files a/test/reference/inverse-text.base.argb32.ref.png and b/test/reference/inverse-text.base.argb32.ref.png differ
index 40defe6..b7bbb97 100644 (file)
Binary files a/test/reference/inverse-text.base.rgb24.ref.png and b/test/reference/inverse-text.base.rgb24.ref.png differ
diff --git a/test/reference/inverse-text.mask.argb32.ref.png b/test/reference/inverse-text.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7bbb97
Binary files /dev/null and b/test/reference/inverse-text.mask.argb32.ref.png differ
diff --git a/test/reference/inverse-text.mask.rgb24.ref.png b/test/reference/inverse-text.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b7bbb97
Binary files /dev/null and b/test/reference/inverse-text.mask.rgb24.ref.png differ
index 40defe6..b7bbb97 100644 (file)
Binary files a/test/reference/inverse-text.traps.argb32.ref.png and b/test/reference/inverse-text.traps.argb32.ref.png differ
diff --git a/test/reference/inverse-text.traps.ref.png b/test/reference/inverse-text.traps.ref.png
new file mode 100644 (file)
index 0000000..b7bbb97
Binary files /dev/null and b/test/reference/inverse-text.traps.ref.png differ
index 40defe6..b7bbb97 100644 (file)
Binary files a/test/reference/inverse-text.traps.rgb24.ref.png and b/test/reference/inverse-text.traps.rgb24.ref.png differ
diff --git a/test/reference/inverted-clip.base.xfail.png b/test/reference/inverted-clip.base.xfail.png
new file mode 100644 (file)
index 0000000..080b782
Binary files /dev/null and b/test/reference/inverted-clip.base.xfail.png differ
diff --git a/test/reference/inverted-clip.traps.xfail.png b/test/reference/inverted-clip.traps.xfail.png
new file mode 100644 (file)
index 0000000..5962795
Binary files /dev/null and b/test/reference/inverted-clip.traps.xfail.png differ
diff --git a/test/reference/inverted-clip.xfail.png b/test/reference/inverted-clip.xfail.png
new file mode 100644 (file)
index 0000000..080b782
Binary files /dev/null and b/test/reference/inverted-clip.xfail.png differ
diff --git a/test/reference/joins-loop.argb32.ref.png b/test/reference/joins-loop.argb32.ref.png
new file mode 100644 (file)
index 0000000..8e3f25a
Binary files /dev/null and b/test/reference/joins-loop.argb32.ref.png differ
diff --git a/test/reference/joins-loop.egl.argb32.ref.png b/test/reference/joins-loop.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1e8dfca
Binary files /dev/null and b/test/reference/joins-loop.egl.argb32.ref.png differ
diff --git a/test/reference/joins-loop.mask.argb32.ref.png b/test/reference/joins-loop.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8e3f25a
Binary files /dev/null and b/test/reference/joins-loop.mask.argb32.ref.png differ
diff --git a/test/reference/joins-loop.mask.rgb24.ref.png b/test/reference/joins-loop.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8e3f25a
Binary files /dev/null and b/test/reference/joins-loop.mask.rgb24.ref.png differ
diff --git a/test/reference/joins-loop.rgb24.ref.png b/test/reference/joins-loop.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8e3f25a
Binary files /dev/null and b/test/reference/joins-loop.rgb24.ref.png differ
diff --git a/test/reference/joins-retrace.argb32.ref.png b/test/reference/joins-retrace.argb32.ref.png
new file mode 100644 (file)
index 0000000..22b0ecf
Binary files /dev/null and b/test/reference/joins-retrace.argb32.ref.png differ
diff --git a/test/reference/joins-retrace.egl.argb32.ref.png b/test/reference/joins-retrace.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4ac9dbf
Binary files /dev/null and b/test/reference/joins-retrace.egl.argb32.ref.png differ
diff --git a/test/reference/joins-retrace.mask.argb32.ref.png b/test/reference/joins-retrace.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..22b0ecf
Binary files /dev/null and b/test/reference/joins-retrace.mask.argb32.ref.png differ
diff --git a/test/reference/joins-retrace.mask.rgb24.ref.png b/test/reference/joins-retrace.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22b0ecf
Binary files /dev/null and b/test/reference/joins-retrace.mask.rgb24.ref.png differ
diff --git a/test/reference/joins-retrace.rgb24.ref.png b/test/reference/joins-retrace.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22b0ecf
Binary files /dev/null and b/test/reference/joins-retrace.rgb24.ref.png differ
diff --git a/test/reference/joins-star.argb32.ref.png b/test/reference/joins-star.argb32.ref.png
new file mode 100644 (file)
index 0000000..76a541c
Binary files /dev/null and b/test/reference/joins-star.argb32.ref.png differ
diff --git a/test/reference/joins-star.egl.argb32.ref.png b/test/reference/joins-star.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f32031f
Binary files /dev/null and b/test/reference/joins-star.egl.argb32.ref.png differ
diff --git a/test/reference/joins-star.mask.argb32.ref.png b/test/reference/joins-star.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..76a541c
Binary files /dev/null and b/test/reference/joins-star.mask.argb32.ref.png differ
diff --git a/test/reference/joins-star.mask.rgb24.ref.png b/test/reference/joins-star.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..76a541c
Binary files /dev/null and b/test/reference/joins-star.mask.rgb24.ref.png differ
diff --git a/test/reference/joins-star.rgb24.ref.png b/test/reference/joins-star.rgb24.ref.png
new file mode 100644 (file)
index 0000000..76a541c
Binary files /dev/null and b/test/reference/joins-star.rgb24.ref.png differ
diff --git a/test/reference/joins.argb32.ref.png b/test/reference/joins.argb32.ref.png
new file mode 100644 (file)
index 0000000..a1d069d
Binary files /dev/null and b/test/reference/joins.argb32.ref.png differ
diff --git a/test/reference/joins.egl.argb32.ref.png b/test/reference/joins.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e8ee4a0
Binary files /dev/null and b/test/reference/joins.egl.argb32.ref.png differ
diff --git a/test/reference/joins.mask.argb32.ref.png b/test/reference/joins.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a1d069d
Binary files /dev/null and b/test/reference/joins.mask.argb32.ref.png differ
diff --git a/test/reference/joins.mask.rgb24.ref.png b/test/reference/joins.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a1d069d
Binary files /dev/null and b/test/reference/joins.mask.rgb24.ref.png differ
diff --git a/test/reference/joins.rgb24.ref.png b/test/reference/joins.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a1d069d
Binary files /dev/null and b/test/reference/joins.rgb24.ref.png differ
diff --git a/test/reference/large-clip.argb32.ref.png b/test/reference/large-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/large-clip.argb32.ref.png differ
diff --git a/test/reference/large-clip.egl.argb32.ref.png b/test/reference/large-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/large-clip.egl.argb32.ref.png differ
diff --git a/test/reference/large-clip.mask.argb32.ref.png b/test/reference/large-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/large-clip.mask.argb32.ref.png differ
diff --git a/test/reference/large-clip.mask.rgb24.ref.png b/test/reference/large-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/large-clip.mask.rgb24.ref.png differ
diff --git a/test/reference/large-clip.rgb24.ref.png b/test/reference/large-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/large-clip.rgb24.ref.png differ
diff --git a/test/reference/large-font.argb32.ref.png b/test/reference/large-font.argb32.ref.png
new file mode 100644 (file)
index 0000000..503061a
Binary files /dev/null and b/test/reference/large-font.argb32.ref.png differ
diff --git a/test/reference/large-font.egl.argb32.ref.png b/test/reference/large-font.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..710579a
Binary files /dev/null and b/test/reference/large-font.egl.argb32.ref.png differ
diff --git a/test/reference/large-font.mask.argb32.ref.png b/test/reference/large-font.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..503061a
Binary files /dev/null and b/test/reference/large-font.mask.argb32.ref.png differ
diff --git a/test/reference/large-font.mask.rgb24.ref.png b/test/reference/large-font.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..503061a
Binary files /dev/null and b/test/reference/large-font.mask.rgb24.ref.png differ
diff --git a/test/reference/large-font.rgb24.ref.png b/test/reference/large-font.rgb24.ref.png
new file mode 100644 (file)
index 0000000..503061a
Binary files /dev/null and b/test/reference/large-font.rgb24.ref.png differ
diff --git a/test/reference/large-source-roi.argb32.ref.png b/test/reference/large-source-roi.argb32.ref.png
new file mode 100644 (file)
index 0000000..216a065
Binary files /dev/null and b/test/reference/large-source-roi.argb32.ref.png differ
diff --git a/test/reference/large-source-roi.egl.argb32.ref.png b/test/reference/large-source-roi.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..216a065
Binary files /dev/null and b/test/reference/large-source-roi.egl.argb32.ref.png differ
diff --git a/test/reference/large-source-roi.mask.argb32.ref.png b/test/reference/large-source-roi.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..216a065
Binary files /dev/null and b/test/reference/large-source-roi.mask.argb32.ref.png differ
diff --git a/test/reference/large-source-roi.mask.rgb24.ref.png b/test/reference/large-source-roi.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..216a065
Binary files /dev/null and b/test/reference/large-source-roi.mask.rgb24.ref.png differ
diff --git a/test/reference/large-source-roi.rgb24.ref.png b/test/reference/large-source-roi.rgb24.ref.png
new file mode 100644 (file)
index 0000000..216a065
Binary files /dev/null and b/test/reference/large-source-roi.rgb24.ref.png differ
diff --git a/test/reference/large-source.argb32.ref.png b/test/reference/large-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..a54455f
Binary files /dev/null and b/test/reference/large-source.argb32.ref.png differ
diff --git a/test/reference/large-source.egl.argb32.ref.png b/test/reference/large-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a54455f
Binary files /dev/null and b/test/reference/large-source.egl.argb32.ref.png differ
diff --git a/test/reference/large-source.mask.argb32.ref.png b/test/reference/large-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a54455f
Binary files /dev/null and b/test/reference/large-source.mask.argb32.ref.png differ
diff --git a/test/reference/large-source.mask.rgb24.ref.png b/test/reference/large-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a54455f
Binary files /dev/null and b/test/reference/large-source.mask.rgb24.ref.png differ
diff --git a/test/reference/large-source.rgb24.ref.png b/test/reference/large-source.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a54455f
Binary files /dev/null and b/test/reference/large-source.rgb24.ref.png differ
diff --git a/test/reference/large-twin-antialias-mixed.argb32.ref.png b/test/reference/large-twin-antialias-mixed.argb32.ref.png
new file mode 100644 (file)
index 0000000..ace463b
Binary files /dev/null and b/test/reference/large-twin-antialias-mixed.argb32.ref.png differ
index 456e81d..ace463b 100644 (file)
Binary files a/test/reference/large-twin-antialias-mixed.base.argb32.ref.png and b/test/reference/large-twin-antialias-mixed.base.argb32.ref.png differ
index 456e81d..ace463b 100644 (file)
Binary files a/test/reference/large-twin-antialias-mixed.base.rgb24.ref.png and b/test/reference/large-twin-antialias-mixed.base.rgb24.ref.png differ
diff --git a/test/reference/large-twin-antialias-mixed.egl.argb32.ref.png b/test/reference/large-twin-antialias-mixed.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5f4e51d
Binary files /dev/null and b/test/reference/large-twin-antialias-mixed.egl.argb32.ref.png differ
diff --git a/test/reference/large-twin-antialias-mixed.mask.argb32.ref.png b/test/reference/large-twin-antialias-mixed.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ace463b
Binary files /dev/null and b/test/reference/large-twin-antialias-mixed.mask.argb32.ref.png differ
diff --git a/test/reference/large-twin-antialias-mixed.mask.rgb24.ref.png b/test/reference/large-twin-antialias-mixed.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ace463b
Binary files /dev/null and b/test/reference/large-twin-antialias-mixed.mask.rgb24.ref.png differ
diff --git a/test/reference/large-twin-antialias-mixed.rgb24.ref.png b/test/reference/large-twin-antialias-mixed.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ace463b
Binary files /dev/null and b/test/reference/large-twin-antialias-mixed.rgb24.ref.png differ
index 456e81d..ace463b 100644 (file)
Binary files a/test/reference/large-twin-antialias-mixed.traps.argb32.ref.png and b/test/reference/large-twin-antialias-mixed.traps.argb32.ref.png differ
index 456e81d..ace463b 100644 (file)
Binary files a/test/reference/large-twin-antialias-mixed.traps.rgb24.ref.png and b/test/reference/large-twin-antialias-mixed.traps.rgb24.ref.png differ
diff --git a/test/reference/leaky-dash.argb32.ref.png b/test/reference/leaky-dash.argb32.ref.png
new file mode 100644 (file)
index 0000000..0973ece
Binary files /dev/null and b/test/reference/leaky-dash.argb32.ref.png differ
diff --git a/test/reference/leaky-dash.egl.argb32.ref.png b/test/reference/leaky-dash.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0973ece
Binary files /dev/null and b/test/reference/leaky-dash.egl.argb32.ref.png differ
diff --git a/test/reference/leaky-dash.mask.argb32.ref.png b/test/reference/leaky-dash.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0973ece
Binary files /dev/null and b/test/reference/leaky-dash.mask.argb32.ref.png differ
diff --git a/test/reference/leaky-dash.mask.rgb24.ref.png b/test/reference/leaky-dash.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0973ece
Binary files /dev/null and b/test/reference/leaky-dash.mask.rgb24.ref.png differ
diff --git a/test/reference/leaky-dash.rgb24.ref.png b/test/reference/leaky-dash.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0973ece
Binary files /dev/null and b/test/reference/leaky-dash.rgb24.ref.png differ
diff --git a/test/reference/leaky-dashed-rectangle.argb32.ref.png b/test/reference/leaky-dashed-rectangle.argb32.ref.png
new file mode 100644 (file)
index 0000000..05f4584
Binary files /dev/null and b/test/reference/leaky-dashed-rectangle.argb32.ref.png differ
diff --git a/test/reference/leaky-dashed-rectangle.egl.argb32.ref.png b/test/reference/leaky-dashed-rectangle.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2cf3348
Binary files /dev/null and b/test/reference/leaky-dashed-rectangle.egl.argb32.ref.png differ
diff --git a/test/reference/leaky-dashed-rectangle.mask.argb32.ref.png b/test/reference/leaky-dashed-rectangle.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..05f4584
Binary files /dev/null and b/test/reference/leaky-dashed-rectangle.mask.argb32.ref.png differ
diff --git a/test/reference/leaky-dashed-rectangle.mask.rgb24.ref.png b/test/reference/leaky-dashed-rectangle.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..05f4584
Binary files /dev/null and b/test/reference/leaky-dashed-rectangle.mask.rgb24.ref.png differ
diff --git a/test/reference/leaky-dashed-rectangle.rgb24.ref.png b/test/reference/leaky-dashed-rectangle.rgb24.ref.png
new file mode 100644 (file)
index 0000000..05f4584
Binary files /dev/null and b/test/reference/leaky-dashed-rectangle.rgb24.ref.png differ
diff --git a/test/reference/leaky-dashed-stroke.argb32.ref.png b/test/reference/leaky-dashed-stroke.argb32.ref.png
new file mode 100644 (file)
index 0000000..ae64dae
Binary files /dev/null and b/test/reference/leaky-dashed-stroke.argb32.ref.png differ
diff --git a/test/reference/leaky-dashed-stroke.egl.argb32.ref.png b/test/reference/leaky-dashed-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6580b01
Binary files /dev/null and b/test/reference/leaky-dashed-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/leaky-dashed-stroke.mask.argb32.ref.png b/test/reference/leaky-dashed-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ae64dae
Binary files /dev/null and b/test/reference/leaky-dashed-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/leaky-dashed-stroke.mask.rgb24.ref.png b/test/reference/leaky-dashed-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ae64dae
Binary files /dev/null and b/test/reference/leaky-dashed-stroke.mask.rgb24.ref.png differ
diff --git a/test/reference/leaky-dashed-stroke.rgb24.ref.png b/test/reference/leaky-dashed-stroke.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ae64dae
Binary files /dev/null and b/test/reference/leaky-dashed-stroke.rgb24.ref.png differ
diff --git a/test/reference/leaky-polygon.argb32.ref.png b/test/reference/leaky-polygon.argb32.ref.png
new file mode 100644 (file)
index 0000000..d2a06a3
Binary files /dev/null and b/test/reference/leaky-polygon.argb32.ref.png differ
diff --git a/test/reference/leaky-polygon.egl.argb32.ref.png b/test/reference/leaky-polygon.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d2a06a3
Binary files /dev/null and b/test/reference/leaky-polygon.egl.argb32.ref.png differ
diff --git a/test/reference/leaky-polygon.mask.argb32.ref.png b/test/reference/leaky-polygon.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d2a06a3
Binary files /dev/null and b/test/reference/leaky-polygon.mask.argb32.ref.png differ
diff --git a/test/reference/leaky-polygon.mask.rgb24.ref.png b/test/reference/leaky-polygon.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d2a06a3
Binary files /dev/null and b/test/reference/leaky-polygon.mask.rgb24.ref.png differ
diff --git a/test/reference/leaky-polygon.rgb24.ref.png b/test/reference/leaky-polygon.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d2a06a3
Binary files /dev/null and b/test/reference/leaky-polygon.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-dashed.base.argb32.ref.png b/test/reference/line-width-large-overlap-dashed.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..e6cdcc2
Binary files /dev/null and b/test/reference/line-width-large-overlap-dashed.base.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-dashed.base.rgb24.ref.png b/test/reference/line-width-large-overlap-dashed.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e6cdcc2
Binary files /dev/null and b/test/reference/line-width-large-overlap-dashed.base.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-dashed.egl.argb32.ref.png b/test/reference/line-width-large-overlap-dashed.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..12379ac
Binary files /dev/null and b/test/reference/line-width-large-overlap-dashed.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-dashed.mask.argb32.ref.png b/test/reference/line-width-large-overlap-dashed.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cd4d31
Binary files /dev/null and b/test/reference/line-width-large-overlap-dashed.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-dashed.mask.rgb24.ref.png b/test/reference/line-width-large-overlap-dashed.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8cd4d31
Binary files /dev/null and b/test/reference/line-width-large-overlap-dashed.mask.rgb24.ref.png differ
index e6cdcc2..12379ac 100644 (file)
Binary files a/test/reference/line-width-large-overlap-dashed.ref.png and b/test/reference/line-width-large-overlap-dashed.ref.png differ
diff --git a/test/reference/line-width-large-overlap-dashed.traps.argb32.ref.png b/test/reference/line-width-large-overlap-dashed.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cd4d31
Binary files /dev/null and b/test/reference/line-width-large-overlap-dashed.traps.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-dashed.traps.rgb24.ref.png b/test/reference/line-width-large-overlap-dashed.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8cd4d31
Binary files /dev/null and b/test/reference/line-width-large-overlap-dashed.traps.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.argb32.ref.png b/test/reference/line-width-large-overlap-flipped.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.base.argb32.ref.png b/test/reference/line-width-large-overlap-flipped.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.base.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.base.rgb24.ref.png b/test/reference/line-width-large-overlap-flipped.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.base.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.egl.argb32.ref.png b/test/reference/line-width-large-overlap-flipped.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.mask.argb32.ref.png b/test/reference/line-width-large-overlap-flipped.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.mask.rgb24.ref.png b/test/reference/line-width-large-overlap-flipped.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.rgb24.ref.png b/test/reference/line-width-large-overlap-flipped.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.traps.argb32.ref.png b/test/reference/line-width-large-overlap-flipped.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.traps.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flipped.traps.rgb24.ref.png b/test/reference/line-width-large-overlap-flipped.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flipped.traps.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.argb32.ref.png b/test/reference/line-width-large-overlap-flopped.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.base.argb32.ref.png b/test/reference/line-width-large-overlap-flopped.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.base.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.base.rgb24.ref.png b/test/reference/line-width-large-overlap-flopped.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.base.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.egl.argb32.ref.png b/test/reference/line-width-large-overlap-flopped.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.mask.argb32.ref.png b/test/reference/line-width-large-overlap-flopped.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.mask.rgb24.ref.png b/test/reference/line-width-large-overlap-flopped.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.rgb24.ref.png b/test/reference/line-width-large-overlap-flopped.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.traps.argb32.ref.png b/test/reference/line-width-large-overlap-flopped.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.traps.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-flopped.traps.rgb24.ref.png b/test/reference/line-width-large-overlap-flopped.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-flopped.traps.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.argb32.ref.png b/test/reference/line-width-large-overlap-offset.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.base.argb32.ref.png b/test/reference/line-width-large-overlap-offset.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.base.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.base.rgb24.ref.png b/test/reference/line-width-large-overlap-offset.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.base.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.egl.argb32.ref.png b/test/reference/line-width-large-overlap-offset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.mask.argb32.ref.png b/test/reference/line-width-large-overlap-offset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.mask.rgb24.ref.png b/test/reference/line-width-large-overlap-offset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.rgb24.ref.png b/test/reference/line-width-large-overlap-offset.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.traps.argb32.ref.png b/test/reference/line-width-large-overlap-offset.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.traps.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-offset.traps.rgb24.ref.png b/test/reference/line-width-large-overlap-offset.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap-offset.traps.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.argb32.ref.png b/test/reference/line-width-large-overlap-rotated.argb32.ref.png
new file mode 100644 (file)
index 0000000..35dca5c
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.base.argb32.ref.png b/test/reference/line-width-large-overlap-rotated.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..87fe752
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.base.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.base.rgb24.ref.png b/test/reference/line-width-large-overlap-rotated.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..87fe752
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.base.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.egl.argb32.ref.png b/test/reference/line-width-large-overlap-rotated.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5275cb6
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.mask.argb32.ref.png b/test/reference/line-width-large-overlap-rotated.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..35dca5c
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.mask.rgb24.ref.png b/test/reference/line-width-large-overlap-rotated.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..35dca5c
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.rgb24.ref.png b/test/reference/line-width-large-overlap-rotated.rgb24.ref.png
new file mode 100644 (file)
index 0000000..35dca5c
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.traps.argb32.ref.png b/test/reference/line-width-large-overlap-rotated.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..35dca5c
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.traps.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap-rotated.traps.rgb24.ref.png b/test/reference/line-width-large-overlap-rotated.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..35dca5c
Binary files /dev/null and b/test/reference/line-width-large-overlap-rotated.traps.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap.argb32.ref.png b/test/reference/line-width-large-overlap.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap.base.argb32.ref.png b/test/reference/line-width-large-overlap.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.base.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap.base.rgb24.ref.png b/test/reference/line-width-large-overlap.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.base.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap.egl.argb32.ref.png b/test/reference/line-width-large-overlap.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap.mask.argb32.ref.png b/test/reference/line-width-large-overlap.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap.mask.rgb24.ref.png b/test/reference/line-width-large-overlap.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap.rgb24.ref.png b/test/reference/line-width-large-overlap.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.rgb24.ref.png differ
diff --git a/test/reference/line-width-large-overlap.traps.argb32.ref.png b/test/reference/line-width-large-overlap.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.traps.argb32.ref.png differ
diff --git a/test/reference/line-width-large-overlap.traps.rgb24.ref.png b/test/reference/line-width-large-overlap.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3c3464b
Binary files /dev/null and b/test/reference/line-width-large-overlap.traps.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-dashed.egl.argb32.ref.png b/test/reference/line-width-overlap-dashed.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..065d699
Binary files /dev/null and b/test/reference/line-width-overlap-dashed.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-dashed.mask.argb32.ref.png b/test/reference/line-width-overlap-dashed.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0de187d
Binary files /dev/null and b/test/reference/line-width-overlap-dashed.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-dashed.mask.rgb24.ref.png b/test/reference/line-width-overlap-dashed.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0de187d
Binary files /dev/null and b/test/reference/line-width-overlap-dashed.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-dashed.ref.png b/test/reference/line-width-overlap-dashed.ref.png
new file mode 100644 (file)
index 0000000..065d699
Binary files /dev/null and b/test/reference/line-width-overlap-dashed.ref.png differ
diff --git a/test/reference/line-width-overlap-flipped.argb32.ref.png b/test/reference/line-width-overlap-flipped.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flipped.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-flipped.egl.argb32.ref.png b/test/reference/line-width-overlap-flipped.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flipped.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-flipped.mask.argb32.ref.png b/test/reference/line-width-overlap-flipped.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flipped.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-flipped.mask.rgb24.ref.png b/test/reference/line-width-overlap-flipped.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flipped.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-flipped.rgb24.ref.png b/test/reference/line-width-overlap-flipped.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flipped.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-flopped.argb32.ref.png b/test/reference/line-width-overlap-flopped.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flopped.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-flopped.egl.argb32.ref.png b/test/reference/line-width-overlap-flopped.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flopped.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-flopped.mask.argb32.ref.png b/test/reference/line-width-overlap-flopped.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flopped.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-flopped.mask.rgb24.ref.png b/test/reference/line-width-overlap-flopped.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flopped.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-flopped.rgb24.ref.png b/test/reference/line-width-overlap-flopped.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap-flopped.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-offset.argb32.ref.png b/test/reference/line-width-overlap-offset.argb32.ref.png
new file mode 100644 (file)
index 0000000..eafa50b
Binary files /dev/null and b/test/reference/line-width-overlap-offset.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-offset.egl.argb32.ref.png b/test/reference/line-width-overlap-offset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..eafa50b
Binary files /dev/null and b/test/reference/line-width-overlap-offset.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-offset.mask.argb32.ref.png b/test/reference/line-width-overlap-offset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..eafa50b
Binary files /dev/null and b/test/reference/line-width-overlap-offset.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-offset.mask.rgb24.ref.png b/test/reference/line-width-overlap-offset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..eafa50b
Binary files /dev/null and b/test/reference/line-width-overlap-offset.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-offset.rgb24.ref.png b/test/reference/line-width-overlap-offset.rgb24.ref.png
new file mode 100644 (file)
index 0000000..eafa50b
Binary files /dev/null and b/test/reference/line-width-overlap-offset.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-offset.traps.argb32.ref.png b/test/reference/line-width-overlap-offset.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..13a138b
Binary files /dev/null and b/test/reference/line-width-overlap-offset.traps.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-offset.traps.rgb24.ref.png b/test/reference/line-width-overlap-offset.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13a138b
Binary files /dev/null and b/test/reference/line-width-overlap-offset.traps.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-rotated.argb32.ref.png b/test/reference/line-width-overlap-rotated.argb32.ref.png
new file mode 100644 (file)
index 0000000..619a593
Binary files /dev/null and b/test/reference/line-width-overlap-rotated.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-rotated.egl.argb32.ref.png b/test/reference/line-width-overlap-rotated.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0f45156
Binary files /dev/null and b/test/reference/line-width-overlap-rotated.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-rotated.mask.argb32.ref.png b/test/reference/line-width-overlap-rotated.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..619a593
Binary files /dev/null and b/test/reference/line-width-overlap-rotated.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap-rotated.mask.rgb24.ref.png b/test/reference/line-width-overlap-rotated.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..619a593
Binary files /dev/null and b/test/reference/line-width-overlap-rotated.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap-rotated.rgb24.ref.png b/test/reference/line-width-overlap-rotated.rgb24.ref.png
new file mode 100644 (file)
index 0000000..619a593
Binary files /dev/null and b/test/reference/line-width-overlap-rotated.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap.argb32.ref.png b/test/reference/line-width-overlap.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap.egl.argb32.ref.png b/test/reference/line-width-overlap.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap.mask.argb32.ref.png b/test/reference/line-width-overlap.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-overlap.mask.rgb24.ref.png b/test/reference/line-width-overlap.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-overlap.rgb24.ref.png b/test/reference/line-width-overlap.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13d70c8
Binary files /dev/null and b/test/reference/line-width-overlap.rgb24.ref.png differ
diff --git a/test/reference/line-width-scale.argb32.ref.png b/test/reference/line-width-scale.argb32.ref.png
new file mode 100644 (file)
index 0000000..5767bc7
Binary files /dev/null and b/test/reference/line-width-scale.argb32.ref.png differ
diff --git a/test/reference/line-width-scale.egl.argb32.ref.png b/test/reference/line-width-scale.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..99677f4
Binary files /dev/null and b/test/reference/line-width-scale.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-scale.mask.argb32.ref.png b/test/reference/line-width-scale.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5767bc7
Binary files /dev/null and b/test/reference/line-width-scale.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-scale.mask.rgb24.ref.png b/test/reference/line-width-scale.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5767bc7
Binary files /dev/null and b/test/reference/line-width-scale.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-scale.rgb24.ref.png b/test/reference/line-width-scale.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5767bc7
Binary files /dev/null and b/test/reference/line-width-scale.rgb24.ref.png differ
diff --git a/test/reference/line-width-tolerance.argb32.ref.png b/test/reference/line-width-tolerance.argb32.ref.png
new file mode 100644 (file)
index 0000000..9c4d439
Binary files /dev/null and b/test/reference/line-width-tolerance.argb32.ref.png differ
diff --git a/test/reference/line-width-tolerance.egl.argb32.ref.png b/test/reference/line-width-tolerance.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9c4d439
Binary files /dev/null and b/test/reference/line-width-tolerance.egl.argb32.ref.png differ
diff --git a/test/reference/line-width-tolerance.mask.argb32.ref.png b/test/reference/line-width-tolerance.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9c4d439
Binary files /dev/null and b/test/reference/line-width-tolerance.mask.argb32.ref.png differ
diff --git a/test/reference/line-width-tolerance.mask.rgb24.ref.png b/test/reference/line-width-tolerance.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9c4d439
Binary files /dev/null and b/test/reference/line-width-tolerance.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width-tolerance.rgb24.ref.png b/test/reference/line-width-tolerance.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9c4d439
Binary files /dev/null and b/test/reference/line-width-tolerance.rgb24.ref.png differ
diff --git a/test/reference/line-width.argb32.ref.png b/test/reference/line-width.argb32.ref.png
new file mode 100644 (file)
index 0000000..2a78828
Binary files /dev/null and b/test/reference/line-width.argb32.ref.png differ
diff --git a/test/reference/line-width.egl.argb32.ref.png b/test/reference/line-width.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2a78828
Binary files /dev/null and b/test/reference/line-width.egl.argb32.ref.png differ
diff --git a/test/reference/line-width.mask.argb32.ref.png b/test/reference/line-width.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2a78828
Binary files /dev/null and b/test/reference/line-width.mask.argb32.ref.png differ
diff --git a/test/reference/line-width.mask.rgb24.ref.png b/test/reference/line-width.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2a78828
Binary files /dev/null and b/test/reference/line-width.mask.rgb24.ref.png differ
diff --git a/test/reference/line-width.rgb24.ref.png b/test/reference/line-width.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2a78828
Binary files /dev/null and b/test/reference/line-width.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-extend.argb32.ref.png b/test/reference/linear-gradient-extend.argb32.ref.png
new file mode 100644 (file)
index 0000000..79ce747
Binary files /dev/null and b/test/reference/linear-gradient-extend.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-extend.egl.argb32.ref.png b/test/reference/linear-gradient-extend.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..79ce747
Binary files /dev/null and b/test/reference/linear-gradient-extend.egl.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-extend.mask.argb32.ref.png b/test/reference/linear-gradient-extend.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..79ce747
Binary files /dev/null and b/test/reference/linear-gradient-extend.mask.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-extend.mask.rgb24.ref.png b/test/reference/linear-gradient-extend.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..79ce747
Binary files /dev/null and b/test/reference/linear-gradient-extend.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-extend.rgb24.ref.png b/test/reference/linear-gradient-extend.rgb24.ref.png
new file mode 100644 (file)
index 0000000..79ce747
Binary files /dev/null and b/test/reference/linear-gradient-extend.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-large.argb32.ref.png b/test/reference/linear-gradient-large.argb32.ref.png
new file mode 100644 (file)
index 0000000..f1f37ab
Binary files /dev/null and b/test/reference/linear-gradient-large.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-large.egl.argb32.ref.png b/test/reference/linear-gradient-large.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ae995a9
Binary files /dev/null and b/test/reference/linear-gradient-large.egl.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-large.mask.argb32.ref.png b/test/reference/linear-gradient-large.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f1f37ab
Binary files /dev/null and b/test/reference/linear-gradient-large.mask.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-large.mask.rgb24.ref.png b/test/reference/linear-gradient-large.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f1f37ab
Binary files /dev/null and b/test/reference/linear-gradient-large.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-large.rgb24.ref.png b/test/reference/linear-gradient-large.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f1f37ab
Binary files /dev/null and b/test/reference/linear-gradient-large.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-one-stop.egl.argb32.ref.png b/test/reference/linear-gradient-one-stop.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..da02fda
Binary files /dev/null and b/test/reference/linear-gradient-one-stop.egl.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-one-stop.mask.argb32.ref.png b/test/reference/linear-gradient-one-stop.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..da02fda
Binary files /dev/null and b/test/reference/linear-gradient-one-stop.mask.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-one-stop.mask.rgb24.ref.png b/test/reference/linear-gradient-one-stop.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..efc12ee
Binary files /dev/null and b/test/reference/linear-gradient-one-stop.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-reflect.argb32.ref.png b/test/reference/linear-gradient-reflect.argb32.ref.png
new file mode 100644 (file)
index 0000000..b68dccb
Binary files /dev/null and b/test/reference/linear-gradient-reflect.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-reflect.egl.argb32.ref.png b/test/reference/linear-gradient-reflect.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c3e035c
Binary files /dev/null and b/test/reference/linear-gradient-reflect.egl.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-reflect.mask.argb32.ref.png b/test/reference/linear-gradient-reflect.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b68dccb
Binary files /dev/null and b/test/reference/linear-gradient-reflect.mask.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-reflect.mask.rgb24.ref.png b/test/reference/linear-gradient-reflect.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b68dccb
Binary files /dev/null and b/test/reference/linear-gradient-reflect.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-reflect.rgb24.ref.png b/test/reference/linear-gradient-reflect.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b68dccb
Binary files /dev/null and b/test/reference/linear-gradient-reflect.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-subset.argb32.ref.png b/test/reference/linear-gradient-subset.argb32.ref.png
new file mode 100644 (file)
index 0000000..3d30d0a
Binary files /dev/null and b/test/reference/linear-gradient-subset.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-subset.egl.argb32.ref.png b/test/reference/linear-gradient-subset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9ab8c38
Binary files /dev/null and b/test/reference/linear-gradient-subset.egl.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-subset.mask.argb32.ref.png b/test/reference/linear-gradient-subset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3d30d0a
Binary files /dev/null and b/test/reference/linear-gradient-subset.mask.argb32.ref.png differ
diff --git a/test/reference/linear-gradient-subset.mask.rgb24.ref.png b/test/reference/linear-gradient-subset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3d30d0a
Binary files /dev/null and b/test/reference/linear-gradient-subset.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient-subset.rgb24.ref.png b/test/reference/linear-gradient-subset.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3d30d0a
Binary files /dev/null and b/test/reference/linear-gradient-subset.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient.argb32.ref.png b/test/reference/linear-gradient.argb32.ref.png
new file mode 100644 (file)
index 0000000..3f78c52
Binary files /dev/null and b/test/reference/linear-gradient.argb32.ref.png differ
diff --git a/test/reference/linear-gradient.egl.argb32.ref.png b/test/reference/linear-gradient.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c28345d
Binary files /dev/null and b/test/reference/linear-gradient.egl.argb32.ref.png differ
diff --git a/test/reference/linear-gradient.mask.argb32.ref.png b/test/reference/linear-gradient.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3f78c52
Binary files /dev/null and b/test/reference/linear-gradient.mask.argb32.ref.png differ
diff --git a/test/reference/linear-gradient.mask.rgb24.ref.png b/test/reference/linear-gradient.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3f78c52
Binary files /dev/null and b/test/reference/linear-gradient.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-gradient.rgb24.ref.png b/test/reference/linear-gradient.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3f78c52
Binary files /dev/null and b/test/reference/linear-gradient.rgb24.ref.png differ
diff --git a/test/reference/linear-step-function.egl.argb32.ref.png b/test/reference/linear-step-function.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..542c944
Binary files /dev/null and b/test/reference/linear-step-function.egl.argb32.ref.png differ
diff --git a/test/reference/linear-step-function.mask.argb32.ref.png b/test/reference/linear-step-function.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0ed126e
Binary files /dev/null and b/test/reference/linear-step-function.mask.argb32.ref.png differ
diff --git a/test/reference/linear-step-function.mask.rgb24.ref.png b/test/reference/linear-step-function.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0ed126e
Binary files /dev/null and b/test/reference/linear-step-function.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-uniform.argb32.ref.png b/test/reference/linear-uniform.argb32.ref.png
new file mode 100644 (file)
index 0000000..94ca336
Binary files /dev/null and b/test/reference/linear-uniform.argb32.ref.png differ
diff --git a/test/reference/linear-uniform.egl.argb32.ref.png b/test/reference/linear-uniform.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..10f4fbf
Binary files /dev/null and b/test/reference/linear-uniform.egl.argb32.ref.png differ
diff --git a/test/reference/linear-uniform.mask.argb32.ref.png b/test/reference/linear-uniform.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..94ca336
Binary files /dev/null and b/test/reference/linear-uniform.mask.argb32.ref.png differ
diff --git a/test/reference/linear-uniform.mask.rgb24.ref.png b/test/reference/linear-uniform.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..94ca336
Binary files /dev/null and b/test/reference/linear-uniform.mask.rgb24.ref.png differ
diff --git a/test/reference/linear-uniform.rgb24.ref.png b/test/reference/linear-uniform.rgb24.ref.png
new file mode 100644 (file)
index 0000000..94ca336
Binary files /dev/null and b/test/reference/linear-uniform.rgb24.ref.png differ
diff --git a/test/reference/long-dashed-lines.argb32.ref.png b/test/reference/long-dashed-lines.argb32.ref.png
new file mode 100644 (file)
index 0000000..9c7208c
Binary files /dev/null and b/test/reference/long-dashed-lines.argb32.ref.png differ
diff --git a/test/reference/long-dashed-lines.egl.argb32.ref.png b/test/reference/long-dashed-lines.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..30be270
Binary files /dev/null and b/test/reference/long-dashed-lines.egl.argb32.ref.png differ
diff --git a/test/reference/long-dashed-lines.mask.argb32.ref.png b/test/reference/long-dashed-lines.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9c7208c
Binary files /dev/null and b/test/reference/long-dashed-lines.mask.argb32.ref.png differ
diff --git a/test/reference/long-dashed-lines.mask.rgb24.ref.png b/test/reference/long-dashed-lines.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9c7208c
Binary files /dev/null and b/test/reference/long-dashed-lines.mask.rgb24.ref.png differ
diff --git a/test/reference/long-dashed-lines.rgb24.ref.png b/test/reference/long-dashed-lines.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9c7208c
Binary files /dev/null and b/test/reference/long-dashed-lines.rgb24.ref.png differ
diff --git a/test/reference/long-lines.egl.argb32.ref.png b/test/reference/long-lines.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..fe91163
Binary files /dev/null and b/test/reference/long-lines.egl.argb32.ref.png differ
diff --git a/test/reference/long-lines.mask.argb32.ref.png b/test/reference/long-lines.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..fe91163
Binary files /dev/null and b/test/reference/long-lines.mask.argb32.ref.png differ
diff --git a/test/reference/long-lines.mask.rgb24.ref.png b/test/reference/long-lines.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fe91163
Binary files /dev/null and b/test/reference/long-lines.mask.rgb24.ref.png differ
diff --git a/test/reference/map-all-to-image.argb32.ref.png b/test/reference/map-all-to-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-image.argb32.ref.png differ
diff --git a/test/reference/map-all-to-image.mask.argb32.ref.png b/test/reference/map-all-to-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-image.mask.argb32.ref.png differ
diff --git a/test/reference/map-all-to-image.mask.rgb24.ref.png b/test/reference/map-all-to-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-image.mask.rgb24.ref.png differ
diff --git a/test/reference/map-all-to-image.rgb24.ref.png b/test/reference/map-all-to-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-image.rgb24.ref.png differ
diff --git a/test/reference/map-all-to-xlib-fallback.rgb24.ref.png b/test/reference/map-all-to-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/map-all-to-xlib-window.rgb24.ref.png b/test/reference/map-all-to-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/map-all-to-xlib.argb32.ref.png b/test/reference/map-all-to-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-xlib.argb32.ref.png differ
diff --git a/test/reference/map-all-to-xlib.rgb24.ref.png b/test/reference/map-all-to-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c56d969
Binary files /dev/null and b/test/reference/map-all-to-xlib.rgb24.ref.png differ
diff --git a/test/reference/map-bit-to-image.argb32.ref.png b/test/reference/map-bit-to-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-image.argb32.ref.png differ
diff --git a/test/reference/map-bit-to-image.mask.argb32.ref.png b/test/reference/map-bit-to-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-image.mask.argb32.ref.png differ
diff --git a/test/reference/map-bit-to-image.mask.rgb24.ref.png b/test/reference/map-bit-to-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-image.mask.rgb24.ref.png differ
diff --git a/test/reference/map-bit-to-image.rgb24.ref.png b/test/reference/map-bit-to-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-image.rgb24.ref.png differ
diff --git a/test/reference/map-bit-to-xlib-fallback.rgb24.ref.png b/test/reference/map-bit-to-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/map-bit-to-xlib-window.rgb24.ref.png b/test/reference/map-bit-to-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/map-bit-to-xlib.argb32.ref.png b/test/reference/map-bit-to-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-xlib.argb32.ref.png differ
diff --git a/test/reference/map-bit-to-xlib.rgb24.ref.png b/test/reference/map-bit-to-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b42dcb6
Binary files /dev/null and b/test/reference/map-bit-to-xlib.rgb24.ref.png differ
diff --git a/test/reference/map-to-image-fill.argb32.ref.png b/test/reference/map-to-image-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..c2893e0
Binary files /dev/null and b/test/reference/map-to-image-fill.argb32.ref.png differ
diff --git a/test/reference/map-to-image-fill.egl.argb32.ref.png b/test/reference/map-to-image-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c2893e0
Binary files /dev/null and b/test/reference/map-to-image-fill.egl.argb32.ref.png differ
diff --git a/test/reference/map-to-image-fill.mask.argb32.ref.png b/test/reference/map-to-image-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c2893e0
Binary files /dev/null and b/test/reference/map-to-image-fill.mask.argb32.ref.png differ
diff --git a/test/reference/map-to-image-fill.mask.rgb24.ref.png b/test/reference/map-to-image-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c2893e0
Binary files /dev/null and b/test/reference/map-to-image-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/map-to-image-fill.rgb24.ref.png b/test/reference/map-to-image-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c2893e0
Binary files /dev/null and b/test/reference/map-to-image-fill.rgb24.ref.png differ
diff --git a/test/reference/map-to-image-fill.xlib-fallback.rgb24.ref.png b/test/reference/map-to-image-fill.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c2893e0
Binary files /dev/null and b/test/reference/map-to-image-fill.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/map-to-image-fill.xlib-window.rgb24.ref.png b/test/reference/map-to-image-fill.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c2893e0
Binary files /dev/null and b/test/reference/map-to-image-fill.xlib-window.rgb24.ref.png differ
index 203b8d1..20f0663 100644 (file)
Binary files a/test/reference/mask-alpha.argb32.ref.png and b/test/reference/mask-alpha.argb32.ref.png differ
diff --git a/test/reference/mask-alpha.egl.argb32.ref.png b/test/reference/mask-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..84ae085
Binary files /dev/null and b/test/reference/mask-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/mask-alpha.mask.argb32.ref.png b/test/reference/mask-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..20f0663
Binary files /dev/null and b/test/reference/mask-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/mask-alpha.mask.rgb24.ref.png b/test/reference/mask-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..df7a0c1
Binary files /dev/null and b/test/reference/mask-alpha.mask.rgb24.ref.png differ
index 070ddf8..df7a0c1 100644 (file)
Binary files a/test/reference/mask-alpha.rgb24.ref.png and b/test/reference/mask-alpha.rgb24.ref.png differ
diff --git a/test/reference/mask-ctm.argb32.ref.png b/test/reference/mask-ctm.argb32.ref.png
new file mode 100644 (file)
index 0000000..07d903d
Binary files /dev/null and b/test/reference/mask-ctm.argb32.ref.png differ
diff --git a/test/reference/mask-ctm.egl.argb32.ref.png b/test/reference/mask-ctm.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..07d903d
Binary files /dev/null and b/test/reference/mask-ctm.egl.argb32.ref.png differ
diff --git a/test/reference/mask-ctm.mask.argb32.ref.png b/test/reference/mask-ctm.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..07d903d
Binary files /dev/null and b/test/reference/mask-ctm.mask.argb32.ref.png differ
diff --git a/test/reference/mask-ctm.mask.rgb24.ref.png b/test/reference/mask-ctm.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..de3fa09
Binary files /dev/null and b/test/reference/mask-ctm.mask.rgb24.ref.png differ
index 266cb0d..de3fa09 100644 (file)
Binary files a/test/reference/mask-ctm.rgb24.ref.png and b/test/reference/mask-ctm.rgb24.ref.png differ
diff --git a/test/reference/mask-surface-ctm.argb32.ref.png b/test/reference/mask-surface-ctm.argb32.ref.png
new file mode 100644 (file)
index 0000000..07d903d
Binary files /dev/null and b/test/reference/mask-surface-ctm.argb32.ref.png differ
diff --git a/test/reference/mask-surface-ctm.egl.argb32.ref.png b/test/reference/mask-surface-ctm.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..07d903d
Binary files /dev/null and b/test/reference/mask-surface-ctm.egl.argb32.ref.png differ
diff --git a/test/reference/mask-surface-ctm.mask.argb32.ref.png b/test/reference/mask-surface-ctm.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..07d903d
Binary files /dev/null and b/test/reference/mask-surface-ctm.mask.argb32.ref.png differ
diff --git a/test/reference/mask-surface-ctm.mask.rgb24.ref.png b/test/reference/mask-surface-ctm.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..de3fa09
Binary files /dev/null and b/test/reference/mask-surface-ctm.mask.rgb24.ref.png differ
index a2bdc61..de3fa09 100644 (file)
Binary files a/test/reference/mask-surface-ctm.rgb24.ref.png and b/test/reference/mask-surface-ctm.rgb24.ref.png differ
diff --git a/test/reference/mask-transformed-image.argb32.ref.png b/test/reference/mask-transformed-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-image.argb32.ref.png differ
diff --git a/test/reference/mask-transformed-image.egl.argb32.ref.png b/test/reference/mask-transformed-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b4f3213
Binary files /dev/null and b/test/reference/mask-transformed-image.egl.argb32.ref.png differ
diff --git a/test/reference/mask-transformed-image.mask.argb32.ref.png b/test/reference/mask-transformed-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-image.mask.argb32.ref.png differ
diff --git a/test/reference/mask-transformed-image.mask.rgb24.ref.png b/test/reference/mask-transformed-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-image.mask.rgb24.ref.png differ
diff --git a/test/reference/mask-transformed-image.rgb24.ref.png b/test/reference/mask-transformed-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-image.rgb24.ref.png differ
diff --git a/test/reference/mask-transformed-similar.argb32.ref.png b/test/reference/mask-transformed-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-similar.argb32.ref.png differ
diff --git a/test/reference/mask-transformed-similar.egl.argb32.ref.png b/test/reference/mask-transformed-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..97b38ae
Binary files /dev/null and b/test/reference/mask-transformed-similar.egl.argb32.ref.png differ
diff --git a/test/reference/mask-transformed-similar.mask.argb32.ref.png b/test/reference/mask-transformed-similar.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-similar.mask.argb32.ref.png differ
diff --git a/test/reference/mask-transformed-similar.mask.rgb24.ref.png b/test/reference/mask-transformed-similar.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-similar.mask.rgb24.ref.png differ
diff --git a/test/reference/mask-transformed-similar.recording.ref.png b/test/reference/mask-transformed-similar.recording.ref.png
new file mode 100644 (file)
index 0000000..33ec279
Binary files /dev/null and b/test/reference/mask-transformed-similar.recording.ref.png differ
diff --git a/test/reference/mask-transformed-similar.rgb24.ref.png b/test/reference/mask-transformed-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af84b39
Binary files /dev/null and b/test/reference/mask-transformed-similar.rgb24.ref.png differ
diff --git a/test/reference/mask-transformed-xlib-fallback.rgb24.ref.png b/test/reference/mask-transformed-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..09eb43a
Binary files /dev/null and b/test/reference/mask-transformed-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/mask-transformed-xlib-window.rgb24.ref.png b/test/reference/mask-transformed-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..09eb43a
Binary files /dev/null and b/test/reference/mask-transformed-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/mask-transformed-xlib.argb32.ref.png b/test/reference/mask-transformed-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..09eb43a
Binary files /dev/null and b/test/reference/mask-transformed-xlib.argb32.ref.png differ
diff --git a/test/reference/mask-transformed-xlib.rgb24.ref.png b/test/reference/mask-transformed-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..09eb43a
Binary files /dev/null and b/test/reference/mask-transformed-xlib.rgb24.ref.png differ
index f1f14d7..d965468 100644 (file)
Binary files a/test/reference/mask.argb32.ref.png and b/test/reference/mask.argb32.ref.png differ
index 3286ce6..7ee6b45 100644 (file)
Binary files a/test/reference/mask.base.argb32.ref.png and b/test/reference/mask.base.argb32.ref.png differ
index edcabaf..b0ceb35 100644 (file)
Binary files a/test/reference/mask.base.rgb24.ref.png and b/test/reference/mask.base.rgb24.ref.png differ
diff --git a/test/reference/mask.egl.argb32.ref.png b/test/reference/mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6f49576
Binary files /dev/null and b/test/reference/mask.egl.argb32.ref.png differ
diff --git a/test/reference/mask.mask.argb32.ref.png b/test/reference/mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2d740d4
Binary files /dev/null and b/test/reference/mask.mask.argb32.ref.png differ
diff --git a/test/reference/mask.mask.rgb24.ref.png b/test/reference/mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..12114a7
Binary files /dev/null and b/test/reference/mask.mask.rgb24.ref.png differ
index 0f9cb37..0617ec2 100644 (file)
Binary files a/test/reference/mask.rgb24.ref.png and b/test/reference/mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-accuracy.argb32.ref.png b/test/reference/mesh-pattern-accuracy.argb32.ref.png
new file mode 100644 (file)
index 0000000..dfc19ff
Binary files /dev/null and b/test/reference/mesh-pattern-accuracy.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-accuracy.egl.argb32.ref.png b/test/reference/mesh-pattern-accuracy.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4b0a846
Binary files /dev/null and b/test/reference/mesh-pattern-accuracy.egl.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-accuracy.mask.argb32.ref.png b/test/reference/mesh-pattern-accuracy.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..dfc19ff
Binary files /dev/null and b/test/reference/mesh-pattern-accuracy.mask.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-accuracy.mask.rgb24.ref.png b/test/reference/mesh-pattern-accuracy.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dfc19ff
Binary files /dev/null and b/test/reference/mesh-pattern-accuracy.mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-accuracy.rgb24.ref.png b/test/reference/mesh-pattern-accuracy.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dfc19ff
Binary files /dev/null and b/test/reference/mesh-pattern-accuracy.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-conical.argb32.ref.png b/test/reference/mesh-pattern-conical.argb32.ref.png
new file mode 100644 (file)
index 0000000..f5dc21d
Binary files /dev/null and b/test/reference/mesh-pattern-conical.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-conical.egl.argb32.ref.png b/test/reference/mesh-pattern-conical.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8db45c0
Binary files /dev/null and b/test/reference/mesh-pattern-conical.egl.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-conical.mask.argb32.ref.png b/test/reference/mesh-pattern-conical.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f5dc21d
Binary files /dev/null and b/test/reference/mesh-pattern-conical.mask.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-conical.mask.rgb24.ref.png b/test/reference/mesh-pattern-conical.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f5dc21d
Binary files /dev/null and b/test/reference/mesh-pattern-conical.mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-conical.rgb24.ref.png b/test/reference/mesh-pattern-conical.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f5dc21d
Binary files /dev/null and b/test/reference/mesh-pattern-conical.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-control-points.argb32.ref.png b/test/reference/mesh-pattern-control-points.argb32.ref.png
new file mode 100644 (file)
index 0000000..841fc3e
Binary files /dev/null and b/test/reference/mesh-pattern-control-points.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-control-points.egl.argb32.ref.png b/test/reference/mesh-pattern-control-points.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9533e90
Binary files /dev/null and b/test/reference/mesh-pattern-control-points.egl.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-control-points.mask.argb32.ref.png b/test/reference/mesh-pattern-control-points.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..841fc3e
Binary files /dev/null and b/test/reference/mesh-pattern-control-points.mask.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-control-points.mask.rgb24.ref.png b/test/reference/mesh-pattern-control-points.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..841fc3e
Binary files /dev/null and b/test/reference/mesh-pattern-control-points.mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-control-points.rgb24.ref.png b/test/reference/mesh-pattern-control-points.rgb24.ref.png
new file mode 100644 (file)
index 0000000..841fc3e
Binary files /dev/null and b/test/reference/mesh-pattern-control-points.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-fold.argb32.ref.png b/test/reference/mesh-pattern-fold.argb32.ref.png
new file mode 100644 (file)
index 0000000..6275b82
Binary files /dev/null and b/test/reference/mesh-pattern-fold.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-fold.egl.argb32.ref.png b/test/reference/mesh-pattern-fold.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..94586d9
Binary files /dev/null and b/test/reference/mesh-pattern-fold.egl.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-fold.mask.argb32.ref.png b/test/reference/mesh-pattern-fold.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6275b82
Binary files /dev/null and b/test/reference/mesh-pattern-fold.mask.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-fold.mask.rgb24.ref.png b/test/reference/mesh-pattern-fold.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6275b82
Binary files /dev/null and b/test/reference/mesh-pattern-fold.mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-fold.rgb24.ref.png b/test/reference/mesh-pattern-fold.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6275b82
Binary files /dev/null and b/test/reference/mesh-pattern-fold.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-overlap.argb32.ref.png b/test/reference/mesh-pattern-overlap.argb32.ref.png
new file mode 100644 (file)
index 0000000..1394c9e
Binary files /dev/null and b/test/reference/mesh-pattern-overlap.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-overlap.egl.argb32.ref.png b/test/reference/mesh-pattern-overlap.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7c6321
Binary files /dev/null and b/test/reference/mesh-pattern-overlap.egl.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-overlap.mask.argb32.ref.png b/test/reference/mesh-pattern-overlap.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1394c9e
Binary files /dev/null and b/test/reference/mesh-pattern-overlap.mask.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-overlap.mask.rgb24.ref.png b/test/reference/mesh-pattern-overlap.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1394c9e
Binary files /dev/null and b/test/reference/mesh-pattern-overlap.mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-overlap.rgb24.ref.png b/test/reference/mesh-pattern-overlap.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1394c9e
Binary files /dev/null and b/test/reference/mesh-pattern-overlap.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-transformed.argb32.ref.png b/test/reference/mesh-pattern-transformed.argb32.ref.png
new file mode 100644 (file)
index 0000000..9aa482f
Binary files /dev/null and b/test/reference/mesh-pattern-transformed.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-transformed.egl.argb32.ref.png b/test/reference/mesh-pattern-transformed.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b4dcde2
Binary files /dev/null and b/test/reference/mesh-pattern-transformed.egl.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-transformed.mask.argb32.ref.png b/test/reference/mesh-pattern-transformed.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9aa482f
Binary files /dev/null and b/test/reference/mesh-pattern-transformed.mask.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern-transformed.mask.rgb24.ref.png b/test/reference/mesh-pattern-transformed.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9aa482f
Binary files /dev/null and b/test/reference/mesh-pattern-transformed.mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern-transformed.rgb24.ref.png b/test/reference/mesh-pattern-transformed.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9aa482f
Binary files /dev/null and b/test/reference/mesh-pattern-transformed.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern.argb32.ref.png b/test/reference/mesh-pattern.argb32.ref.png
new file mode 100644 (file)
index 0000000..1f76639
Binary files /dev/null and b/test/reference/mesh-pattern.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern.egl.argb32.ref.png b/test/reference/mesh-pattern.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2640f5a
Binary files /dev/null and b/test/reference/mesh-pattern.egl.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern.mask.argb32.ref.png b/test/reference/mesh-pattern.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1f76639
Binary files /dev/null and b/test/reference/mesh-pattern.mask.argb32.ref.png differ
diff --git a/test/reference/mesh-pattern.mask.rgb24.ref.png b/test/reference/mesh-pattern.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1f76639
Binary files /dev/null and b/test/reference/mesh-pattern.mask.rgb24.ref.png differ
diff --git a/test/reference/mesh-pattern.rgb24.ref.png b/test/reference/mesh-pattern.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1f76639
Binary files /dev/null and b/test/reference/mesh-pattern.rgb24.ref.png differ
diff --git a/test/reference/mime-data.argb32.ref.png b/test/reference/mime-data.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a912c5
Binary files /dev/null and b/test/reference/mime-data.argb32.ref.png differ
diff --git a/test/reference/mime-data.egl.argb32.ref.png b/test/reference/mime-data.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a912c5
Binary files /dev/null and b/test/reference/mime-data.egl.argb32.ref.png differ
diff --git a/test/reference/mime-data.mask.argb32.ref.png b/test/reference/mime-data.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a912c5
Binary files /dev/null and b/test/reference/mime-data.mask.argb32.ref.png differ
diff --git a/test/reference/mime-data.mask.rgb24.ref.png b/test/reference/mime-data.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3a912c5
Binary files /dev/null and b/test/reference/mime-data.mask.rgb24.ref.png differ
diff --git a/test/reference/mime-data.rgb24.ref.png b/test/reference/mime-data.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3a912c5
Binary files /dev/null and b/test/reference/mime-data.rgb24.ref.png differ
diff --git a/test/reference/miter-precision.argb32.ref.png b/test/reference/miter-precision.argb32.ref.png
new file mode 100644 (file)
index 0000000..aa8e229
Binary files /dev/null and b/test/reference/miter-precision.argb32.ref.png differ
diff --git a/test/reference/miter-precision.egl.argb32.ref.png b/test/reference/miter-precision.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1a76dfd
Binary files /dev/null and b/test/reference/miter-precision.egl.argb32.ref.png differ
diff --git a/test/reference/miter-precision.mask.argb32.ref.png b/test/reference/miter-precision.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..aa8e229
Binary files /dev/null and b/test/reference/miter-precision.mask.argb32.ref.png differ
diff --git a/test/reference/miter-precision.mask.rgb24.ref.png b/test/reference/miter-precision.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aa8e229
Binary files /dev/null and b/test/reference/miter-precision.mask.rgb24.ref.png differ
diff --git a/test/reference/miter-precision.rgb24.ref.png b/test/reference/miter-precision.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aa8e229
Binary files /dev/null and b/test/reference/miter-precision.rgb24.ref.png differ
diff --git a/test/reference/move-to-show-surface.argb32.ref.png b/test/reference/move-to-show-surface.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/move-to-show-surface.argb32.ref.png differ
diff --git a/test/reference/move-to-show-surface.egl.argb32.ref.png b/test/reference/move-to-show-surface.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ec93608
Binary files /dev/null and b/test/reference/move-to-show-surface.egl.argb32.ref.png differ
diff --git a/test/reference/move-to-show-surface.mask.argb32.ref.png b/test/reference/move-to-show-surface.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/move-to-show-surface.mask.argb32.ref.png differ
diff --git a/test/reference/move-to-show-surface.mask.rgb24.ref.png b/test/reference/move-to-show-surface.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/move-to-show-surface.mask.rgb24.ref.png differ
diff --git a/test/reference/move-to-show-surface.rgb24.ref.png b/test/reference/move-to-show-surface.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/move-to-show-surface.rgb24.ref.png differ
diff --git a/test/reference/negative-stride-image.argb32.ref.png b/test/reference/negative-stride-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.argb32.ref.png differ
diff --git a/test/reference/negative-stride-image.base.argb32.ref.png b/test/reference/negative-stride-image.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.base.argb32.ref.png differ
diff --git a/test/reference/negative-stride-image.base.rgb24.ref.png b/test/reference/negative-stride-image.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.base.rgb24.ref.png differ
diff --git a/test/reference/negative-stride-image.egl.argb32.ref.png b/test/reference/negative-stride-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f6f9a43
Binary files /dev/null and b/test/reference/negative-stride-image.egl.argb32.ref.png differ
diff --git a/test/reference/negative-stride-image.image16.ref.png b/test/reference/negative-stride-image.image16.ref.png
new file mode 100644 (file)
index 0000000..4b15914
Binary files /dev/null and b/test/reference/negative-stride-image.image16.ref.png differ
diff --git a/test/reference/negative-stride-image.mask.argb32.ref.png b/test/reference/negative-stride-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.mask.argb32.ref.png differ
diff --git a/test/reference/negative-stride-image.mask.rgb24.ref.png b/test/reference/negative-stride-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.mask.rgb24.ref.png differ
diff --git a/test/reference/negative-stride-image.ps.ref.png b/test/reference/negative-stride-image.ps.ref.png
new file mode 100644 (file)
index 0000000..953c9a1
Binary files /dev/null and b/test/reference/negative-stride-image.ps.ref.png differ
diff --git a/test/reference/negative-stride-image.ref.png b/test/reference/negative-stride-image.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.ref.png differ
diff --git a/test/reference/negative-stride-image.rgb24.ref.png b/test/reference/negative-stride-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.rgb24.ref.png differ
diff --git a/test/reference/negative-stride-image.traps.argb32.ref.png b/test/reference/negative-stride-image.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.traps.argb32.ref.png differ
diff --git a/test/reference/negative-stride-image.traps.rgb24.ref.png b/test/reference/negative-stride-image.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/negative-stride-image.traps.rgb24.ref.png differ
index aec47e3..87a6c91 100644 (file)
Binary files a/test/reference/new-sub-path.argb32.ref.png and b/test/reference/new-sub-path.argb32.ref.png differ
diff --git a/test/reference/new-sub-path.egl.argb32.ref.png b/test/reference/new-sub-path.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bb6efe8
Binary files /dev/null and b/test/reference/new-sub-path.egl.argb32.ref.png differ
diff --git a/test/reference/new-sub-path.mask.argb32.ref.png b/test/reference/new-sub-path.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..87a6c91
Binary files /dev/null and b/test/reference/new-sub-path.mask.argb32.ref.png differ
diff --git a/test/reference/new-sub-path.mask.rgb24.ref.png b/test/reference/new-sub-path.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..eb297be
Binary files /dev/null and b/test/reference/new-sub-path.mask.rgb24.ref.png differ
index cdc270c..eb297be 100644 (file)
Binary files a/test/reference/new-sub-path.rgb24.ref.png and b/test/reference/new-sub-path.rgb24.ref.png differ
diff --git a/test/reference/nil-surface.argb32.ref.png b/test/reference/nil-surface.argb32.ref.png
new file mode 100644 (file)
index 0000000..50e35a2
Binary files /dev/null and b/test/reference/nil-surface.argb32.ref.png differ
diff --git a/test/reference/nil-surface.egl.argb32.ref.png b/test/reference/nil-surface.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..50e35a2
Binary files /dev/null and b/test/reference/nil-surface.egl.argb32.ref.png differ
diff --git a/test/reference/nil-surface.mask.argb32.ref.png b/test/reference/nil-surface.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..50e35a2
Binary files /dev/null and b/test/reference/nil-surface.mask.argb32.ref.png differ
diff --git a/test/reference/nil-surface.mask.rgb24.ref.png b/test/reference/nil-surface.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7d5589c
Binary files /dev/null and b/test/reference/nil-surface.mask.rgb24.ref.png differ
index 97b2cfa..7d5589c 100644 (file)
Binary files a/test/reference/nil-surface.rgb24.ref.png and b/test/reference/nil-surface.rgb24.ref.png differ
diff --git a/test/reference/operator-alpha-alpha.argb32.ref.png b/test/reference/operator-alpha-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..695d0d0
Binary files /dev/null and b/test/reference/operator-alpha-alpha.argb32.ref.png differ
diff --git a/test/reference/operator-alpha-alpha.egl.argb32.ref.png b/test/reference/operator-alpha-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bae6bc1
Binary files /dev/null and b/test/reference/operator-alpha-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/operator-alpha-alpha.mask.argb32.ref.png b/test/reference/operator-alpha-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..695d0d0
Binary files /dev/null and b/test/reference/operator-alpha-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/operator-alpha-alpha.mask.rgb24.ref.png b/test/reference/operator-alpha-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..695d0d0
Binary files /dev/null and b/test/reference/operator-alpha-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/operator-alpha-alpha.rgb24.ref.png b/test/reference/operator-alpha-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..695d0d0
Binary files /dev/null and b/test/reference/operator-alpha-alpha.rgb24.ref.png differ
diff --git a/test/reference/operator-alpha.argb32.ref.png b/test/reference/operator-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..b4f3b71
Binary files /dev/null and b/test/reference/operator-alpha.argb32.ref.png differ
diff --git a/test/reference/operator-alpha.egl.argb32.ref.png b/test/reference/operator-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..22f618a
Binary files /dev/null and b/test/reference/operator-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/operator-alpha.mask.argb32.ref.png b/test/reference/operator-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b4f3b71
Binary files /dev/null and b/test/reference/operator-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/operator-alpha.mask.rgb24.ref.png b/test/reference/operator-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..bc7be3a
Binary files /dev/null and b/test/reference/operator-alpha.mask.rgb24.ref.png differ
index 3263550..bc7be3a 100644 (file)
Binary files a/test/reference/operator-alpha.rgb24.ref.png and b/test/reference/operator-alpha.rgb24.ref.png differ
index 2629740..41f63bd 100644 (file)
Binary files a/test/reference/operator-clear.argb32.ref.png and b/test/reference/operator-clear.argb32.ref.png differ
index 235db6b..c49b4a8 100644 (file)
Binary files a/test/reference/operator-clear.base.argb32.ref.png and b/test/reference/operator-clear.base.argb32.ref.png differ
index fa07d4a..51d38d1 100644 (file)
Binary files a/test/reference/operator-clear.base.rgb24.ref.png and b/test/reference/operator-clear.base.rgb24.ref.png differ
diff --git a/test/reference/operator-clear.mask.argb32.ref.png b/test/reference/operator-clear.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..41f63bd
Binary files /dev/null and b/test/reference/operator-clear.mask.argb32.ref.png differ
diff --git a/test/reference/operator-clear.mask.rgb24.ref.png b/test/reference/operator-clear.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3d58ab3
Binary files /dev/null and b/test/reference/operator-clear.mask.rgb24.ref.png differ
index 0a730a1..3d58ab3 100644 (file)
Binary files a/test/reference/operator-clear.rgb24.ref.png and b/test/reference/operator-clear.rgb24.ref.png differ
index 235db6b..c49b4a8 100644 (file)
Binary files a/test/reference/operator-clear.traps.argb32.ref.png and b/test/reference/operator-clear.traps.argb32.ref.png differ
index fa07d4a..51d38d1 100644 (file)
Binary files a/test/reference/operator-clear.traps.rgb24.ref.png and b/test/reference/operator-clear.traps.rgb24.ref.png differ
index 31615f4..7b9270a 100644 (file)
Binary files a/test/reference/operator-source.argb32.ref.png and b/test/reference/operator-source.argb32.ref.png differ
index 6884f33..42e24f2 100644 (file)
Binary files a/test/reference/operator-source.base.argb32.ref.png and b/test/reference/operator-source.base.argb32.ref.png differ
index 32a6a40..4736d58 100644 (file)
Binary files a/test/reference/operator-source.base.rgb24.ref.png and b/test/reference/operator-source.base.rgb24.ref.png differ
diff --git a/test/reference/operator-source.mask.argb32.ref.png b/test/reference/operator-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..74ad1da
Binary files /dev/null and b/test/reference/operator-source.mask.argb32.ref.png differ
diff --git a/test/reference/operator-source.mask.rgb24.ref.png b/test/reference/operator-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c003356
Binary files /dev/null and b/test/reference/operator-source.mask.rgb24.ref.png differ
index c876aba..2f9efea 100644 (file)
Binary files a/test/reference/operator-source.rgb24.ref.png and b/test/reference/operator-source.rgb24.ref.png differ
index 6884f33..42e24f2 100644 (file)
Binary files a/test/reference/operator-source.traps.argb32.ref.png and b/test/reference/operator-source.traps.argb32.ref.png differ
index 32a6a40..4736d58 100644 (file)
Binary files a/test/reference/operator-source.traps.rgb24.ref.png and b/test/reference/operator-source.traps.rgb24.ref.png differ
diff --git a/test/reference/operator.argb32.ref.png b/test/reference/operator.argb32.ref.png
new file mode 100644 (file)
index 0000000..34fce98
Binary files /dev/null and b/test/reference/operator.argb32.ref.png differ
diff --git a/test/reference/operator.egl.argb32.ref.png b/test/reference/operator.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..34fce98
Binary files /dev/null and b/test/reference/operator.egl.argb32.ref.png differ
diff --git a/test/reference/operator.mask.argb32.ref.png b/test/reference/operator.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..34fce98
Binary files /dev/null and b/test/reference/operator.mask.argb32.ref.png differ
diff --git a/test/reference/operator.mask.rgb24.ref.png b/test/reference/operator.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aa6103d
Binary files /dev/null and b/test/reference/operator.mask.rgb24.ref.png differ
index 3a6309c..aa6103d 100644 (file)
Binary files a/test/reference/operator.rgb24.ref.png and b/test/reference/operator.rgb24.ref.png differ
diff --git a/test/reference/over-above-source.argb32.ref.png b/test/reference/over-above-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..8c2ce1d
Binary files /dev/null and b/test/reference/over-above-source.argb32.ref.png differ
diff --git a/test/reference/over-above-source.egl.argb32.ref.png b/test/reference/over-above-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..22614bd
Binary files /dev/null and b/test/reference/over-above-source.egl.argb32.ref.png differ
diff --git a/test/reference/over-above-source.mask.argb32.ref.png b/test/reference/over-above-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8c2ce1d
Binary files /dev/null and b/test/reference/over-above-source.mask.argb32.ref.png differ
diff --git a/test/reference/over-above-source.mask.rgb24.ref.png b/test/reference/over-above-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..240de27
Binary files /dev/null and b/test/reference/over-above-source.mask.rgb24.ref.png differ
index ec37387..240de27 100644 (file)
Binary files a/test/reference/over-above-source.rgb24.ref.png and b/test/reference/over-above-source.rgb24.ref.png differ
diff --git a/test/reference/over-around-source.argb32.ref.png b/test/reference/over-around-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..38df9b7
Binary files /dev/null and b/test/reference/over-around-source.argb32.ref.png differ
diff --git a/test/reference/over-around-source.egl.argb32.ref.png b/test/reference/over-around-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..448643e
Binary files /dev/null and b/test/reference/over-around-source.egl.argb32.ref.png differ
diff --git a/test/reference/over-around-source.mask.argb32.ref.png b/test/reference/over-around-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..38df9b7
Binary files /dev/null and b/test/reference/over-around-source.mask.argb32.ref.png differ
diff --git a/test/reference/over-around-source.mask.rgb24.ref.png b/test/reference/over-around-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..65fd8e8
Binary files /dev/null and b/test/reference/over-around-source.mask.rgb24.ref.png differ
index 717f6e5..65fd8e8 100644 (file)
Binary files a/test/reference/over-around-source.rgb24.ref.png and b/test/reference/over-around-source.rgb24.ref.png differ
diff --git a/test/reference/over-below-source.argb32.ref.png b/test/reference/over-below-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..0b55974
Binary files /dev/null and b/test/reference/over-below-source.argb32.ref.png differ
diff --git a/test/reference/over-below-source.egl.argb32.ref.png b/test/reference/over-below-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4354755
Binary files /dev/null and b/test/reference/over-below-source.egl.argb32.ref.png differ
diff --git a/test/reference/over-below-source.mask.argb32.ref.png b/test/reference/over-below-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0b55974
Binary files /dev/null and b/test/reference/over-below-source.mask.argb32.ref.png differ
diff --git a/test/reference/over-below-source.mask.rgb24.ref.png b/test/reference/over-below-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9ddde0e
Binary files /dev/null and b/test/reference/over-below-source.mask.rgb24.ref.png differ
index 74176fa..9ddde0e 100644 (file)
Binary files a/test/reference/over-below-source.rgb24.ref.png and b/test/reference/over-below-source.rgb24.ref.png differ
diff --git a/test/reference/over-between-source.argb32.ref.png b/test/reference/over-between-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..dd03f98
Binary files /dev/null and b/test/reference/over-between-source.argb32.ref.png differ
diff --git a/test/reference/over-between-source.egl.argb32.ref.png b/test/reference/over-between-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bd33a56
Binary files /dev/null and b/test/reference/over-between-source.egl.argb32.ref.png differ
diff --git a/test/reference/over-between-source.mask.argb32.ref.png b/test/reference/over-between-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..dd03f98
Binary files /dev/null and b/test/reference/over-between-source.mask.argb32.ref.png differ
diff --git a/test/reference/over-between-source.mask.rgb24.ref.png b/test/reference/over-between-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8569720
Binary files /dev/null and b/test/reference/over-between-source.mask.rgb24.ref.png differ
index 4cc7d8f..8569720 100644 (file)
Binary files a/test/reference/over-between-source.rgb24.ref.png and b/test/reference/over-between-source.rgb24.ref.png differ
diff --git a/test/reference/overlapping-boxes.egl.argb32.ref.png b/test/reference/overlapping-boxes.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1c68438
Binary files /dev/null and b/test/reference/overlapping-boxes.egl.argb32.ref.png differ
diff --git a/test/reference/overlapping-boxes.mask.argb32.ref.png b/test/reference/overlapping-boxes.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1c68438
Binary files /dev/null and b/test/reference/overlapping-boxes.mask.argb32.ref.png differ
diff --git a/test/reference/overlapping-boxes.mask.rgb24.ref.png b/test/reference/overlapping-boxes.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0edeafa
Binary files /dev/null and b/test/reference/overlapping-boxes.mask.rgb24.ref.png differ
diff --git a/test/reference/overlapping-dash-caps.argb32.ref.png b/test/reference/overlapping-dash-caps.argb32.ref.png
new file mode 100644 (file)
index 0000000..367d683
Binary files /dev/null and b/test/reference/overlapping-dash-caps.argb32.ref.png differ
diff --git a/test/reference/overlapping-dash-caps.egl.argb32.ref.png b/test/reference/overlapping-dash-caps.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9eb188c
Binary files /dev/null and b/test/reference/overlapping-dash-caps.egl.argb32.ref.png differ
diff --git a/test/reference/overlapping-dash-caps.mask.argb32.ref.png b/test/reference/overlapping-dash-caps.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..367d683
Binary files /dev/null and b/test/reference/overlapping-dash-caps.mask.argb32.ref.png differ
diff --git a/test/reference/overlapping-dash-caps.mask.rgb24.ref.png b/test/reference/overlapping-dash-caps.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..367d683
Binary files /dev/null and b/test/reference/overlapping-dash-caps.mask.rgb24.ref.png differ
diff --git a/test/reference/overlapping-dash-caps.rgb24.ref.png b/test/reference/overlapping-dash-caps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..367d683
Binary files /dev/null and b/test/reference/overlapping-dash-caps.rgb24.ref.png differ
index 8f6d383..4ec4ee5 100644 (file)
Binary files a/test/reference/overlapping-glyphs.argb32.ref.png and b/test/reference/overlapping-glyphs.argb32.ref.png differ
index 0dc6fdb..11bf4e1 100644 (file)
Binary files a/test/reference/overlapping-glyphs.base.argb32.ref.png and b/test/reference/overlapping-glyphs.base.argb32.ref.png differ
index 9702cc2..6b65510 100644 (file)
Binary files a/test/reference/overlapping-glyphs.base.rgb24.ref.png and b/test/reference/overlapping-glyphs.base.rgb24.ref.png differ
diff --git a/test/reference/overlapping-glyphs.egl.argb32.ref.png b/test/reference/overlapping-glyphs.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b1d6da9
Binary files /dev/null and b/test/reference/overlapping-glyphs.egl.argb32.ref.png differ
diff --git a/test/reference/overlapping-glyphs.mask.argb32.ref.png b/test/reference/overlapping-glyphs.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4ec4ee5
Binary files /dev/null and b/test/reference/overlapping-glyphs.mask.argb32.ref.png differ
diff --git a/test/reference/overlapping-glyphs.mask.rgb24.ref.png b/test/reference/overlapping-glyphs.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5217c15
Binary files /dev/null and b/test/reference/overlapping-glyphs.mask.rgb24.ref.png differ
index eea57b2..5217c15 100644 (file)
Binary files a/test/reference/overlapping-glyphs.rgb24.ref.png and b/test/reference/overlapping-glyphs.rgb24.ref.png differ
index 0dc6fdb..11bf4e1 100644 (file)
Binary files a/test/reference/overlapping-glyphs.traps.argb32.ref.png and b/test/reference/overlapping-glyphs.traps.argb32.ref.png differ
index 9702cc2..6b65510 100644 (file)
Binary files a/test/reference/overlapping-glyphs.traps.rgb24.ref.png and b/test/reference/overlapping-glyphs.traps.rgb24.ref.png differ
diff --git a/test/reference/paint-clip-fill-aa.argb32.ref.png b/test/reference/paint-clip-fill-aa.argb32.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-aa.argb32.ref.png differ
diff --git a/test/reference/paint-clip-fill-aa.egl.argb32.ref.png b/test/reference/paint-clip-fill-aa.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-aa.egl.argb32.ref.png differ
diff --git a/test/reference/paint-clip-fill-aa.mask.argb32.ref.png b/test/reference/paint-clip-fill-aa.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-aa.mask.argb32.ref.png differ
diff --git a/test/reference/paint-clip-fill-aa.mask.rgb24.ref.png b/test/reference/paint-clip-fill-aa.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-aa.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-clip-fill-aa.rgb24.ref.png b/test/reference/paint-clip-fill-aa.rgb24.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-aa.rgb24.ref.png differ
diff --git a/test/reference/paint-clip-fill-mono.argb32.ref.png b/test/reference/paint-clip-fill-mono.argb32.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-mono.argb32.ref.png differ
diff --git a/test/reference/paint-clip-fill-mono.egl.argb32.ref.png b/test/reference/paint-clip-fill-mono.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-mono.egl.argb32.ref.png differ
diff --git a/test/reference/paint-clip-fill-mono.mask.argb32.ref.png b/test/reference/paint-clip-fill-mono.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-mono.mask.argb32.ref.png differ
diff --git a/test/reference/paint-clip-fill-mono.mask.rgb24.ref.png b/test/reference/paint-clip-fill-mono.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-mono.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-clip-fill-mono.rgb24.ref.png b/test/reference/paint-clip-fill-mono.rgb24.ref.png
new file mode 100644 (file)
index 0000000..768322a
Binary files /dev/null and b/test/reference/paint-clip-fill-mono.rgb24.ref.png differ
diff --git a/test/reference/paint-repeat.argb32.ref.png b/test/reference/paint-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cdd9b4
Binary files /dev/null and b/test/reference/paint-repeat.argb32.ref.png differ
diff --git a/test/reference/paint-repeat.egl.argb32.ref.png b/test/reference/paint-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cdd9b4
Binary files /dev/null and b/test/reference/paint-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/paint-repeat.mask.argb32.ref.png b/test/reference/paint-repeat.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8cdd9b4
Binary files /dev/null and b/test/reference/paint-repeat.mask.argb32.ref.png differ
diff --git a/test/reference/paint-repeat.mask.rgb24.ref.png b/test/reference/paint-repeat.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8cdd9b4
Binary files /dev/null and b/test/reference/paint-repeat.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-repeat.rgb24.ref.png b/test/reference/paint-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8cdd9b4
Binary files /dev/null and b/test/reference/paint-repeat.rgb24.ref.png differ
diff --git a/test/reference/paint-source-alpha.argb32.ref.png b/test/reference/paint-source-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-source-alpha.argb32.ref.png differ
diff --git a/test/reference/paint-source-alpha.egl.argb32.ref.png b/test/reference/paint-source-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1155cef
Binary files /dev/null and b/test/reference/paint-source-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/paint-source-alpha.mask.argb32.ref.png b/test/reference/paint-source-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-source-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/paint-source-alpha.mask.rgb24.ref.png b/test/reference/paint-source-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-source-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-source-alpha.rgb24.ref.png b/test/reference/paint-source-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-source-alpha.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip-mask.argb32.ref.png b/test/reference/paint-with-alpha-clip-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5054672
Binary files /dev/null and b/test/reference/paint-with-alpha-clip-mask.argb32.ref.png differ
index 201bd0d..95746ff 100644 (file)
Binary files a/test/reference/paint-with-alpha-clip-mask.base.argb32.ref.png and b/test/reference/paint-with-alpha-clip-mask.base.argb32.ref.png differ
index 201bd0d..95746ff 100644 (file)
Binary files a/test/reference/paint-with-alpha-clip-mask.base.rgb24.ref.png and b/test/reference/paint-with-alpha-clip-mask.base.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip-mask.egl.argb32.ref.png b/test/reference/paint-with-alpha-clip-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..607fdaa
Binary files /dev/null and b/test/reference/paint-with-alpha-clip-mask.egl.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip-mask.mask.argb32.ref.png b/test/reference/paint-with-alpha-clip-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..95746ff
Binary files /dev/null and b/test/reference/paint-with-alpha-clip-mask.mask.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip-mask.mask.rgb24.ref.png b/test/reference/paint-with-alpha-clip-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..95746ff
Binary files /dev/null and b/test/reference/paint-with-alpha-clip-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip-mask.rgb24.ref.png b/test/reference/paint-with-alpha-clip-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5054672
Binary files /dev/null and b/test/reference/paint-with-alpha-clip-mask.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip.argb32.ref.png b/test/reference/paint-with-alpha-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..4bad4e8
Binary files /dev/null and b/test/reference/paint-with-alpha-clip.argb32.ref.png differ
index 704c70a..c1da67e 100644 (file)
Binary files a/test/reference/paint-with-alpha-clip.base.argb32.ref.png and b/test/reference/paint-with-alpha-clip.base.argb32.ref.png differ
index 704c70a..c1da67e 100644 (file)
Binary files a/test/reference/paint-with-alpha-clip.base.rgb24.ref.png and b/test/reference/paint-with-alpha-clip.base.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip.egl.argb32.ref.png b/test/reference/paint-with-alpha-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..728224e
Binary files /dev/null and b/test/reference/paint-with-alpha-clip.egl.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip.mask.argb32.ref.png b/test/reference/paint-with-alpha-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c1da67e
Binary files /dev/null and b/test/reference/paint-with-alpha-clip.mask.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip.mask.rgb24.ref.png b/test/reference/paint-with-alpha-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c1da67e
Binary files /dev/null and b/test/reference/paint-with-alpha-clip.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-clip.rgb24.ref.png b/test/reference/paint-with-alpha-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4bad4e8
Binary files /dev/null and b/test/reference/paint-with-alpha-clip.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-solid-clip.argb32.ref.png b/test/reference/paint-with-alpha-solid-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..59d226d
Binary files /dev/null and b/test/reference/paint-with-alpha-solid-clip.argb32.ref.png differ
index 2cd2df2..59d226d 100644 (file)
Binary files a/test/reference/paint-with-alpha-solid-clip.base.argb32.ref.png and b/test/reference/paint-with-alpha-solid-clip.base.argb32.ref.png differ
index 2cd2df2..59d226d 100644 (file)
Binary files a/test/reference/paint-with-alpha-solid-clip.base.rgb24.ref.png and b/test/reference/paint-with-alpha-solid-clip.base.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-solid-clip.egl.argb32.ref.png b/test/reference/paint-with-alpha-solid-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e841b2d
Binary files /dev/null and b/test/reference/paint-with-alpha-solid-clip.egl.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha-solid-clip.mask.argb32.ref.png b/test/reference/paint-with-alpha-solid-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2cd2df2
Binary files /dev/null and b/test/reference/paint-with-alpha-solid-clip.mask.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha-solid-clip.mask.rgb24.ref.png b/test/reference/paint-with-alpha-solid-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2cd2df2
Binary files /dev/null and b/test/reference/paint-with-alpha-solid-clip.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha-solid-clip.rgb24.ref.png b/test/reference/paint-with-alpha-solid-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..59d226d
Binary files /dev/null and b/test/reference/paint-with-alpha-solid-clip.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha.argb32.ref.png b/test/reference/paint-with-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-with-alpha.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha.egl.argb32.ref.png b/test/reference/paint-with-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ed8da7d
Binary files /dev/null and b/test/reference/paint-with-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha.mask.argb32.ref.png b/test/reference/paint-with-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-with-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/paint-with-alpha.mask.rgb24.ref.png b/test/reference/paint-with-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-with-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/paint-with-alpha.rgb24.ref.png b/test/reference/paint-with-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/paint-with-alpha.rgb24.ref.png differ
diff --git a/test/reference/paint.argb32.ref.png b/test/reference/paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/paint.argb32.ref.png differ
diff --git a/test/reference/paint.egl.argb32.ref.png b/test/reference/paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/paint.egl.argb32.ref.png differ
diff --git a/test/reference/paint.mask.argb32.ref.png b/test/reference/paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/paint.mask.argb32.ref.png differ
diff --git a/test/reference/paint.mask.rgb24.ref.png b/test/reference/paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/paint.mask.rgb24.ref.png differ
diff --git a/test/reference/paint.rgb24.ref.png b/test/reference/paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/paint.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-bottom.argb32.ref.png b/test/reference/partial-clip-text-bottom.argb32.ref.png
new file mode 100644 (file)
index 0000000..6a299d4
Binary files /dev/null and b/test/reference/partial-clip-text-bottom.argb32.ref.png differ
index 7a03fad..6a299d4 100644 (file)
Binary files a/test/reference/partial-clip-text-bottom.base.argb32.ref.png and b/test/reference/partial-clip-text-bottom.base.argb32.ref.png differ
index 7a03fad..6a299d4 100644 (file)
Binary files a/test/reference/partial-clip-text-bottom.base.rgb24.ref.png and b/test/reference/partial-clip-text-bottom.base.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-bottom.egl.argb32.ref.png b/test/reference/partial-clip-text-bottom.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a6f282c
Binary files /dev/null and b/test/reference/partial-clip-text-bottom.egl.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-bottom.mask.argb32.ref.png b/test/reference/partial-clip-text-bottom.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6a299d4
Binary files /dev/null and b/test/reference/partial-clip-text-bottom.mask.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-bottom.mask.rgb24.ref.png b/test/reference/partial-clip-text-bottom.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6a299d4
Binary files /dev/null and b/test/reference/partial-clip-text-bottom.mask.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-bottom.rgb24.ref.png b/test/reference/partial-clip-text-bottom.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6a299d4
Binary files /dev/null and b/test/reference/partial-clip-text-bottom.rgb24.ref.png differ
index 7a03fad..6a299d4 100644 (file)
Binary files a/test/reference/partial-clip-text-bottom.traps.argb32.ref.png and b/test/reference/partial-clip-text-bottom.traps.argb32.ref.png differ
index 7a03fad..6a299d4 100644 (file)
Binary files a/test/reference/partial-clip-text-bottom.traps.rgb24.ref.png and b/test/reference/partial-clip-text-bottom.traps.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-left.argb32.ref.png b/test/reference/partial-clip-text-left.argb32.ref.png
new file mode 100644 (file)
index 0000000..54a1a85
Binary files /dev/null and b/test/reference/partial-clip-text-left.argb32.ref.png differ
index 95c07f4..54a1a85 100644 (file)
Binary files a/test/reference/partial-clip-text-left.base.argb32.ref.png and b/test/reference/partial-clip-text-left.base.argb32.ref.png differ
index 95c07f4..54a1a85 100644 (file)
Binary files a/test/reference/partial-clip-text-left.base.rgb24.ref.png and b/test/reference/partial-clip-text-left.base.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-left.egl.argb32.ref.png b/test/reference/partial-clip-text-left.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f695ece
Binary files /dev/null and b/test/reference/partial-clip-text-left.egl.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-left.mask.argb32.ref.png b/test/reference/partial-clip-text-left.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..54a1a85
Binary files /dev/null and b/test/reference/partial-clip-text-left.mask.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-left.mask.rgb24.ref.png b/test/reference/partial-clip-text-left.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..54a1a85
Binary files /dev/null and b/test/reference/partial-clip-text-left.mask.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-left.rgb24.ref.png b/test/reference/partial-clip-text-left.rgb24.ref.png
new file mode 100644 (file)
index 0000000..54a1a85
Binary files /dev/null and b/test/reference/partial-clip-text-left.rgb24.ref.png differ
index 95c07f4..54a1a85 100644 (file)
Binary files a/test/reference/partial-clip-text-left.traps.argb32.ref.png and b/test/reference/partial-clip-text-left.traps.argb32.ref.png differ
index 95c07f4..54a1a85 100644 (file)
Binary files a/test/reference/partial-clip-text-left.traps.rgb24.ref.png and b/test/reference/partial-clip-text-left.traps.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-right.argb32.ref.png b/test/reference/partial-clip-text-right.argb32.ref.png
new file mode 100644 (file)
index 0000000..2fbdca0
Binary files /dev/null and b/test/reference/partial-clip-text-right.argb32.ref.png differ
index 3e69ca9..2fbdca0 100644 (file)
Binary files a/test/reference/partial-clip-text-right.base.argb32.ref.png and b/test/reference/partial-clip-text-right.base.argb32.ref.png differ
index 3e69ca9..2fbdca0 100644 (file)
Binary files a/test/reference/partial-clip-text-right.base.rgb24.ref.png and b/test/reference/partial-clip-text-right.base.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-right.egl.argb32.ref.png b/test/reference/partial-clip-text-right.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..30c34b6
Binary files /dev/null and b/test/reference/partial-clip-text-right.egl.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-right.mask.argb32.ref.png b/test/reference/partial-clip-text-right.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2fbdca0
Binary files /dev/null and b/test/reference/partial-clip-text-right.mask.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-right.mask.rgb24.ref.png b/test/reference/partial-clip-text-right.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2fbdca0
Binary files /dev/null and b/test/reference/partial-clip-text-right.mask.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-right.rgb24.ref.png b/test/reference/partial-clip-text-right.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2fbdca0
Binary files /dev/null and b/test/reference/partial-clip-text-right.rgb24.ref.png differ
index 3e69ca9..2fbdca0 100644 (file)
Binary files a/test/reference/partial-clip-text-right.traps.argb32.ref.png and b/test/reference/partial-clip-text-right.traps.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-right.traps.ref.png b/test/reference/partial-clip-text-right.traps.ref.png
new file mode 100644 (file)
index 0000000..2fbdca0
Binary files /dev/null and b/test/reference/partial-clip-text-right.traps.ref.png differ
index 3e69ca9..2fbdca0 100644 (file)
Binary files a/test/reference/partial-clip-text-right.traps.rgb24.ref.png and b/test/reference/partial-clip-text-right.traps.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-top.argb32.ref.png b/test/reference/partial-clip-text-top.argb32.ref.png
new file mode 100644 (file)
index 0000000..d18475b
Binary files /dev/null and b/test/reference/partial-clip-text-top.argb32.ref.png differ
index afe2d3e..d18475b 100644 (file)
Binary files a/test/reference/partial-clip-text-top.base.argb32.ref.png and b/test/reference/partial-clip-text-top.base.argb32.ref.png differ
index afe2d3e..d18475b 100644 (file)
Binary files a/test/reference/partial-clip-text-top.base.rgb24.ref.png and b/test/reference/partial-clip-text-top.base.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-top.egl.argb32.ref.png b/test/reference/partial-clip-text-top.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e8563c3
Binary files /dev/null and b/test/reference/partial-clip-text-top.egl.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-top.mask.argb32.ref.png b/test/reference/partial-clip-text-top.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d18475b
Binary files /dev/null and b/test/reference/partial-clip-text-top.mask.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-top.mask.rgb24.ref.png b/test/reference/partial-clip-text-top.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d18475b
Binary files /dev/null and b/test/reference/partial-clip-text-top.mask.rgb24.ref.png differ
diff --git a/test/reference/partial-clip-text-top.rgb24.ref.png b/test/reference/partial-clip-text-top.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d18475b
Binary files /dev/null and b/test/reference/partial-clip-text-top.rgb24.ref.png differ
index afe2d3e..d18475b 100644 (file)
Binary files a/test/reference/partial-clip-text-top.traps.argb32.ref.png and b/test/reference/partial-clip-text-top.traps.argb32.ref.png differ
diff --git a/test/reference/partial-clip-text-top.traps.ref.png b/test/reference/partial-clip-text-top.traps.ref.png
new file mode 100644 (file)
index 0000000..d18475b
Binary files /dev/null and b/test/reference/partial-clip-text-top.traps.ref.png differ
index afe2d3e..d18475b 100644 (file)
Binary files a/test/reference/partial-clip-text-top.traps.rgb24.ref.png and b/test/reference/partial-clip-text-top.traps.rgb24.ref.png differ
diff --git a/test/reference/partial-coverage-half-reference.argb32.ref.png b/test/reference/partial-coverage-half-reference.argb32.ref.png
new file mode 100644 (file)
index 0000000..17f4ff0
Binary files /dev/null and b/test/reference/partial-coverage-half-reference.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-half-reference.egl.argb32.ref.png b/test/reference/partial-coverage-half-reference.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2245b7c
Binary files /dev/null and b/test/reference/partial-coverage-half-reference.egl.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-half-reference.mask.argb32.ref.png b/test/reference/partial-coverage-half-reference.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..17f4ff0
Binary files /dev/null and b/test/reference/partial-coverage-half-reference.mask.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-half-reference.mask.rgb24.ref.png b/test/reference/partial-coverage-half-reference.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..17f4ff0
Binary files /dev/null and b/test/reference/partial-coverage-half-reference.mask.rgb24.ref.png differ
diff --git a/test/reference/partial-coverage-half-reference.rgb24.ref.png b/test/reference/partial-coverage-half-reference.rgb24.ref.png
new file mode 100644 (file)
index 0000000..17f4ff0
Binary files /dev/null and b/test/reference/partial-coverage-half-reference.rgb24.ref.png differ
diff --git a/test/reference/partial-coverage-reference.argb32.ref.png b/test/reference/partial-coverage-reference.argb32.ref.png
new file mode 100644 (file)
index 0000000..9e4a6fe
Binary files /dev/null and b/test/reference/partial-coverage-reference.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-reference.egl.argb32.ref.png b/test/reference/partial-coverage-reference.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..eeb8249
Binary files /dev/null and b/test/reference/partial-coverage-reference.egl.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-reference.mask.argb32.ref.png b/test/reference/partial-coverage-reference.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9e4a6fe
Binary files /dev/null and b/test/reference/partial-coverage-reference.mask.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-reference.mask.rgb24.ref.png b/test/reference/partial-coverage-reference.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9e4a6fe
Binary files /dev/null and b/test/reference/partial-coverage-reference.mask.rgb24.ref.png differ
diff --git a/test/reference/partial-coverage-reference.rgb24.ref.png b/test/reference/partial-coverage-reference.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9e4a6fe
Binary files /dev/null and b/test/reference/partial-coverage-reference.rgb24.ref.png differ
diff --git a/test/reference/partial-coverage-three-quarter-reference.argb32.ref.png b/test/reference/partial-coverage-three-quarter-reference.argb32.ref.png
new file mode 100644 (file)
index 0000000..ea16dc4
Binary files /dev/null and b/test/reference/partial-coverage-three-quarter-reference.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-three-quarter-reference.egl.argb32.ref.png b/test/reference/partial-coverage-three-quarter-reference.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8d2edd4
Binary files /dev/null and b/test/reference/partial-coverage-three-quarter-reference.egl.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-three-quarter-reference.mask.argb32.ref.png b/test/reference/partial-coverage-three-quarter-reference.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ea16dc4
Binary files /dev/null and b/test/reference/partial-coverage-three-quarter-reference.mask.argb32.ref.png differ
diff --git a/test/reference/partial-coverage-three-quarter-reference.mask.rgb24.ref.png b/test/reference/partial-coverage-three-quarter-reference.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ea16dc4
Binary files /dev/null and b/test/reference/partial-coverage-three-quarter-reference.mask.rgb24.ref.png differ
diff --git a/test/reference/partial-coverage-three-quarter-reference.rgb24.ref.png b/test/reference/partial-coverage-three-quarter-reference.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ea16dc4
Binary files /dev/null and b/test/reference/partial-coverage-three-quarter-reference.rgb24.ref.png differ
diff --git a/test/reference/pass-through.argb32.ref.png b/test/reference/pass-through.argb32.ref.png
new file mode 100644 (file)
index 0000000..058a192
Binary files /dev/null and b/test/reference/pass-through.argb32.ref.png differ
diff --git a/test/reference/pass-through.base.argb32.ref.png b/test/reference/pass-through.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..058a192
Binary files /dev/null and b/test/reference/pass-through.base.argb32.ref.png differ
diff --git a/test/reference/pass-through.base.rgb24.ref.png b/test/reference/pass-through.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1be631a
Binary files /dev/null and b/test/reference/pass-through.base.rgb24.ref.png differ
diff --git a/test/reference/pass-through.egl.argb32.ref.png b/test/reference/pass-through.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..051c27e
Binary files /dev/null and b/test/reference/pass-through.egl.argb32.ref.png differ
diff --git a/test/reference/pass-through.mask.argb32.ref.png b/test/reference/pass-through.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..058a192
Binary files /dev/null and b/test/reference/pass-through.mask.argb32.ref.png differ
diff --git a/test/reference/pass-through.mask.rgb24.ref.png b/test/reference/pass-through.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1be631a
Binary files /dev/null and b/test/reference/pass-through.mask.rgb24.ref.png differ
index b074ede..1be631a 100644 (file)
Binary files a/test/reference/pass-through.rgb24.ref.png and b/test/reference/pass-through.rgb24.ref.png differ
diff --git a/test/reference/pass-through.traps.argb32.ref.png b/test/reference/pass-through.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..058a192
Binary files /dev/null and b/test/reference/pass-through.traps.argb32.ref.png differ
diff --git a/test/reference/pass-through.traps.rgb24.ref.png b/test/reference/pass-through.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1be631a
Binary files /dev/null and b/test/reference/pass-through.traps.rgb24.ref.png differ
diff --git a/test/reference/path-append.argb32.ref.png b/test/reference/path-append.argb32.ref.png
new file mode 100644 (file)
index 0000000..f097af0
Binary files /dev/null and b/test/reference/path-append.argb32.ref.png differ
diff --git a/test/reference/path-append.egl.argb32.ref.png b/test/reference/path-append.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d738345
Binary files /dev/null and b/test/reference/path-append.egl.argb32.ref.png differ
diff --git a/test/reference/path-append.mask.argb32.ref.png b/test/reference/path-append.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f097af0
Binary files /dev/null and b/test/reference/path-append.mask.argb32.ref.png differ
diff --git a/test/reference/path-append.mask.rgb24.ref.png b/test/reference/path-append.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f097af0
Binary files /dev/null and b/test/reference/path-append.mask.rgb24.ref.png differ
diff --git a/test/reference/path-append.rgb24.ref.png b/test/reference/path-append.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f097af0
Binary files /dev/null and b/test/reference/path-append.rgb24.ref.png differ
diff --git a/test/reference/path-stroke-twice.argb32.ref.png b/test/reference/path-stroke-twice.argb32.ref.png
new file mode 100644 (file)
index 0000000..743c6ce
Binary files /dev/null and b/test/reference/path-stroke-twice.argb32.ref.png differ
diff --git a/test/reference/path-stroke-twice.egl.argb32.ref.png b/test/reference/path-stroke-twice.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..743c6ce
Binary files /dev/null and b/test/reference/path-stroke-twice.egl.argb32.ref.png differ
diff --git a/test/reference/path-stroke-twice.mask.argb32.ref.png b/test/reference/path-stroke-twice.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..743c6ce
Binary files /dev/null and b/test/reference/path-stroke-twice.mask.argb32.ref.png differ
diff --git a/test/reference/path-stroke-twice.mask.rgb24.ref.png b/test/reference/path-stroke-twice.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..743c6ce
Binary files /dev/null and b/test/reference/path-stroke-twice.mask.rgb24.ref.png differ
diff --git a/test/reference/path-stroke-twice.rgb24.ref.png b/test/reference/path-stroke-twice.rgb24.ref.png
new file mode 100644 (file)
index 0000000..743c6ce
Binary files /dev/null and b/test/reference/path-stroke-twice.rgb24.ref.png differ
diff --git a/test/reference/pattern-getters.argb32.ref.png b/test/reference/pattern-getters.argb32.ref.png
new file mode 100644 (file)
index 0000000..3cc39a8
Binary files /dev/null and b/test/reference/pattern-getters.argb32.ref.png differ
diff --git a/test/reference/pattern-getters.egl.argb32.ref.png b/test/reference/pattern-getters.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3cc39a8
Binary files /dev/null and b/test/reference/pattern-getters.egl.argb32.ref.png differ
diff --git a/test/reference/pattern-getters.mask.argb32.ref.png b/test/reference/pattern-getters.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3cc39a8
Binary files /dev/null and b/test/reference/pattern-getters.mask.argb32.ref.png differ
diff --git a/test/reference/pattern-getters.mask.rgb24.ref.png b/test/reference/pattern-getters.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3cc39a8
Binary files /dev/null and b/test/reference/pattern-getters.mask.rgb24.ref.png differ
diff --git a/test/reference/pattern-getters.rgb24.ref.png b/test/reference/pattern-getters.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3cc39a8
Binary files /dev/null and b/test/reference/pattern-getters.rgb24.ref.png differ
diff --git a/test/reference/pdf-isolated-group.base.argb32.ref.png b/test/reference/pdf-isolated-group.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..6c8522c
Binary files /dev/null and b/test/reference/pdf-isolated-group.base.argb32.ref.png differ
diff --git a/test/reference/pdf-isolated-group.base.rgb24.ref.png b/test/reference/pdf-isolated-group.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6c8522c
Binary files /dev/null and b/test/reference/pdf-isolated-group.base.rgb24.ref.png differ
diff --git a/test/reference/pdf-isolated-group.egl.argb32.ref.png b/test/reference/pdf-isolated-group.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2b38bcc
Binary files /dev/null and b/test/reference/pdf-isolated-group.egl.argb32.ref.png differ
diff --git a/test/reference/pdf-isolated-group.ref.png b/test/reference/pdf-isolated-group.ref.png
new file mode 100644 (file)
index 0000000..6c8522c
Binary files /dev/null and b/test/reference/pdf-isolated-group.ref.png differ
diff --git a/test/reference/pdf-surface-source.egl.argb32.ref.png b/test/reference/pdf-surface-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/pdf-surface-source.egl.argb32.ref.png differ
diff --git a/test/reference/pdf-surface-source.mask.argb32.ref.png b/test/reference/pdf-surface-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/pdf-surface-source.mask.argb32.ref.png differ
diff --git a/test/reference/pdf-surface-source.mask.rgb24.ref.png b/test/reference/pdf-surface-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/pdf-surface-source.mask.rgb24.ref.png differ
diff --git a/test/reference/pixman-rotate.argb32.ref.png b/test/reference/pixman-rotate.argb32.ref.png
new file mode 100644 (file)
index 0000000..7e47a4d
Binary files /dev/null and b/test/reference/pixman-rotate.argb32.ref.png differ
diff --git a/test/reference/pixman-rotate.egl.argb32.ref.png b/test/reference/pixman-rotate.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9e7ba42
Binary files /dev/null and b/test/reference/pixman-rotate.egl.argb32.ref.png differ
diff --git a/test/reference/pixman-rotate.mask.argb32.ref.png b/test/reference/pixman-rotate.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7e47a4d
Binary files /dev/null and b/test/reference/pixman-rotate.mask.argb32.ref.png differ
diff --git a/test/reference/pixman-rotate.mask.rgb24.ref.png b/test/reference/pixman-rotate.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..397acbe
Binary files /dev/null and b/test/reference/pixman-rotate.mask.rgb24.ref.png differ
index 60d9b1c..397acbe 100644 (file)
Binary files a/test/reference/pixman-rotate.rgb24.ref.png and b/test/reference/pixman-rotate.rgb24.ref.png differ
diff --git a/test/reference/ps-surface-source.egl.argb32.ref.png b/test/reference/ps-surface-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/ps-surface-source.egl.argb32.ref.png differ
diff --git a/test/reference/ps-surface-source.mask.argb32.ref.png b/test/reference/ps-surface-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/ps-surface-source.mask.argb32.ref.png differ
diff --git a/test/reference/ps-surface-source.mask.rgb24.ref.png b/test/reference/ps-surface-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/ps-surface-source.mask.rgb24.ref.png differ
diff --git a/test/reference/pthread-same-source.argb32.ref.png b/test/reference/pthread-same-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..cfb519d
Binary files /dev/null and b/test/reference/pthread-same-source.argb32.ref.png differ
diff --git a/test/reference/pthread-same-source.egl.argb32.ref.png b/test/reference/pthread-same-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..faab9d3
Binary files /dev/null and b/test/reference/pthread-same-source.egl.argb32.ref.png differ
diff --git a/test/reference/pthread-same-source.mask.argb32.ref.png b/test/reference/pthread-same-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..cfb519d
Binary files /dev/null and b/test/reference/pthread-same-source.mask.argb32.ref.png differ
diff --git a/test/reference/pthread-same-source.mask.rgb24.ref.png b/test/reference/pthread-same-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..cfb519d
Binary files /dev/null and b/test/reference/pthread-same-source.mask.rgb24.ref.png differ
diff --git a/test/reference/pthread-same-source.rgb24.ref.png b/test/reference/pthread-same-source.rgb24.ref.png
new file mode 100644 (file)
index 0000000..cfb519d
Binary files /dev/null and b/test/reference/pthread-same-source.rgb24.ref.png differ
diff --git a/test/reference/pthread-show-text.argb32.ref.png b/test/reference/pthread-show-text.argb32.ref.png
new file mode 100644 (file)
index 0000000..90d0af3
Binary files /dev/null and b/test/reference/pthread-show-text.argb32.ref.png differ
index efa5fe9..90d0af3 100644 (file)
Binary files a/test/reference/pthread-show-text.base.argb32.ref.png and b/test/reference/pthread-show-text.base.argb32.ref.png differ
index efa5fe9..90d0af3 100644 (file)
Binary files a/test/reference/pthread-show-text.base.rgb24.ref.png and b/test/reference/pthread-show-text.base.rgb24.ref.png differ
diff --git a/test/reference/pthread-show-text.mask.argb32.ref.png b/test/reference/pthread-show-text.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..90d0af3
Binary files /dev/null and b/test/reference/pthread-show-text.mask.argb32.ref.png differ
diff --git a/test/reference/pthread-show-text.mask.rgb24.ref.png b/test/reference/pthread-show-text.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..90d0af3
Binary files /dev/null and b/test/reference/pthread-show-text.mask.rgb24.ref.png differ
diff --git a/test/reference/pthread-show-text.rgb24.ref.png b/test/reference/pthread-show-text.rgb24.ref.png
new file mode 100644 (file)
index 0000000..90d0af3
Binary files /dev/null and b/test/reference/pthread-show-text.rgb24.ref.png differ
index efa5fe9..90d0af3 100644 (file)
Binary files a/test/reference/pthread-show-text.traps.argb32.ref.png and b/test/reference/pthread-show-text.traps.argb32.ref.png differ
diff --git a/test/reference/pthread-show-text.traps.ref.png b/test/reference/pthread-show-text.traps.ref.png
new file mode 100644 (file)
index 0000000..90d0af3
Binary files /dev/null and b/test/reference/pthread-show-text.traps.ref.png differ
index efa5fe9..90d0af3 100644 (file)
Binary files a/test/reference/pthread-show-text.traps.rgb24.ref.png and b/test/reference/pthread-show-text.traps.rgb24.ref.png differ
diff --git a/test/reference/pthread-similar.argb32.ref.png b/test/reference/pthread-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..a22210d
Binary files /dev/null and b/test/reference/pthread-similar.argb32.ref.png differ
diff --git a/test/reference/pthread-similar.egl.argb32.ref.png b/test/reference/pthread-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0395c1f
Binary files /dev/null and b/test/reference/pthread-similar.egl.argb32.ref.png differ
diff --git a/test/reference/pthread-similar.mask.argb32.ref.png b/test/reference/pthread-similar.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a22210d
Binary files /dev/null and b/test/reference/pthread-similar.mask.argb32.ref.png differ
diff --git a/test/reference/pthread-similar.mask.rgb24.ref.png b/test/reference/pthread-similar.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a22210d
Binary files /dev/null and b/test/reference/pthread-similar.mask.rgb24.ref.png differ
diff --git a/test/reference/pthread-similar.rgb24.ref.png b/test/reference/pthread-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a22210d
Binary files /dev/null and b/test/reference/pthread-similar.rgb24.ref.png differ
diff --git a/test/reference/push-group-color.argb32.ref.png b/test/reference/push-group-color.argb32.ref.png
new file mode 100644 (file)
index 0000000..5615196
Binary files /dev/null and b/test/reference/push-group-color.argb32.ref.png differ
diff --git a/test/reference/push-group-color.egl.argb32.ref.png b/test/reference/push-group-color.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f4ebe06
Binary files /dev/null and b/test/reference/push-group-color.egl.argb32.ref.png differ
diff --git a/test/reference/push-group-color.mask.argb32.ref.png b/test/reference/push-group-color.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5615196
Binary files /dev/null and b/test/reference/push-group-color.mask.argb32.ref.png differ
diff --git a/test/reference/push-group-color.mask.rgb24.ref.png b/test/reference/push-group-color.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5615196
Binary files /dev/null and b/test/reference/push-group-color.mask.rgb24.ref.png differ
diff --git a/test/reference/push-group-color.rgb24.ref.png b/test/reference/push-group-color.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5615196
Binary files /dev/null and b/test/reference/push-group-color.rgb24.ref.png differ
diff --git a/test/reference/push-group-path-offset.argb32.ref.png b/test/reference/push-group-path-offset.argb32.ref.png
new file mode 100644 (file)
index 0000000..b836a91
Binary files /dev/null and b/test/reference/push-group-path-offset.argb32.ref.png differ
diff --git a/test/reference/push-group-path-offset.egl.argb32.ref.png b/test/reference/push-group-path-offset.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6623553
Binary files /dev/null and b/test/reference/push-group-path-offset.egl.argb32.ref.png differ
diff --git a/test/reference/push-group-path-offset.mask.argb32.ref.png b/test/reference/push-group-path-offset.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b836a91
Binary files /dev/null and b/test/reference/push-group-path-offset.mask.argb32.ref.png differ
diff --git a/test/reference/push-group-path-offset.mask.rgb24.ref.png b/test/reference/push-group-path-offset.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b836a91
Binary files /dev/null and b/test/reference/push-group-path-offset.mask.rgb24.ref.png differ
diff --git a/test/reference/push-group-path-offset.rgb24.ref.png b/test/reference/push-group-path-offset.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b836a91
Binary files /dev/null and b/test/reference/push-group-path-offset.rgb24.ref.png differ
diff --git a/test/reference/push-group.argb32.ref.png b/test/reference/push-group.argb32.ref.png
new file mode 100644 (file)
index 0000000..60f5eec
Binary files /dev/null and b/test/reference/push-group.argb32.ref.png differ
diff --git a/test/reference/push-group.egl.argb32.ref.png b/test/reference/push-group.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4b3bdaa
Binary files /dev/null and b/test/reference/push-group.egl.argb32.ref.png differ
diff --git a/test/reference/push-group.mask.argb32.ref.png b/test/reference/push-group.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..60f5eec
Binary files /dev/null and b/test/reference/push-group.mask.argb32.ref.png differ
diff --git a/test/reference/push-group.mask.rgb24.ref.png b/test/reference/push-group.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..19f0a2b
Binary files /dev/null and b/test/reference/push-group.mask.rgb24.ref.png differ
index d88ff39..19f0a2b 100644 (file)
Binary files a/test/reference/push-group.rgb24.ref.png and b/test/reference/push-group.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient-extend.egl.argb32.ref.png b/test/reference/radial-gradient-extend.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1f7a766
Binary files /dev/null and b/test/reference/radial-gradient-extend.egl.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-extend.mask.argb32.ref.png b/test/reference/radial-gradient-extend.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3d7de5e
Binary files /dev/null and b/test/reference/radial-gradient-extend.mask.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-extend.mask.rgb24.ref.png b/test/reference/radial-gradient-extend.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3d7de5e
Binary files /dev/null and b/test/reference/radial-gradient-extend.mask.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient-mask-source.egl.argb32.ref.png b/test/reference/radial-gradient-mask-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..46a6fa5
Binary files /dev/null and b/test/reference/radial-gradient-mask-source.egl.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-mask-source.mask.argb32.ref.png b/test/reference/radial-gradient-mask-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2bf65b3
Binary files /dev/null and b/test/reference/radial-gradient-mask-source.mask.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-mask-source.mask.rgb24.ref.png b/test/reference/radial-gradient-mask-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5533519
Binary files /dev/null and b/test/reference/radial-gradient-mask-source.mask.rgb24.ref.png differ
index 5748d82..5533519 100644 (file)
Binary files a/test/reference/radial-gradient-mask-source.traps.rgb24.ref.png and b/test/reference/radial-gradient-mask-source.traps.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient-mask.argb32.ref.png b/test/reference/radial-gradient-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4db39aa
Binary files /dev/null and b/test/reference/radial-gradient-mask.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-mask.egl.argb32.ref.png b/test/reference/radial-gradient-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..66543f1
Binary files /dev/null and b/test/reference/radial-gradient-mask.egl.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-mask.mask.argb32.ref.png b/test/reference/radial-gradient-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4db39aa
Binary files /dev/null and b/test/reference/radial-gradient-mask.mask.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-mask.mask.rgb24.ref.png b/test/reference/radial-gradient-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4db39aa
Binary files /dev/null and b/test/reference/radial-gradient-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient-mask.rgb24.ref.png b/test/reference/radial-gradient-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4db39aa
Binary files /dev/null and b/test/reference/radial-gradient-mask.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient-one-stop.argb32.ref.png b/test/reference/radial-gradient-one-stop.argb32.ref.png
new file mode 100644 (file)
index 0000000..fb35be6
Binary files /dev/null and b/test/reference/radial-gradient-one-stop.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-one-stop.egl.argb32.ref.png b/test/reference/radial-gradient-one-stop.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f48449e
Binary files /dev/null and b/test/reference/radial-gradient-one-stop.egl.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-one-stop.mask.argb32.ref.png b/test/reference/radial-gradient-one-stop.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..fb35be6
Binary files /dev/null and b/test/reference/radial-gradient-one-stop.mask.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-one-stop.mask.rgb24.ref.png b/test/reference/radial-gradient-one-stop.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fb35be6
Binary files /dev/null and b/test/reference/radial-gradient-one-stop.mask.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient-one-stop.rgb24.ref.png b/test/reference/radial-gradient-one-stop.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fb35be6
Binary files /dev/null and b/test/reference/radial-gradient-one-stop.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient-source.egl.argb32.ref.png b/test/reference/radial-gradient-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a6a7cdb
Binary files /dev/null and b/test/reference/radial-gradient-source.egl.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-source.mask.argb32.ref.png b/test/reference/radial-gradient-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4ab4796
Binary files /dev/null and b/test/reference/radial-gradient-source.mask.argb32.ref.png differ
diff --git a/test/reference/radial-gradient-source.mask.rgb24.ref.png b/test/reference/radial-gradient-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..afaa241
Binary files /dev/null and b/test/reference/radial-gradient-source.mask.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient.argb32.ref.png b/test/reference/radial-gradient.argb32.ref.png
new file mode 100644 (file)
index 0000000..a2cbbc8
Binary files /dev/null and b/test/reference/radial-gradient.argb32.ref.png differ
diff --git a/test/reference/radial-gradient.egl.argb32.ref.png b/test/reference/radial-gradient.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..361dc64
Binary files /dev/null and b/test/reference/radial-gradient.egl.argb32.ref.png differ
diff --git a/test/reference/radial-gradient.mask.argb32.ref.png b/test/reference/radial-gradient.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a2cbbc8
Binary files /dev/null and b/test/reference/radial-gradient.mask.argb32.ref.png differ
diff --git a/test/reference/radial-gradient.mask.rgb24.ref.png b/test/reference/radial-gradient.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a2cbbc8
Binary files /dev/null and b/test/reference/radial-gradient.mask.rgb24.ref.png differ
diff --git a/test/reference/radial-gradient.rgb24.ref.png b/test/reference/radial-gradient.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a2cbbc8
Binary files /dev/null and b/test/reference/radial-gradient.rgb24.ref.png differ
diff --git a/test/reference/radial-outer-focus.base.argb32.ref.png b/test/reference/radial-outer-focus.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..21f0bf6
Binary files /dev/null and b/test/reference/radial-outer-focus.base.argb32.ref.png differ
diff --git a/test/reference/radial-outer-focus.base.rgb24.ref.png b/test/reference/radial-outer-focus.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..21f0bf6
Binary files /dev/null and b/test/reference/radial-outer-focus.base.rgb24.ref.png differ
diff --git a/test/reference/radial-outer-focus.egl.argb32.ref.png b/test/reference/radial-outer-focus.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..008e73c
Binary files /dev/null and b/test/reference/radial-outer-focus.egl.argb32.ref.png differ
diff --git a/test/reference/radial-outer-focus.mask.argb32.ref.png b/test/reference/radial-outer-focus.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..21f0bf6
Binary files /dev/null and b/test/reference/radial-outer-focus.mask.argb32.ref.png differ
diff --git a/test/reference/radial-outer-focus.mask.rgb24.ref.png b/test/reference/radial-outer-focus.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..21f0bf6
Binary files /dev/null and b/test/reference/radial-outer-focus.mask.rgb24.ref.png differ
diff --git a/test/reference/radial-outer-focus.traps.argb32.ref.png b/test/reference/radial-outer-focus.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..21f0bf6
Binary files /dev/null and b/test/reference/radial-outer-focus.traps.argb32.ref.png differ
diff --git a/test/reference/radial-outer-focus.traps.rgb24.ref.png b/test/reference/radial-outer-focus.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..21f0bf6
Binary files /dev/null and b/test/reference/radial-outer-focus.traps.rgb24.ref.png differ
diff --git a/test/reference/random-clip.base.argb32.ref.png b/test/reference/random-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..2750fb1
Binary files /dev/null and b/test/reference/random-clip.base.argb32.ref.png differ
diff --git a/test/reference/random-clip.base.rgb24.ref.png b/test/reference/random-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2750fb1
Binary files /dev/null and b/test/reference/random-clip.base.rgb24.ref.png differ
diff --git a/test/reference/random-clip.mask.argb32.ref.png b/test/reference/random-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..41643cb
Binary files /dev/null and b/test/reference/random-clip.mask.argb32.ref.png differ
diff --git a/test/reference/random-clip.mask.rgb24.ref.png b/test/reference/random-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..41643cb
Binary files /dev/null and b/test/reference/random-clip.mask.rgb24.ref.png differ
index 374d6fe..6e67010 100644 (file)
Binary files a/test/reference/random-clip.ref.png and b/test/reference/random-clip.ref.png differ
index 374d6fe..01cc60a 100644 (file)
Binary files a/test/reference/random-clip.traps.argb32.ref.png and b/test/reference/random-clip.traps.argb32.ref.png differ
index 374d6fe..01cc60a 100644 (file)
Binary files a/test/reference/random-clip.traps.rgb24.ref.png and b/test/reference/random-clip.traps.rgb24.ref.png differ
diff --git a/test/reference/random-intersections-curves-eo.argb32.ref.png b/test/reference/random-intersections-curves-eo.argb32.ref.png
new file mode 100644 (file)
index 0000000..c8b0c53
Binary files /dev/null and b/test/reference/random-intersections-curves-eo.argb32.ref.png differ
diff --git a/test/reference/random-intersections-curves-eo.egl.argb32.ref.png b/test/reference/random-intersections-curves-eo.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5e67574
Binary files /dev/null and b/test/reference/random-intersections-curves-eo.egl.argb32.ref.png differ
diff --git a/test/reference/random-intersections-curves-eo.mask.argb32.ref.png b/test/reference/random-intersections-curves-eo.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c8b0c53
Binary files /dev/null and b/test/reference/random-intersections-curves-eo.mask.argb32.ref.png differ
diff --git a/test/reference/random-intersections-curves-eo.mask.rgb24.ref.png b/test/reference/random-intersections-curves-eo.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c8b0c53
Binary files /dev/null and b/test/reference/random-intersections-curves-eo.mask.rgb24.ref.png differ
index e8cfebd..53073fb 100644 (file)
Binary files a/test/reference/random-intersections-curves-eo.ref.png and b/test/reference/random-intersections-curves-eo.ref.png differ
diff --git a/test/reference/random-intersections-curves-eo.rgb24.ref.png b/test/reference/random-intersections-curves-eo.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c8b0c53
Binary files /dev/null and b/test/reference/random-intersections-curves-eo.rgb24.ref.png differ
diff --git a/test/reference/random-intersections-curves-nz.argb32.ref.png b/test/reference/random-intersections-curves-nz.argb32.ref.png
new file mode 100644 (file)
index 0000000..2678590
Binary files /dev/null and b/test/reference/random-intersections-curves-nz.argb32.ref.png differ
diff --git a/test/reference/random-intersections-curves-nz.egl.argb32.ref.png b/test/reference/random-intersections-curves-nz.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..22b0a0b
Binary files /dev/null and b/test/reference/random-intersections-curves-nz.egl.argb32.ref.png differ
diff --git a/test/reference/random-intersections-curves-nz.mask.argb32.ref.png b/test/reference/random-intersections-curves-nz.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2678590
Binary files /dev/null and b/test/reference/random-intersections-curves-nz.mask.argb32.ref.png differ
diff --git a/test/reference/random-intersections-curves-nz.mask.rgb24.ref.png b/test/reference/random-intersections-curves-nz.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2678590
Binary files /dev/null and b/test/reference/random-intersections-curves-nz.mask.rgb24.ref.png differ
index 6cd9495..c889b17 100644 (file)
Binary files a/test/reference/random-intersections-curves-nz.ref.png and b/test/reference/random-intersections-curves-nz.ref.png differ
diff --git a/test/reference/random-intersections-curves-nz.rgb24.ref.png b/test/reference/random-intersections-curves-nz.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2678590
Binary files /dev/null and b/test/reference/random-intersections-curves-nz.rgb24.ref.png differ
diff --git a/test/reference/random-intersections-eo.argb32.ref.png b/test/reference/random-intersections-eo.argb32.ref.png
new file mode 100644 (file)
index 0000000..0e8460e
Binary files /dev/null and b/test/reference/random-intersections-eo.argb32.ref.png differ
diff --git a/test/reference/random-intersections-eo.egl.argb32.ref.png b/test/reference/random-intersections-eo.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b8c037d
Binary files /dev/null and b/test/reference/random-intersections-eo.egl.argb32.ref.png differ
diff --git a/test/reference/random-intersections-eo.mask.argb32.ref.png b/test/reference/random-intersections-eo.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0e8460e
Binary files /dev/null and b/test/reference/random-intersections-eo.mask.argb32.ref.png differ
diff --git a/test/reference/random-intersections-eo.mask.rgb24.ref.png b/test/reference/random-intersections-eo.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0e8460e
Binary files /dev/null and b/test/reference/random-intersections-eo.mask.rgb24.ref.png differ
diff --git a/test/reference/random-intersections-eo.rgb24.ref.png b/test/reference/random-intersections-eo.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0e8460e
Binary files /dev/null and b/test/reference/random-intersections-eo.rgb24.ref.png differ
diff --git a/test/reference/random-intersections-nonzero.argb32.ref.png b/test/reference/random-intersections-nonzero.argb32.ref.png
new file mode 100644 (file)
index 0000000..dfc2f33
Binary files /dev/null and b/test/reference/random-intersections-nonzero.argb32.ref.png differ
diff --git a/test/reference/random-intersections-nonzero.egl.argb32.ref.png b/test/reference/random-intersections-nonzero.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6d29176
Binary files /dev/null and b/test/reference/random-intersections-nonzero.egl.argb32.ref.png differ
diff --git a/test/reference/random-intersections-nonzero.mask.argb32.ref.png b/test/reference/random-intersections-nonzero.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..dfc2f33
Binary files /dev/null and b/test/reference/random-intersections-nonzero.mask.argb32.ref.png differ
diff --git a/test/reference/random-intersections-nonzero.mask.rgb24.ref.png b/test/reference/random-intersections-nonzero.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dfc2f33
Binary files /dev/null and b/test/reference/random-intersections-nonzero.mask.rgb24.ref.png differ
diff --git a/test/reference/random-intersections-nonzero.rgb24.ref.png b/test/reference/random-intersections-nonzero.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dfc2f33
Binary files /dev/null and b/test/reference/random-intersections-nonzero.rgb24.ref.png differ
diff --git a/test/reference/raster-source.argb32.ref.png b/test/reference/raster-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.argb32.ref.png differ
diff --git a/test/reference/raster-source.base.argb32.ref.png b/test/reference/raster-source.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.base.argb32.ref.png differ
diff --git a/test/reference/raster-source.base.rgb24.ref.png b/test/reference/raster-source.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.base.rgb24.ref.png differ
diff --git a/test/reference/raster-source.egl.argb32.ref.png b/test/reference/raster-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e321e79
Binary files /dev/null and b/test/reference/raster-source.egl.argb32.ref.png differ
diff --git a/test/reference/raster-source.mask.argb32.ref.png b/test/reference/raster-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.mask.argb32.ref.png differ
diff --git a/test/reference/raster-source.mask.rgb24.ref.png b/test/reference/raster-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.mask.rgb24.ref.png differ
diff --git a/test/reference/raster-source.ps.ref.png b/test/reference/raster-source.ps.ref.png
new file mode 100644 (file)
index 0000000..2ffc114
Binary files /dev/null and b/test/reference/raster-source.ps.ref.png differ
diff --git a/test/reference/raster-source.ref.png b/test/reference/raster-source.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.ref.png differ
diff --git a/test/reference/raster-source.rgb24.ref.png b/test/reference/raster-source.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.rgb24.ref.png differ
diff --git a/test/reference/raster-source.traps.argb32.ref.png b/test/reference/raster-source.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.traps.argb32.ref.png differ
diff --git a/test/reference/raster-source.traps.rgb24.ref.png b/test/reference/raster-source.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ac5e560
Binary files /dev/null and b/test/reference/raster-source.traps.rgb24.ref.png differ
diff --git a/test/reference/record-extend-none-similar.argb32.ref.png b/test/reference/record-extend-none-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none-similar.argb32.ref.png differ
diff --git a/test/reference/record-extend-none-similar.base.argb32.ref.png b/test/reference/record-extend-none-similar.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none-similar.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-none-similar.base.rgb24.ref.png b/test/reference/record-extend-none-similar.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none-similar.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-none-similar.egl.argb32.ref.png b/test/reference/record-extend-none-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none-similar.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-none-similar.image16.rgb24.ref.png b/test/reference/record-extend-none-similar.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none-similar.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-none-similar.rgb24.ref.png b/test/reference/record-extend-none-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none-similar.rgb24.ref.png differ
diff --git a/test/reference/record-extend-none.argb32.ref.png b/test/reference/record-extend-none.argb32.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none.argb32.ref.png differ
diff --git a/test/reference/record-extend-none.base.argb32.ref.png b/test/reference/record-extend-none.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-none.base.rgb24.ref.png b/test/reference/record-extend-none.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-none.egl.argb32.ref.png b/test/reference/record-extend-none.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..164c8b3
Binary files /dev/null and b/test/reference/record-extend-none.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-none.image16.rgb24.ref.png b/test/reference/record-extend-none.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-none.rgb24.ref.png b/test/reference/record-extend-none.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d63c31c
Binary files /dev/null and b/test/reference/record-extend-none.rgb24.ref.png differ
diff --git a/test/reference/record-extend-pad-similar.argb32.ref.png b/test/reference/record-extend-pad-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad-similar.argb32.ref.png differ
diff --git a/test/reference/record-extend-pad-similar.base.argb32.ref.png b/test/reference/record-extend-pad-similar.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad-similar.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-pad-similar.base.rgb24.ref.png b/test/reference/record-extend-pad-similar.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad-similar.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-pad-similar.egl.argb32.ref.png b/test/reference/record-extend-pad-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad-similar.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-pad-similar.image16.rgb24.ref.png b/test/reference/record-extend-pad-similar.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad-similar.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-pad-similar.rgb24.ref.png b/test/reference/record-extend-pad-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad-similar.rgb24.ref.png differ
diff --git a/test/reference/record-extend-pad.argb32.ref.png b/test/reference/record-extend-pad.argb32.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad.argb32.ref.png differ
diff --git a/test/reference/record-extend-pad.base.argb32.ref.png b/test/reference/record-extend-pad.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-pad.base.rgb24.ref.png b/test/reference/record-extend-pad.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-pad.egl.argb32.ref.png b/test/reference/record-extend-pad.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bbd9564
Binary files /dev/null and b/test/reference/record-extend-pad.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-pad.image16.rgb24.ref.png b/test/reference/record-extend-pad.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-pad.rgb24.ref.png b/test/reference/record-extend-pad.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1291525
Binary files /dev/null and b/test/reference/record-extend-pad.rgb24.ref.png differ
diff --git a/test/reference/record-extend-reflect-similar.argb32.ref.png b/test/reference/record-extend-reflect-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect-similar.argb32.ref.png differ
diff --git a/test/reference/record-extend-reflect-similar.base.argb32.ref.png b/test/reference/record-extend-reflect-similar.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect-similar.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-reflect-similar.base.rgb24.ref.png b/test/reference/record-extend-reflect-similar.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect-similar.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-reflect-similar.egl.argb32.ref.png b/test/reference/record-extend-reflect-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect-similar.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-reflect-similar.image16.rgb24.ref.png b/test/reference/record-extend-reflect-similar.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect-similar.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-reflect-similar.rgb24.ref.png b/test/reference/record-extend-reflect-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect-similar.rgb24.ref.png differ
diff --git a/test/reference/record-extend-reflect.argb32.ref.png b/test/reference/record-extend-reflect.argb32.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect.argb32.ref.png differ
diff --git a/test/reference/record-extend-reflect.base.argb32.ref.png b/test/reference/record-extend-reflect.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-reflect.base.rgb24.ref.png b/test/reference/record-extend-reflect.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-reflect.egl.argb32.ref.png b/test/reference/record-extend-reflect.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6a6f762
Binary files /dev/null and b/test/reference/record-extend-reflect.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-reflect.image16.rgb24.ref.png b/test/reference/record-extend-reflect.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-reflect.rgb24.ref.png b/test/reference/record-extend-reflect.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aec5c94
Binary files /dev/null and b/test/reference/record-extend-reflect.rgb24.ref.png differ
diff --git a/test/reference/record-extend-repeat-similar.argb32.ref.png b/test/reference/record-extend-repeat-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat-similar.argb32.ref.png differ
diff --git a/test/reference/record-extend-repeat-similar.base.argb32.ref.png b/test/reference/record-extend-repeat-similar.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat-similar.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-repeat-similar.base.rgb24.ref.png b/test/reference/record-extend-repeat-similar.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat-similar.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-repeat-similar.egl.argb32.ref.png b/test/reference/record-extend-repeat-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat-similar.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-repeat-similar.image16.rgb24.ref.png b/test/reference/record-extend-repeat-similar.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat-similar.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-repeat-similar.rgb24.ref.png b/test/reference/record-extend-repeat-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat-similar.rgb24.ref.png differ
diff --git a/test/reference/record-extend-repeat.argb32.ref.png b/test/reference/record-extend-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat.argb32.ref.png differ
diff --git a/test/reference/record-extend-repeat.base.argb32.ref.png b/test/reference/record-extend-repeat.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat.base.argb32.ref.png differ
diff --git a/test/reference/record-extend-repeat.base.rgb24.ref.png b/test/reference/record-extend-repeat.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat.base.rgb24.ref.png differ
diff --git a/test/reference/record-extend-repeat.egl.argb32.ref.png b/test/reference/record-extend-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a5ea642
Binary files /dev/null and b/test/reference/record-extend-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/record-extend-repeat.image16.rgb24.ref.png b/test/reference/record-extend-repeat.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat.image16.rgb24.ref.png differ
diff --git a/test/reference/record-extend-repeat.rgb24.ref.png b/test/reference/record-extend-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d4db9bf
Binary files /dev/null and b/test/reference/record-extend-repeat.rgb24.ref.png differ
diff --git a/test/reference/record-fill-alpha.argb32.ref.png b/test/reference/record-fill-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..9de7b50
Binary files /dev/null and b/test/reference/record-fill-alpha.argb32.ref.png differ
diff --git a/test/reference/record-fill-alpha.base.argb32.ref.png b/test/reference/record-fill-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..85df919
Binary files /dev/null and b/test/reference/record-fill-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record-fill-alpha.base.rgb24.ref.png b/test/reference/record-fill-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..85df919
Binary files /dev/null and b/test/reference/record-fill-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record-fill-alpha.base.xfail.png b/test/reference/record-fill-alpha.base.xfail.png
new file mode 100644 (file)
index 0000000..5a2ebad
Binary files /dev/null and b/test/reference/record-fill-alpha.base.xfail.png differ
diff --git a/test/reference/record-fill-alpha.egl.argb32.ref.png b/test/reference/record-fill-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d94b65a
Binary files /dev/null and b/test/reference/record-fill-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record-fill-alpha.image16.rgb24.ref.png b/test/reference/record-fill-alpha.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8ba164e
Binary files /dev/null and b/test/reference/record-fill-alpha.image16.rgb24.ref.png differ
index 3f8fa43..630c024 100644 (file)
Binary files a/test/reference/record-fill-alpha.ref.png and b/test/reference/record-fill-alpha.ref.png differ
diff --git a/test/reference/record-fill-alpha.rgb24.ref.png b/test/reference/record-fill-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9de7b50
Binary files /dev/null and b/test/reference/record-fill-alpha.rgb24.ref.png differ
diff --git a/test/reference/record-fill-alpha.xfail.png b/test/reference/record-fill-alpha.xfail.png
new file mode 100644 (file)
index 0000000..630c024
Binary files /dev/null and b/test/reference/record-fill-alpha.xfail.png differ
diff --git a/test/reference/record-mesh.argb32.ref.png b/test/reference/record-mesh.argb32.ref.png
new file mode 100644 (file)
index 0000000..4921ba3
Binary files /dev/null and b/test/reference/record-mesh.argb32.ref.png differ
diff --git a/test/reference/record-mesh.base.argb32.ref.png b/test/reference/record-mesh.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..4921ba3
Binary files /dev/null and b/test/reference/record-mesh.base.argb32.ref.png differ
diff --git a/test/reference/record-mesh.base.rgb24.ref.png b/test/reference/record-mesh.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4921ba3
Binary files /dev/null and b/test/reference/record-mesh.base.rgb24.ref.png differ
diff --git a/test/reference/record-mesh.egl.argb32.ref.png b/test/reference/record-mesh.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ca8c2cd
Binary files /dev/null and b/test/reference/record-mesh.egl.argb32.ref.png differ
diff --git a/test/reference/record-mesh.image16.rgb24.ref.png b/test/reference/record-mesh.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..df7bd03
Binary files /dev/null and b/test/reference/record-mesh.image16.rgb24.ref.png differ
diff --git a/test/reference/record-mesh.rgb24.ref.png b/test/reference/record-mesh.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4921ba3
Binary files /dev/null and b/test/reference/record-mesh.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.argb32.ref.png b/test/reference/record-paint-alpha-clip-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5054672
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.base.argb32.ref.png b/test/reference/record-paint-alpha-clip-mask.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..95746ff
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.base.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.base.rgb24.ref.png b/test/reference/record-paint-alpha-clip-mask.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..95746ff
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.base.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.base.xfail.png b/test/reference/record-paint-alpha-clip-mask.base.xfail.png
new file mode 100644 (file)
index 0000000..f7bb8ff
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.base.xfail.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.egl.argb32.ref.png b/test/reference/record-paint-alpha-clip-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a117e53
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.egl.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.image16.rgb24.ref.png b/test/reference/record-paint-alpha-clip-mask.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f069c13
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.image16.rgb24.ref.png differ
index 3c7089c..3bc8cd5 100644 (file)
Binary files a/test/reference/record-paint-alpha-clip-mask.ref.png and b/test/reference/record-paint-alpha-clip-mask.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.rgb24.ref.png b/test/reference/record-paint-alpha-clip-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5054672
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip-mask.xfail.png b/test/reference/record-paint-alpha-clip-mask.xfail.png
new file mode 100644 (file)
index 0000000..3bc8cd5
Binary files /dev/null and b/test/reference/record-paint-alpha-clip-mask.xfail.png differ
diff --git a/test/reference/record-paint-alpha-clip.argb32.ref.png b/test/reference/record-paint-alpha-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..4bad4e8
Binary files /dev/null and b/test/reference/record-paint-alpha-clip.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip.base.argb32.ref.png b/test/reference/record-paint-alpha-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..c1da67e
Binary files /dev/null and b/test/reference/record-paint-alpha-clip.base.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip.base.rgb24.ref.png b/test/reference/record-paint-alpha-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c1da67e
Binary files /dev/null and b/test/reference/record-paint-alpha-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip.egl.argb32.ref.png b/test/reference/record-paint-alpha-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8908c08
Binary files /dev/null and b/test/reference/record-paint-alpha-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip.image16.rgb24.ref.png b/test/reference/record-paint-alpha-clip.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6eb92c3
Binary files /dev/null and b/test/reference/record-paint-alpha-clip.image16.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-clip.rgb24.ref.png b/test/reference/record-paint-alpha-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4bad4e8
Binary files /dev/null and b/test/reference/record-paint-alpha-clip.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-solid-clip.argb32.ref.png b/test/reference/record-paint-alpha-solid-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..59d226d
Binary files /dev/null and b/test/reference/record-paint-alpha-solid-clip.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-solid-clip.base.argb32.ref.png b/test/reference/record-paint-alpha-solid-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..59d226d
Binary files /dev/null and b/test/reference/record-paint-alpha-solid-clip.base.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-solid-clip.base.rgb24.ref.png b/test/reference/record-paint-alpha-solid-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..59d226d
Binary files /dev/null and b/test/reference/record-paint-alpha-solid-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-solid-clip.egl.argb32.ref.png b/test/reference/record-paint-alpha-solid-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b6bd8e1
Binary files /dev/null and b/test/reference/record-paint-alpha-solid-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha-solid-clip.image16.rgb24.ref.png b/test/reference/record-paint-alpha-solid-clip.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..111293d
Binary files /dev/null and b/test/reference/record-paint-alpha-solid-clip.image16.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha-solid-clip.rgb24.ref.png b/test/reference/record-paint-alpha-solid-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..59d226d
Binary files /dev/null and b/test/reference/record-paint-alpha-solid-clip.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha.argb32.ref.png b/test/reference/record-paint-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/record-paint-alpha.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha.base.argb32.ref.png b/test/reference/record-paint-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/record-paint-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha.base.rgb24.ref.png b/test/reference/record-paint-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/record-paint-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha.egl.argb32.ref.png b/test/reference/record-paint-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f1d30de
Binary files /dev/null and b/test/reference/record-paint-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record-paint-alpha.image16.rgb24.ref.png b/test/reference/record-paint-alpha.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..12bd89d
Binary files /dev/null and b/test/reference/record-paint-alpha.image16.rgb24.ref.png differ
diff --git a/test/reference/record-paint-alpha.rgb24.ref.png b/test/reference/record-paint-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..65d9c17
Binary files /dev/null and b/test/reference/record-paint-alpha.rgb24.ref.png differ
diff --git a/test/reference/record-paint.argb32.ref.png b/test/reference/record-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record-paint.argb32.ref.png differ
diff --git a/test/reference/record-paint.base.argb32.ref.png b/test/reference/record-paint.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record-paint.base.argb32.ref.png differ
diff --git a/test/reference/record-paint.base.rgb24.ref.png b/test/reference/record-paint.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record-paint.base.rgb24.ref.png differ
diff --git a/test/reference/record-paint.egl.argb32.ref.png b/test/reference/record-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record-paint.egl.argb32.ref.png differ
diff --git a/test/reference/record-paint.image16.rgb24.ref.png b/test/reference/record-paint.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record-paint.image16.rgb24.ref.png differ
diff --git a/test/reference/record-paint.rgb24.ref.png b/test/reference/record-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record-paint.rgb24.ref.png differ
diff --git a/test/reference/record-select-font-face.argb32.ref.png b/test/reference/record-select-font-face.argb32.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/record-select-font-face.argb32.ref.png differ
diff --git a/test/reference/record-select-font-face.base.argb32.ref.png b/test/reference/record-select-font-face.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/record-select-font-face.base.argb32.ref.png differ
diff --git a/test/reference/record-select-font-face.base.rgb24.ref.png b/test/reference/record-select-font-face.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/record-select-font-face.base.rgb24.ref.png differ
diff --git a/test/reference/record-select-font-face.image16.rgb24.ref.png b/test/reference/record-select-font-face.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..88388e5
Binary files /dev/null and b/test/reference/record-select-font-face.image16.rgb24.ref.png differ
index b3d2322..be89d71 100644 (file)
Binary files a/test/reference/record-select-font-face.ref.png and b/test/reference/record-select-font-face.ref.png differ
diff --git a/test/reference/record-select-font-face.rgb24.ref.png b/test/reference/record-select-font-face.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/record-select-font-face.rgb24.ref.png differ
diff --git a/test/reference/record-self-intersecting.argb32.ref.png b/test/reference/record-self-intersecting.argb32.ref.png
new file mode 100644 (file)
index 0000000..d554d83
Binary files /dev/null and b/test/reference/record-self-intersecting.argb32.ref.png differ
diff --git a/test/reference/record-self-intersecting.base.argb32.ref.png b/test/reference/record-self-intersecting.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..f0068e6
Binary files /dev/null and b/test/reference/record-self-intersecting.base.argb32.ref.png differ
diff --git a/test/reference/record-self-intersecting.base.rgb24.ref.png b/test/reference/record-self-intersecting.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f0068e6
Binary files /dev/null and b/test/reference/record-self-intersecting.base.rgb24.ref.png differ
diff --git a/test/reference/record-self-intersecting.egl.argb32.ref.png b/test/reference/record-self-intersecting.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a87bb55
Binary files /dev/null and b/test/reference/record-self-intersecting.egl.argb32.ref.png differ
diff --git a/test/reference/record-self-intersecting.image16.rgb24.ref.png b/test/reference/record-self-intersecting.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..cab3507
Binary files /dev/null and b/test/reference/record-self-intersecting.image16.rgb24.ref.png differ
diff --git a/test/reference/record-self-intersecting.rgb24.ref.png b/test/reference/record-self-intersecting.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d554d83
Binary files /dev/null and b/test/reference/record-self-intersecting.rgb24.ref.png differ
diff --git a/test/reference/record-text-transform.argb32.ref.png b/test/reference/record-text-transform.argb32.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/record-text-transform.argb32.ref.png differ
diff --git a/test/reference/record-text-transform.base.argb32.ref.png b/test/reference/record-text-transform.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/record-text-transform.base.argb32.ref.png differ
diff --git a/test/reference/record-text-transform.base.rgb24.ref.png b/test/reference/record-text-transform.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/record-text-transform.base.rgb24.ref.png differ
diff --git a/test/reference/record-text-transform.image16.rgb24.ref.png b/test/reference/record-text-transform.image16.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4603899
Binary files /dev/null and b/test/reference/record-text-transform.image16.rgb24.ref.png differ
index 6f36b9d..8e74785 100644 (file)
Binary files a/test/reference/record-text-transform.ref.png and b/test/reference/record-text-transform.ref.png differ
diff --git a/test/reference/record-text-transform.rgb24.ref.png b/test/reference/record-text-transform.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/record-text-transform.rgb24.ref.png differ
diff --git a/test/reference/record1414x-fill-alpha.argb32.ref.png b/test/reference/record1414x-fill-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..545c0da
Binary files /dev/null and b/test/reference/record1414x-fill-alpha.argb32.ref.png differ
diff --git a/test/reference/record1414x-fill-alpha.base.argb32.ref.png b/test/reference/record1414x-fill-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..415acef
Binary files /dev/null and b/test/reference/record1414x-fill-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-fill-alpha.base.rgb24.ref.png b/test/reference/record1414x-fill-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..415acef
Binary files /dev/null and b/test/reference/record1414x-fill-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-fill-alpha.base.xfail.png b/test/reference/record1414x-fill-alpha.base.xfail.png
new file mode 100644 (file)
index 0000000..6967343
Binary files /dev/null and b/test/reference/record1414x-fill-alpha.base.xfail.png differ
diff --git a/test/reference/record1414x-fill-alpha.egl.argb32.ref.png b/test/reference/record1414x-fill-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5474fda
Binary files /dev/null and b/test/reference/record1414x-fill-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-fill-alpha.rgb24.ref.png b/test/reference/record1414x-fill-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..545c0da
Binary files /dev/null and b/test/reference/record1414x-fill-alpha.rgb24.ref.png differ
diff --git a/test/reference/record1414x-fill-alpha.xfail.png b/test/reference/record1414x-fill-alpha.xfail.png
new file mode 100644 (file)
index 0000000..9393186
Binary files /dev/null and b/test/reference/record1414x-fill-alpha.xfail.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip-mask.argb32.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..13e8b9e
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip-mask.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip-mask.base.argb32.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..1a2d967
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip-mask.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip-mask.base.rgb24.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1a2d967
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip-mask.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip-mask.egl.argb32.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..81c7709
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip-mask.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip-mask.rgb24.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..13e8b9e
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip-mask.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip.argb32.ref.png b/test/reference/record1414x-paint-alpha-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..6c11f1d
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip.base.argb32.ref.png b/test/reference/record1414x-paint-alpha-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..a983613
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip.base.rgb24.ref.png b/test/reference/record1414x-paint-alpha-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a983613
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip.egl.argb32.ref.png b/test/reference/record1414x-paint-alpha-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8022ce1
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-clip.rgb24.ref.png b/test/reference/record1414x-paint-alpha-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6c11f1d
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-clip.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-solid-clip.argb32.ref.png b/test/reference/record1414x-paint-alpha-solid-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..7a8e594
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-solid-clip.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-solid-clip.base.argb32.ref.png b/test/reference/record1414x-paint-alpha-solid-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..7a8e594
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-solid-clip.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-solid-clip.base.rgb24.ref.png b/test/reference/record1414x-paint-alpha-solid-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7a8e594
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-solid-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-solid-clip.egl.argb32.ref.png b/test/reference/record1414x-paint-alpha-solid-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8c85894
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-solid-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha-solid-clip.rgb24.ref.png b/test/reference/record1414x-paint-alpha-solid-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7a8e594
Binary files /dev/null and b/test/reference/record1414x-paint-alpha-solid-clip.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha.argb32.ref.png b/test/reference/record1414x-paint-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..eee74ce
Binary files /dev/null and b/test/reference/record1414x-paint-alpha.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha.base.argb32.ref.png b/test/reference/record1414x-paint-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..eee74ce
Binary files /dev/null and b/test/reference/record1414x-paint-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha.base.rgb24.ref.png b/test/reference/record1414x-paint-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..eee74ce
Binary files /dev/null and b/test/reference/record1414x-paint-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha.egl.argb32.ref.png b/test/reference/record1414x-paint-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3da80b7
Binary files /dev/null and b/test/reference/record1414x-paint-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint-alpha.rgb24.ref.png b/test/reference/record1414x-paint-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..eee74ce
Binary files /dev/null and b/test/reference/record1414x-paint-alpha.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint.argb32.ref.png b/test/reference/record1414x-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..e0a1341
Binary files /dev/null and b/test/reference/record1414x-paint.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint.base.argb32.ref.png b/test/reference/record1414x-paint.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..e0a1341
Binary files /dev/null and b/test/reference/record1414x-paint.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint.base.rgb24.ref.png b/test/reference/record1414x-paint.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e0a1341
Binary files /dev/null and b/test/reference/record1414x-paint.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-paint.egl.argb32.ref.png b/test/reference/record1414x-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e0a1341
Binary files /dev/null and b/test/reference/record1414x-paint.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-paint.rgb24.ref.png b/test/reference/record1414x-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e0a1341
Binary files /dev/null and b/test/reference/record1414x-paint.rgb24.ref.png differ
diff --git a/test/reference/record1414x-select-font-face.argb32.ref.png b/test/reference/record1414x-select-font-face.argb32.ref.png
new file mode 100644 (file)
index 0000000..6c52067
Binary files /dev/null and b/test/reference/record1414x-select-font-face.argb32.ref.png differ
diff --git a/test/reference/record1414x-select-font-face.base.argb32.ref.png b/test/reference/record1414x-select-font-face.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..6c52067
Binary files /dev/null and b/test/reference/record1414x-select-font-face.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-select-font-face.base.rgb24.ref.png b/test/reference/record1414x-select-font-face.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6c52067
Binary files /dev/null and b/test/reference/record1414x-select-font-face.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-select-font-face.egl.argb32.ref.png b/test/reference/record1414x-select-font-face.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e23279c
Binary files /dev/null and b/test/reference/record1414x-select-font-face.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-select-font-face.rgb24.ref.png b/test/reference/record1414x-select-font-face.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6c52067
Binary files /dev/null and b/test/reference/record1414x-select-font-face.rgb24.ref.png differ
diff --git a/test/reference/record1414x-self-intersecting.argb32.ref.png b/test/reference/record1414x-self-intersecting.argb32.ref.png
new file mode 100644 (file)
index 0000000..4469acd
Binary files /dev/null and b/test/reference/record1414x-self-intersecting.argb32.ref.png differ
diff --git a/test/reference/record1414x-self-intersecting.base.argb32.ref.png b/test/reference/record1414x-self-intersecting.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..53af8ff
Binary files /dev/null and b/test/reference/record1414x-self-intersecting.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-self-intersecting.base.rgb24.ref.png b/test/reference/record1414x-self-intersecting.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..53af8ff
Binary files /dev/null and b/test/reference/record1414x-self-intersecting.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-self-intersecting.egl.argb32.ref.png b/test/reference/record1414x-self-intersecting.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..991685f
Binary files /dev/null and b/test/reference/record1414x-self-intersecting.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-self-intersecting.rgb24.ref.png b/test/reference/record1414x-self-intersecting.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4469acd
Binary files /dev/null and b/test/reference/record1414x-self-intersecting.rgb24.ref.png differ
diff --git a/test/reference/record1414x-text-transform.base.argb32.ref.png b/test/reference/record1414x-text-transform.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..5727f35
Binary files /dev/null and b/test/reference/record1414x-text-transform.base.argb32.ref.png differ
diff --git a/test/reference/record1414x-text-transform.base.rgb24.ref.png b/test/reference/record1414x-text-transform.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5727f35
Binary files /dev/null and b/test/reference/record1414x-text-transform.base.rgb24.ref.png differ
diff --git a/test/reference/record1414x-text-transform.egl.argb32.ref.png b/test/reference/record1414x-text-transform.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..128dd7e
Binary files /dev/null and b/test/reference/record1414x-text-transform.egl.argb32.ref.png differ
diff --git a/test/reference/record1414x-text-transform.ref.png b/test/reference/record1414x-text-transform.ref.png
new file mode 100644 (file)
index 0000000..5727f35
Binary files /dev/null and b/test/reference/record1414x-text-transform.ref.png differ
diff --git a/test/reference/record2x-fill-alpha.argb32.ref.png b/test/reference/record2x-fill-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..ce4dab1
Binary files /dev/null and b/test/reference/record2x-fill-alpha.argb32.ref.png differ
diff --git a/test/reference/record2x-fill-alpha.base.argb32.ref.png b/test/reference/record2x-fill-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..b75f358
Binary files /dev/null and b/test/reference/record2x-fill-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record2x-fill-alpha.base.rgb24.ref.png b/test/reference/record2x-fill-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b75f358
Binary files /dev/null and b/test/reference/record2x-fill-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-fill-alpha.base.xfail.png b/test/reference/record2x-fill-alpha.base.xfail.png
new file mode 100644 (file)
index 0000000..b96ff8d
Binary files /dev/null and b/test/reference/record2x-fill-alpha.base.xfail.png differ
diff --git a/test/reference/record2x-fill-alpha.egl.argb32.ref.png b/test/reference/record2x-fill-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d5b7ba3
Binary files /dev/null and b/test/reference/record2x-fill-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-fill-alpha.rgb24.ref.png b/test/reference/record2x-fill-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ce4dab1
Binary files /dev/null and b/test/reference/record2x-fill-alpha.rgb24.ref.png differ
diff --git a/test/reference/record2x-fill-alpha.xfail.png b/test/reference/record2x-fill-alpha.xfail.png
new file mode 100644 (file)
index 0000000..3b70c01
Binary files /dev/null and b/test/reference/record2x-fill-alpha.xfail.png differ
diff --git a/test/reference/record2x-paint-alpha-clip-mask.argb32.ref.png b/test/reference/record2x-paint-alpha-clip-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6dc5cb5
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip-mask.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip-mask.base.argb32.ref.png b/test/reference/record2x-paint-alpha-clip-mask.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..6e70c77
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip-mask.base.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip-mask.base.rgb24.ref.png b/test/reference/record2x-paint-alpha-clip-mask.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6e70c77
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip-mask.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip-mask.egl.argb32.ref.png b/test/reference/record2x-paint-alpha-clip-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2354cdb
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip-mask.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip-mask.rgb24.ref.png b/test/reference/record2x-paint-alpha-clip-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6dc5cb5
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip-mask.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip.argb32.ref.png b/test/reference/record2x-paint-alpha-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..b3829d5
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip.base.argb32.ref.png b/test/reference/record2x-paint-alpha-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..b3829d5
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip.base.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip.base.rgb24.ref.png b/test/reference/record2x-paint-alpha-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b3829d5
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip.egl.argb32.ref.png b/test/reference/record2x-paint-alpha-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..93c071f
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-clip.rgb24.ref.png b/test/reference/record2x-paint-alpha-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b3829d5
Binary files /dev/null and b/test/reference/record2x-paint-alpha-clip.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-solid-clip.argb32.ref.png b/test/reference/record2x-paint-alpha-solid-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..06e350f
Binary files /dev/null and b/test/reference/record2x-paint-alpha-solid-clip.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-solid-clip.base.argb32.ref.png b/test/reference/record2x-paint-alpha-solid-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..06e350f
Binary files /dev/null and b/test/reference/record2x-paint-alpha-solid-clip.base.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-solid-clip.base.rgb24.ref.png b/test/reference/record2x-paint-alpha-solid-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06e350f
Binary files /dev/null and b/test/reference/record2x-paint-alpha-solid-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-solid-clip.egl.argb32.ref.png b/test/reference/record2x-paint-alpha-solid-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..24458a8
Binary files /dev/null and b/test/reference/record2x-paint-alpha-solid-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha-solid-clip.rgb24.ref.png b/test/reference/record2x-paint-alpha-solid-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06e350f
Binary files /dev/null and b/test/reference/record2x-paint-alpha-solid-clip.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint-alpha.argb32.ref.png b/test/reference/record2x-paint-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a02b67
Binary files /dev/null and b/test/reference/record2x-paint-alpha.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha.base.argb32.ref.png b/test/reference/record2x-paint-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a02b67
Binary files /dev/null and b/test/reference/record2x-paint-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha.base.rgb24.ref.png b/test/reference/record2x-paint-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3a02b67
Binary files /dev/null and b/test/reference/record2x-paint-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint-alpha.egl.argb32.ref.png b/test/reference/record2x-paint-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bc9cf38
Binary files /dev/null and b/test/reference/record2x-paint-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-paint-alpha.rgb24.ref.png b/test/reference/record2x-paint-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3a02b67
Binary files /dev/null and b/test/reference/record2x-paint-alpha.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint.argb32.ref.png b/test/reference/record2x-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..792a1d0
Binary files /dev/null and b/test/reference/record2x-paint.argb32.ref.png differ
diff --git a/test/reference/record2x-paint.base.argb32.ref.png b/test/reference/record2x-paint.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..792a1d0
Binary files /dev/null and b/test/reference/record2x-paint.base.argb32.ref.png differ
diff --git a/test/reference/record2x-paint.base.rgb24.ref.png b/test/reference/record2x-paint.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..792a1d0
Binary files /dev/null and b/test/reference/record2x-paint.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-paint.egl.argb32.ref.png b/test/reference/record2x-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..792a1d0
Binary files /dev/null and b/test/reference/record2x-paint.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-paint.rgb24.ref.png b/test/reference/record2x-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..792a1d0
Binary files /dev/null and b/test/reference/record2x-paint.rgb24.ref.png differ
diff --git a/test/reference/record2x-select-font-face.argb32.ref.png b/test/reference/record2x-select-font-face.argb32.ref.png
new file mode 100644 (file)
index 0000000..7a99795
Binary files /dev/null and b/test/reference/record2x-select-font-face.argb32.ref.png differ
diff --git a/test/reference/record2x-select-font-face.base.argb32.ref.png b/test/reference/record2x-select-font-face.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..7a99795
Binary files /dev/null and b/test/reference/record2x-select-font-face.base.argb32.ref.png differ
diff --git a/test/reference/record2x-select-font-face.base.rgb24.ref.png b/test/reference/record2x-select-font-face.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7a99795
Binary files /dev/null and b/test/reference/record2x-select-font-face.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-select-font-face.egl.argb32.ref.png b/test/reference/record2x-select-font-face.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c38955f
Binary files /dev/null and b/test/reference/record2x-select-font-face.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-select-font-face.rgb24.ref.png b/test/reference/record2x-select-font-face.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7a99795
Binary files /dev/null and b/test/reference/record2x-select-font-face.rgb24.ref.png differ
diff --git a/test/reference/record2x-self-intersecting.argb32.ref.png b/test/reference/record2x-self-intersecting.argb32.ref.png
new file mode 100644 (file)
index 0000000..2836dae
Binary files /dev/null and b/test/reference/record2x-self-intersecting.argb32.ref.png differ
diff --git a/test/reference/record2x-self-intersecting.base.argb32.ref.png b/test/reference/record2x-self-intersecting.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..2836dae
Binary files /dev/null and b/test/reference/record2x-self-intersecting.base.argb32.ref.png differ
diff --git a/test/reference/record2x-self-intersecting.base.rgb24.ref.png b/test/reference/record2x-self-intersecting.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2836dae
Binary files /dev/null and b/test/reference/record2x-self-intersecting.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-self-intersecting.egl.argb32.ref.png b/test/reference/record2x-self-intersecting.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..7bf451a
Binary files /dev/null and b/test/reference/record2x-self-intersecting.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-self-intersecting.rgb24.ref.png b/test/reference/record2x-self-intersecting.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2836dae
Binary files /dev/null and b/test/reference/record2x-self-intersecting.rgb24.ref.png differ
diff --git a/test/reference/record2x-text-transform.base.argb32.ref.png b/test/reference/record2x-text-transform.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..6c21785
Binary files /dev/null and b/test/reference/record2x-text-transform.base.argb32.ref.png differ
diff --git a/test/reference/record2x-text-transform.base.rgb24.ref.png b/test/reference/record2x-text-transform.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6c21785
Binary files /dev/null and b/test/reference/record2x-text-transform.base.rgb24.ref.png differ
diff --git a/test/reference/record2x-text-transform.egl.argb32.ref.png b/test/reference/record2x-text-transform.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..452ede7
Binary files /dev/null and b/test/reference/record2x-text-transform.egl.argb32.ref.png differ
diff --git a/test/reference/record2x-text-transform.ref.png b/test/reference/record2x-text-transform.ref.png
new file mode 100644 (file)
index 0000000..6c21785
Binary files /dev/null and b/test/reference/record2x-text-transform.ref.png differ
diff --git a/test/reference/record90-fill-alpha.argb32.ref.png b/test/reference/record90-fill-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..afbc68e
Binary files /dev/null and b/test/reference/record90-fill-alpha.argb32.ref.png differ
diff --git a/test/reference/record90-fill-alpha.base.argb32.ref.png b/test/reference/record90-fill-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..8eb4453
Binary files /dev/null and b/test/reference/record90-fill-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record90-fill-alpha.base.rgb24.ref.png b/test/reference/record90-fill-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8eb4453
Binary files /dev/null and b/test/reference/record90-fill-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record90-fill-alpha.egl.argb32.ref.png b/test/reference/record90-fill-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3e8d4ab
Binary files /dev/null and b/test/reference/record90-fill-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record90-fill-alpha.rgb24.ref.png b/test/reference/record90-fill-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..afbc68e
Binary files /dev/null and b/test/reference/record90-fill-alpha.rgb24.ref.png differ
diff --git a/test/reference/record90-fill-alpha.xfail.png b/test/reference/record90-fill-alpha.xfail.png
new file mode 100644 (file)
index 0000000..ad1e65c
Binary files /dev/null and b/test/reference/record90-fill-alpha.xfail.png differ
diff --git a/test/reference/record90-paint-alpha-clip-mask.argb32.ref.png b/test/reference/record90-paint-alpha-clip-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..aa94252
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip-mask.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip-mask.base.argb32.ref.png b/test/reference/record90-paint-alpha-clip-mask.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..e14ce9a
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip-mask.base.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip-mask.base.rgb24.ref.png b/test/reference/record90-paint-alpha-clip-mask.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e14ce9a
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip-mask.base.rgb24.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip-mask.egl.argb32.ref.png b/test/reference/record90-paint-alpha-clip-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..27d07b0
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip-mask.egl.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip-mask.rgb24.ref.png b/test/reference/record90-paint-alpha-clip-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..aa94252
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip-mask.rgb24.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip-mask.xfail.png b/test/reference/record90-paint-alpha-clip-mask.xfail.png
new file mode 100644 (file)
index 0000000..bad037f
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip-mask.xfail.png differ
diff --git a/test/reference/record90-paint-alpha-clip.argb32.ref.png b/test/reference/record90-paint-alpha-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..15d1a31
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip.base.argb32.ref.png b/test/reference/record90-paint-alpha-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..12a1683
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip.base.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip.base.rgb24.ref.png b/test/reference/record90-paint-alpha-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..12a1683
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip.egl.argb32.ref.png b/test/reference/record90-paint-alpha-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8326b4f
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip.rgb24.ref.png b/test/reference/record90-paint-alpha-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..15d1a31
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip.rgb24.ref.png differ
diff --git a/test/reference/record90-paint-alpha-clip.xfail.png b/test/reference/record90-paint-alpha-clip.xfail.png
new file mode 100644 (file)
index 0000000..d687e3b
Binary files /dev/null and b/test/reference/record90-paint-alpha-clip.xfail.png differ
diff --git a/test/reference/record90-paint-alpha-solid-clip.argb32.ref.png b/test/reference/record90-paint-alpha-solid-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..95e7da6
Binary files /dev/null and b/test/reference/record90-paint-alpha-solid-clip.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-solid-clip.base.argb32.ref.png b/test/reference/record90-paint-alpha-solid-clip.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..95e7da6
Binary files /dev/null and b/test/reference/record90-paint-alpha-solid-clip.base.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-solid-clip.base.rgb24.ref.png b/test/reference/record90-paint-alpha-solid-clip.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..95e7da6
Binary files /dev/null and b/test/reference/record90-paint-alpha-solid-clip.base.rgb24.ref.png differ
diff --git a/test/reference/record90-paint-alpha-solid-clip.egl.argb32.ref.png b/test/reference/record90-paint-alpha-solid-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c450b8b
Binary files /dev/null and b/test/reference/record90-paint-alpha-solid-clip.egl.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha-solid-clip.rgb24.ref.png b/test/reference/record90-paint-alpha-solid-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..95e7da6
Binary files /dev/null and b/test/reference/record90-paint-alpha-solid-clip.rgb24.ref.png differ
diff --git a/test/reference/record90-paint-alpha.argb32.ref.png b/test/reference/record90-paint-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..57aa95d
Binary files /dev/null and b/test/reference/record90-paint-alpha.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha.base.argb32.ref.png b/test/reference/record90-paint-alpha.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..57aa95d
Binary files /dev/null and b/test/reference/record90-paint-alpha.base.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha.base.rgb24.ref.png b/test/reference/record90-paint-alpha.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..57aa95d
Binary files /dev/null and b/test/reference/record90-paint-alpha.base.rgb24.ref.png differ
diff --git a/test/reference/record90-paint-alpha.egl.argb32.ref.png b/test/reference/record90-paint-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..57aa95d
Binary files /dev/null and b/test/reference/record90-paint-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/record90-paint-alpha.rgb24.ref.png b/test/reference/record90-paint-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..57aa95d
Binary files /dev/null and b/test/reference/record90-paint-alpha.rgb24.ref.png differ
diff --git a/test/reference/record90-paint.argb32.ref.png b/test/reference/record90-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record90-paint.argb32.ref.png differ
diff --git a/test/reference/record90-paint.base.argb32.ref.png b/test/reference/record90-paint.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record90-paint.base.argb32.ref.png differ
diff --git a/test/reference/record90-paint.base.rgb24.ref.png b/test/reference/record90-paint.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record90-paint.base.rgb24.ref.png differ
diff --git a/test/reference/record90-paint.egl.argb32.ref.png b/test/reference/record90-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record90-paint.egl.argb32.ref.png differ
diff --git a/test/reference/record90-paint.rgb24.ref.png b/test/reference/record90-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22cc7a1
Binary files /dev/null and b/test/reference/record90-paint.rgb24.ref.png differ
diff --git a/test/reference/record90-select-font-face.argb32.ref.png b/test/reference/record90-select-font-face.argb32.ref.png
new file mode 100644 (file)
index 0000000..189a315
Binary files /dev/null and b/test/reference/record90-select-font-face.argb32.ref.png differ
diff --git a/test/reference/record90-select-font-face.base.argb32.ref.png b/test/reference/record90-select-font-face.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..189a315
Binary files /dev/null and b/test/reference/record90-select-font-face.base.argb32.ref.png differ
diff --git a/test/reference/record90-select-font-face.base.rgb24.ref.png b/test/reference/record90-select-font-face.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..189a315
Binary files /dev/null and b/test/reference/record90-select-font-face.base.rgb24.ref.png differ
diff --git a/test/reference/record90-select-font-face.egl.argb32.ref.png b/test/reference/record90-select-font-face.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2f9eb8f
Binary files /dev/null and b/test/reference/record90-select-font-face.egl.argb32.ref.png differ
diff --git a/test/reference/record90-select-font-face.rgb24.ref.png b/test/reference/record90-select-font-face.rgb24.ref.png
new file mode 100644 (file)
index 0000000..189a315
Binary files /dev/null and b/test/reference/record90-select-font-face.rgb24.ref.png differ
diff --git a/test/reference/record90-self-intersecting.argb32.ref.png b/test/reference/record90-self-intersecting.argb32.ref.png
new file mode 100644 (file)
index 0000000..f8687ff
Binary files /dev/null and b/test/reference/record90-self-intersecting.argb32.ref.png differ
diff --git a/test/reference/record90-self-intersecting.base.argb32.ref.png b/test/reference/record90-self-intersecting.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..ea11582
Binary files /dev/null and b/test/reference/record90-self-intersecting.base.argb32.ref.png differ
diff --git a/test/reference/record90-self-intersecting.base.rgb24.ref.png b/test/reference/record90-self-intersecting.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ea11582
Binary files /dev/null and b/test/reference/record90-self-intersecting.base.rgb24.ref.png differ
diff --git a/test/reference/record90-self-intersecting.egl.argb32.ref.png b/test/reference/record90-self-intersecting.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0b84a9b
Binary files /dev/null and b/test/reference/record90-self-intersecting.egl.argb32.ref.png differ
diff --git a/test/reference/record90-self-intersecting.rgb24.ref.png b/test/reference/record90-self-intersecting.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f8687ff
Binary files /dev/null and b/test/reference/record90-self-intersecting.rgb24.ref.png differ
diff --git a/test/reference/record90-text-transform.argb32.ref.png b/test/reference/record90-text-transform.argb32.ref.png
new file mode 100644 (file)
index 0000000..22f6c1f
Binary files /dev/null and b/test/reference/record90-text-transform.argb32.ref.png differ
diff --git a/test/reference/record90-text-transform.base.argb32.ref.png b/test/reference/record90-text-transform.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..22f6c1f
Binary files /dev/null and b/test/reference/record90-text-transform.base.argb32.ref.png differ
diff --git a/test/reference/record90-text-transform.base.rgb24.ref.png b/test/reference/record90-text-transform.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22f6c1f
Binary files /dev/null and b/test/reference/record90-text-transform.base.rgb24.ref.png differ
diff --git a/test/reference/record90-text-transform.egl.argb32.ref.png b/test/reference/record90-text-transform.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..aaf2281
Binary files /dev/null and b/test/reference/record90-text-transform.egl.argb32.ref.png differ
diff --git a/test/reference/record90-text-transform.rgb24.ref.png b/test/reference/record90-text-transform.rgb24.ref.png
new file mode 100644 (file)
index 0000000..22f6c1f
Binary files /dev/null and b/test/reference/record90-text-transform.rgb24.ref.png differ
diff --git a/test/reference/recording-surface-extend-none.egl.argb32.ref.png b/test/reference/recording-surface-extend-none.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4bce518
Binary files /dev/null and b/test/reference/recording-surface-extend-none.egl.argb32.ref.png differ
diff --git a/test/reference/recording-surface-extend-pad.egl.argb32.ref.png b/test/reference/recording-surface-extend-pad.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..262f50c
Binary files /dev/null and b/test/reference/recording-surface-extend-pad.egl.argb32.ref.png differ
diff --git a/test/reference/recording-surface-extend-reflect.egl.argb32.ref.png b/test/reference/recording-surface-extend-reflect.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d6a1d0c
Binary files /dev/null and b/test/reference/recording-surface-extend-reflect.egl.argb32.ref.png differ
diff --git a/test/reference/recording-surface-extend-repeat.egl.argb32.ref.png b/test/reference/recording-surface-extend-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f3e47dc
Binary files /dev/null and b/test/reference/recording-surface-extend-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/recording-surface-over.egl.argb32.ref.png b/test/reference/recording-surface-over.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4bce518
Binary files /dev/null and b/test/reference/recording-surface-over.egl.argb32.ref.png differ
diff --git a/test/reference/recording-surface-source.egl.argb32.ref.png b/test/reference/recording-surface-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..dad1740
Binary files /dev/null and b/test/reference/recording-surface-source.egl.argb32.ref.png differ
diff --git a/test/reference/rectangle-rounding-error.argb32.ref.png b/test/reference/rectangle-rounding-error.argb32.ref.png
new file mode 100644 (file)
index 0000000..6cc1b21
Binary files /dev/null and b/test/reference/rectangle-rounding-error.argb32.ref.png differ
diff --git a/test/reference/rectangle-rounding-error.egl.argb32.ref.png b/test/reference/rectangle-rounding-error.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..6cc1b21
Binary files /dev/null and b/test/reference/rectangle-rounding-error.egl.argb32.ref.png differ
diff --git a/test/reference/rectangle-rounding-error.mask.argb32.ref.png b/test/reference/rectangle-rounding-error.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6cc1b21
Binary files /dev/null and b/test/reference/rectangle-rounding-error.mask.argb32.ref.png differ
diff --git a/test/reference/rectangle-rounding-error.mask.rgb24.ref.png b/test/reference/rectangle-rounding-error.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6cc1b21
Binary files /dev/null and b/test/reference/rectangle-rounding-error.mask.rgb24.ref.png differ
diff --git a/test/reference/rectangle-rounding-error.rgb24.ref.png b/test/reference/rectangle-rounding-error.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6cc1b21
Binary files /dev/null and b/test/reference/rectangle-rounding-error.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-dash-scale-unaligned.ref.png b/test/reference/rectilinear-dash-scale-unaligned.ref.png
new file mode 100644 (file)
index 0000000..19dbe7f
Binary files /dev/null and b/test/reference/rectilinear-dash-scale-unaligned.ref.png differ
diff --git a/test/reference/rectilinear-dash-scale-unaligned.traps.ref.png b/test/reference/rectilinear-dash-scale-unaligned.traps.ref.png
new file mode 100644 (file)
index 0000000..02abfaa
Binary files /dev/null and b/test/reference/rectilinear-dash-scale-unaligned.traps.ref.png differ
diff --git a/test/reference/rectilinear-dash-scale.ref.png b/test/reference/rectilinear-dash-scale.ref.png
new file mode 100644 (file)
index 0000000..1ab868c
Binary files /dev/null and b/test/reference/rectilinear-dash-scale.ref.png differ
diff --git a/test/reference/rectilinear-dash.argb32.ref.png b/test/reference/rectilinear-dash.argb32.ref.png
new file mode 100644 (file)
index 0000000..33e7851
Binary files /dev/null and b/test/reference/rectilinear-dash.argb32.ref.png differ
diff --git a/test/reference/rectilinear-dash.egl.argb32.ref.png b/test/reference/rectilinear-dash.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..33e7851
Binary files /dev/null and b/test/reference/rectilinear-dash.egl.argb32.ref.png differ
diff --git a/test/reference/rectilinear-dash.mask.argb32.ref.png b/test/reference/rectilinear-dash.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..33e7851
Binary files /dev/null and b/test/reference/rectilinear-dash.mask.argb32.ref.png differ
diff --git a/test/reference/rectilinear-dash.mask.rgb24.ref.png b/test/reference/rectilinear-dash.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..33e7851
Binary files /dev/null and b/test/reference/rectilinear-dash.mask.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-dash.rgb24.ref.png b/test/reference/rectilinear-dash.rgb24.ref.png
new file mode 100644 (file)
index 0000000..33e7851
Binary files /dev/null and b/test/reference/rectilinear-dash.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-fill.argb32.ref.png b/test/reference/rectilinear-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..dbaf383
Binary files /dev/null and b/test/reference/rectilinear-fill.argb32.ref.png differ
diff --git a/test/reference/rectilinear-fill.egl.argb32.ref.png b/test/reference/rectilinear-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..dbaf383
Binary files /dev/null and b/test/reference/rectilinear-fill.egl.argb32.ref.png differ
diff --git a/test/reference/rectilinear-fill.mask.argb32.ref.png b/test/reference/rectilinear-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..dbaf383
Binary files /dev/null and b/test/reference/rectilinear-fill.mask.argb32.ref.png differ
diff --git a/test/reference/rectilinear-fill.mask.rgb24.ref.png b/test/reference/rectilinear-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dbaf383
Binary files /dev/null and b/test/reference/rectilinear-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-fill.rgb24.ref.png b/test/reference/rectilinear-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dbaf383
Binary files /dev/null and b/test/reference/rectilinear-fill.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-grid.argb32.ref.png b/test/reference/rectilinear-grid.argb32.ref.png
new file mode 100644 (file)
index 0000000..8d47ef5
Binary files /dev/null and b/test/reference/rectilinear-grid.argb32.ref.png differ
diff --git a/test/reference/rectilinear-grid.egl.argb32.ref.png b/test/reference/rectilinear-grid.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..8d47ef5
Binary files /dev/null and b/test/reference/rectilinear-grid.egl.argb32.ref.png differ
diff --git a/test/reference/rectilinear-grid.mask.argb32.ref.png b/test/reference/rectilinear-grid.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8d47ef5
Binary files /dev/null and b/test/reference/rectilinear-grid.mask.argb32.ref.png differ
diff --git a/test/reference/rectilinear-grid.mask.rgb24.ref.png b/test/reference/rectilinear-grid.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8d47ef5
Binary files /dev/null and b/test/reference/rectilinear-grid.mask.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-grid.rgb24.ref.png b/test/reference/rectilinear-grid.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8d47ef5
Binary files /dev/null and b/test/reference/rectilinear-grid.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-miter-limit.argb32.ref.png b/test/reference/rectilinear-miter-limit.argb32.ref.png
new file mode 100644 (file)
index 0000000..d64d581
Binary files /dev/null and b/test/reference/rectilinear-miter-limit.argb32.ref.png differ
diff --git a/test/reference/rectilinear-miter-limit.egl.argb32.ref.png b/test/reference/rectilinear-miter-limit.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d64d581
Binary files /dev/null and b/test/reference/rectilinear-miter-limit.egl.argb32.ref.png differ
diff --git a/test/reference/rectilinear-miter-limit.mask.argb32.ref.png b/test/reference/rectilinear-miter-limit.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d64d581
Binary files /dev/null and b/test/reference/rectilinear-miter-limit.mask.argb32.ref.png differ
diff --git a/test/reference/rectilinear-miter-limit.mask.rgb24.ref.png b/test/reference/rectilinear-miter-limit.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d64d581
Binary files /dev/null and b/test/reference/rectilinear-miter-limit.mask.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-miter-limit.rgb24.ref.png b/test/reference/rectilinear-miter-limit.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d64d581
Binary files /dev/null and b/test/reference/rectilinear-miter-limit.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-stroke.argb32.ref.png b/test/reference/rectilinear-stroke.argb32.ref.png
new file mode 100644 (file)
index 0000000..260909b
Binary files /dev/null and b/test/reference/rectilinear-stroke.argb32.ref.png differ
diff --git a/test/reference/rectilinear-stroke.egl.argb32.ref.png b/test/reference/rectilinear-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..260909b
Binary files /dev/null and b/test/reference/rectilinear-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/rectilinear-stroke.mask.argb32.ref.png b/test/reference/rectilinear-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..260909b
Binary files /dev/null and b/test/reference/rectilinear-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/rectilinear-stroke.mask.rgb24.ref.png b/test/reference/rectilinear-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..260909b
Binary files /dev/null and b/test/reference/rectilinear-stroke.mask.rgb24.ref.png differ
diff --git a/test/reference/rectilinear-stroke.rgb24.ref.png b/test/reference/rectilinear-stroke.rgb24.ref.png
new file mode 100644 (file)
index 0000000..260909b
Binary files /dev/null and b/test/reference/rectilinear-stroke.rgb24.ref.png differ
diff --git a/test/reference/reflected-stroke.argb32.ref.png b/test/reference/reflected-stroke.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a7d6bc
Binary files /dev/null and b/test/reference/reflected-stroke.argb32.ref.png differ
diff --git a/test/reference/reflected-stroke.egl.argb32.ref.png b/test/reference/reflected-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b48bcc2
Binary files /dev/null and b/test/reference/reflected-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/reflected-stroke.mask.argb32.ref.png b/test/reference/reflected-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9a7d6bc
Binary files /dev/null and b/test/reference/reflected-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/reflected-stroke.mask.rgb24.ref.png b/test/reference/reflected-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9a7d6bc
Binary files /dev/null and b/test/reference/reflected-stroke.mask.rgb24.ref.png differ
diff --git a/test/reference/reflected-stroke.rgb24.ref.png b/test/reference/reflected-stroke.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9a7d6bc
Binary files /dev/null and b/test/reference/reflected-stroke.rgb24.ref.png differ
diff --git a/test/reference/rel-path.argb32.ref.png b/test/reference/rel-path.argb32.ref.png
new file mode 100644 (file)
index 0000000..67fe178
Binary files /dev/null and b/test/reference/rel-path.argb32.ref.png differ
diff --git a/test/reference/rel-path.egl.argb32.ref.png b/test/reference/rel-path.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b2848bf
Binary files /dev/null and b/test/reference/rel-path.egl.argb32.ref.png differ
diff --git a/test/reference/rel-path.mask.argb32.ref.png b/test/reference/rel-path.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..67fe178
Binary files /dev/null and b/test/reference/rel-path.mask.argb32.ref.png differ
diff --git a/test/reference/rel-path.mask.rgb24.ref.png b/test/reference/rel-path.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..78d8a08
Binary files /dev/null and b/test/reference/rel-path.mask.rgb24.ref.png differ
index 8254eb5..78d8a08 100644 (file)
Binary files a/test/reference/rel-path.rgb24.ref.png and b/test/reference/rel-path.rgb24.ref.png differ
diff --git a/test/reference/rgb24-ignore-alpha.argb32.ref.png b/test/reference/rgb24-ignore-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..922eddd
Binary files /dev/null and b/test/reference/rgb24-ignore-alpha.argb32.ref.png differ
diff --git a/test/reference/rgb24-ignore-alpha.egl.argb32.ref.png b/test/reference/rgb24-ignore-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..21465ce
Binary files /dev/null and b/test/reference/rgb24-ignore-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/rgb24-ignore-alpha.mask.argb32.ref.png b/test/reference/rgb24-ignore-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..922eddd
Binary files /dev/null and b/test/reference/rgb24-ignore-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/rgb24-ignore-alpha.mask.rgb24.ref.png b/test/reference/rgb24-ignore-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..922eddd
Binary files /dev/null and b/test/reference/rgb24-ignore-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/rgb24-ignore-alpha.rgb24.ref.png b/test/reference/rgb24-ignore-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..922eddd
Binary files /dev/null and b/test/reference/rgb24-ignore-alpha.rgb24.ref.png differ
diff --git a/test/reference/rotate-clip-image-surface-paint.argb32.ref.png b/test/reference/rotate-clip-image-surface-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..7f74b2b
Binary files /dev/null and b/test/reference/rotate-clip-image-surface-paint.argb32.ref.png differ
index 9d991d9..7f74b2b 100644 (file)
Binary files a/test/reference/rotate-clip-image-surface-paint.base.argb32.ref.png and b/test/reference/rotate-clip-image-surface-paint.base.argb32.ref.png differ
index 9d991d9..7f74b2b 100644 (file)
Binary files a/test/reference/rotate-clip-image-surface-paint.base.rgb24.ref.png and b/test/reference/rotate-clip-image-surface-paint.base.rgb24.ref.png differ
diff --git a/test/reference/rotate-clip-image-surface-paint.egl.argb32.ref.png b/test/reference/rotate-clip-image-surface-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..beedcc2
Binary files /dev/null and b/test/reference/rotate-clip-image-surface-paint.egl.argb32.ref.png differ
diff --git a/test/reference/rotate-clip-image-surface-paint.mask.argb32.ref.png b/test/reference/rotate-clip-image-surface-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7f74b2b
Binary files /dev/null and b/test/reference/rotate-clip-image-surface-paint.mask.argb32.ref.png differ
diff --git a/test/reference/rotate-clip-image-surface-paint.mask.rgb24.ref.png b/test/reference/rotate-clip-image-surface-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7f74b2b
Binary files /dev/null and b/test/reference/rotate-clip-image-surface-paint.mask.rgb24.ref.png differ
diff --git a/test/reference/rotate-clip-image-surface-paint.rgb24.ref.png b/test/reference/rotate-clip-image-surface-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7f74b2b
Binary files /dev/null and b/test/reference/rotate-clip-image-surface-paint.rgb24.ref.png differ
diff --git a/test/reference/rotate-clip-image-surface-paint.xlib-fallback.rgb24.ref.png b/test/reference/rotate-clip-image-surface-paint.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9d991d9
Binary files /dev/null and b/test/reference/rotate-clip-image-surface-paint.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/rotate-clip-image-surface-paint.xlib-window.rgb24.ref.png b/test/reference/rotate-clip-image-surface-paint.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9d991d9
Binary files /dev/null and b/test/reference/rotate-clip-image-surface-paint.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/rotate-image-surface-paint.argb32.ref.png b/test/reference/rotate-image-surface-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..06a4820
Binary files /dev/null and b/test/reference/rotate-image-surface-paint.argb32.ref.png differ
diff --git a/test/reference/rotate-image-surface-paint.egl.argb32.ref.png b/test/reference/rotate-image-surface-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1c42bf4
Binary files /dev/null and b/test/reference/rotate-image-surface-paint.egl.argb32.ref.png differ
diff --git a/test/reference/rotate-image-surface-paint.mask.argb32.ref.png b/test/reference/rotate-image-surface-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..06a4820
Binary files /dev/null and b/test/reference/rotate-image-surface-paint.mask.argb32.ref.png differ
diff --git a/test/reference/rotate-image-surface-paint.mask.rgb24.ref.png b/test/reference/rotate-image-surface-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06a4820
Binary files /dev/null and b/test/reference/rotate-image-surface-paint.mask.rgb24.ref.png differ
diff --git a/test/reference/rotate-image-surface-paint.rgb24.ref.png b/test/reference/rotate-image-surface-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06a4820
Binary files /dev/null and b/test/reference/rotate-image-surface-paint.rgb24.ref.png differ
diff --git a/test/reference/rotate-image-surface-paint.xlib-fallback.rgb24.ref.png b/test/reference/rotate-image-surface-paint.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06a4820
Binary files /dev/null and b/test/reference/rotate-image-surface-paint.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/rotate-image-surface-paint.xlib-window.rgb24.ref.png b/test/reference/rotate-image-surface-paint.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06a4820
Binary files /dev/null and b/test/reference/rotate-image-surface-paint.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/rotated-clip.argb32.ref.png b/test/reference/rotated-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..dd6cd5f
Binary files /dev/null and b/test/reference/rotated-clip.argb32.ref.png differ
index ca0f0af..e553a13 100644 (file)
Binary files a/test/reference/rotated-clip.base.argb32.ref.png and b/test/reference/rotated-clip.base.argb32.ref.png differ
index ca0f0af..e553a13 100644 (file)
Binary files a/test/reference/rotated-clip.base.rgb24.ref.png and b/test/reference/rotated-clip.base.rgb24.ref.png differ
diff --git a/test/reference/rotated-clip.egl.argb32.ref.png b/test/reference/rotated-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..be68773
Binary files /dev/null and b/test/reference/rotated-clip.egl.argb32.ref.png differ
diff --git a/test/reference/rotated-clip.mask.argb32.ref.png b/test/reference/rotated-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8168f9d
Binary files /dev/null and b/test/reference/rotated-clip.mask.argb32.ref.png differ
diff --git a/test/reference/rotated-clip.mask.rgb24.ref.png b/test/reference/rotated-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8168f9d
Binary files /dev/null and b/test/reference/rotated-clip.mask.rgb24.ref.png differ
diff --git a/test/reference/rotated-clip.rgb24.ref.png b/test/reference/rotated-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dd6cd5f
Binary files /dev/null and b/test/reference/rotated-clip.rgb24.ref.png differ
diff --git a/test/reference/rounded-rectangle-fill.argb32.ref.png b/test/reference/rounded-rectangle-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..3232c07
Binary files /dev/null and b/test/reference/rounded-rectangle-fill.argb32.ref.png differ
diff --git a/test/reference/rounded-rectangle-fill.egl.argb32.ref.png b/test/reference/rounded-rectangle-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..9426263
Binary files /dev/null and b/test/reference/rounded-rectangle-fill.egl.argb32.ref.png differ
diff --git a/test/reference/rounded-rectangle-fill.mask.argb32.ref.png b/test/reference/rounded-rectangle-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3232c07
Binary files /dev/null and b/test/reference/rounded-rectangle-fill.mask.argb32.ref.png differ
diff --git a/test/reference/rounded-rectangle-fill.mask.rgb24.ref.png b/test/reference/rounded-rectangle-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3232c07
Binary files /dev/null and b/test/reference/rounded-rectangle-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/rounded-rectangle-fill.rgb24.ref.png b/test/reference/rounded-rectangle-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3232c07
Binary files /dev/null and b/test/reference/rounded-rectangle-fill.rgb24.ref.png differ
diff --git a/test/reference/rounded-rectangle-stroke.argb32.ref.png b/test/reference/rounded-rectangle-stroke.argb32.ref.png
new file mode 100644 (file)
index 0000000..3f2a1fb
Binary files /dev/null and b/test/reference/rounded-rectangle-stroke.argb32.ref.png differ
diff --git a/test/reference/rounded-rectangle-stroke.egl.argb32.ref.png b/test/reference/rounded-rectangle-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5a41dd4
Binary files /dev/null and b/test/reference/rounded-rectangle-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/rounded-rectangle-stroke.mask.argb32.ref.png b/test/reference/rounded-rectangle-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3f2a1fb
Binary files /dev/null and b/test/reference/rounded-rectangle-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/rounded-rectangle-stroke.mask.rgb24.ref.png b/test/reference/rounded-rectangle-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3f2a1fb
Binary files /dev/null and b/test/reference/rounded-rectangle-stroke.mask.rgb24.ref.png differ
diff --git a/test/reference/rounded-rectangle-stroke.rgb24.ref.png b/test/reference/rounded-rectangle-stroke.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3f2a1fb
Binary files /dev/null and b/test/reference/rounded-rectangle-stroke.rgb24.ref.png differ
diff --git a/test/reference/scale-down-source-surface-paint.argb32.ref.png b/test/reference/scale-down-source-surface-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..7477094
Binary files /dev/null and b/test/reference/scale-down-source-surface-paint.argb32.ref.png differ
diff --git a/test/reference/scale-down-source-surface-paint.egl.argb32.ref.png b/test/reference/scale-down-source-surface-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..7477094
Binary files /dev/null and b/test/reference/scale-down-source-surface-paint.egl.argb32.ref.png differ
diff --git a/test/reference/scale-down-source-surface-paint.mask.argb32.ref.png b/test/reference/scale-down-source-surface-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..7477094
Binary files /dev/null and b/test/reference/scale-down-source-surface-paint.mask.argb32.ref.png differ
diff --git a/test/reference/scale-down-source-surface-paint.mask.rgb24.ref.png b/test/reference/scale-down-source-surface-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7477094
Binary files /dev/null and b/test/reference/scale-down-source-surface-paint.mask.rgb24.ref.png differ
diff --git a/test/reference/scale-down-source-surface-paint.rgb24.ref.png b/test/reference/scale-down-source-surface-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..7477094
Binary files /dev/null and b/test/reference/scale-down-source-surface-paint.rgb24.ref.png differ
diff --git a/test/reference/scale-offset-image.argb32.ref.png b/test/reference/scale-offset-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-image.argb32.ref.png differ
diff --git a/test/reference/scale-offset-image.egl.argb32.ref.png b/test/reference/scale-offset-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..56d2b58
Binary files /dev/null and b/test/reference/scale-offset-image.egl.argb32.ref.png differ
diff --git a/test/reference/scale-offset-image.mask.argb32.ref.png b/test/reference/scale-offset-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-image.mask.argb32.ref.png differ
diff --git a/test/reference/scale-offset-image.mask.rgb24.ref.png b/test/reference/scale-offset-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-image.mask.rgb24.ref.png differ
index 67e1fce..1e216e5 100644 (file)
Binary files a/test/reference/scale-offset-image.ref.png and b/test/reference/scale-offset-image.ref.png differ
diff --git a/test/reference/scale-offset-image.rgb24.ref.png b/test/reference/scale-offset-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-image.rgb24.ref.png differ
diff --git a/test/reference/scale-offset-similar.argb32.ref.png b/test/reference/scale-offset-similar.argb32.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-similar.argb32.ref.png differ
diff --git a/test/reference/scale-offset-similar.egl.argb32.ref.png b/test/reference/scale-offset-similar.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..942023a
Binary files /dev/null and b/test/reference/scale-offset-similar.egl.argb32.ref.png differ
diff --git a/test/reference/scale-offset-similar.mask.argb32.ref.png b/test/reference/scale-offset-similar.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-similar.mask.argb32.ref.png differ
diff --git a/test/reference/scale-offset-similar.mask.rgb24.ref.png b/test/reference/scale-offset-similar.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-similar.mask.rgb24.ref.png differ
index 67e1fce..1e216e5 100644 (file)
Binary files a/test/reference/scale-offset-similar.ref.png and b/test/reference/scale-offset-similar.ref.png differ
diff --git a/test/reference/scale-offset-similar.rgb24.ref.png b/test/reference/scale-offset-similar.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ab1ced8
Binary files /dev/null and b/test/reference/scale-offset-similar.rgb24.ref.png differ
diff --git a/test/reference/scale-offset-xlib-fallback.rgb24.ref.png b/test/reference/scale-offset-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dbb1225
Binary files /dev/null and b/test/reference/scale-offset-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/scale-offset-xlib-window.rgb24.ref.png b/test/reference/scale-offset-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dbb1225
Binary files /dev/null and b/test/reference/scale-offset-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/scale-offset-xlib.argb32.ref.png b/test/reference/scale-offset-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..dbb1225
Binary files /dev/null and b/test/reference/scale-offset-xlib.argb32.ref.png differ
diff --git a/test/reference/scale-offset-xlib.rgb24.ref.png b/test/reference/scale-offset-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dbb1225
Binary files /dev/null and b/test/reference/scale-offset-xlib.rgb24.ref.png differ
diff --git a/test/reference/scale-source-surface-paint.argb32.ref.png b/test/reference/scale-source-surface-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..e159d15
Binary files /dev/null and b/test/reference/scale-source-surface-paint.argb32.ref.png differ
diff --git a/test/reference/scale-source-surface-paint.egl.argb32.ref.png b/test/reference/scale-source-surface-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e159d15
Binary files /dev/null and b/test/reference/scale-source-surface-paint.egl.argb32.ref.png differ
diff --git a/test/reference/scale-source-surface-paint.mask.argb32.ref.png b/test/reference/scale-source-surface-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e159d15
Binary files /dev/null and b/test/reference/scale-source-surface-paint.mask.argb32.ref.png differ
diff --git a/test/reference/scale-source-surface-paint.mask.rgb24.ref.png b/test/reference/scale-source-surface-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3491a7c
Binary files /dev/null and b/test/reference/scale-source-surface-paint.mask.rgb24.ref.png differ
index b9e2f43..3491a7c 100644 (file)
Binary files a/test/reference/scale-source-surface-paint.rgb24.ref.png and b/test/reference/scale-source-surface-paint.rgb24.ref.png differ
diff --git a/test/reference/select-font-face.argb32.ref.png b/test/reference/select-font-face.argb32.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/select-font-face.argb32.ref.png differ
index be89d71..1334a9a 100644 (file)
Binary files a/test/reference/select-font-face.base.argb32.ref.png and b/test/reference/select-font-face.base.argb32.ref.png differ
index be89d71..1334a9a 100644 (file)
Binary files a/test/reference/select-font-face.base.rgb24.ref.png and b/test/reference/select-font-face.base.rgb24.ref.png differ
diff --git a/test/reference/select-font-face.mask.argb32.ref.png b/test/reference/select-font-face.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/select-font-face.mask.argb32.ref.png differ
diff --git a/test/reference/select-font-face.mask.rgb24.ref.png b/test/reference/select-font-face.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/select-font-face.mask.rgb24.ref.png differ
diff --git a/test/reference/select-font-face.rgb24.ref.png b/test/reference/select-font-face.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/select-font-face.rgb24.ref.png differ
index be89d71..1334a9a 100644 (file)
Binary files a/test/reference/select-font-face.traps.argb32.ref.png and b/test/reference/select-font-face.traps.argb32.ref.png differ
diff --git a/test/reference/select-font-face.traps.ref.png b/test/reference/select-font-face.traps.ref.png
new file mode 100644 (file)
index 0000000..1334a9a
Binary files /dev/null and b/test/reference/select-font-face.traps.ref.png differ
index be89d71..1334a9a 100644 (file)
Binary files a/test/reference/select-font-face.traps.rgb24.ref.png and b/test/reference/select-font-face.traps.rgb24.ref.png differ
diff --git a/test/reference/self-copy-overlap.egl.argb32.ref.png b/test/reference/self-copy-overlap.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f307bf0
Binary files /dev/null and b/test/reference/self-copy-overlap.egl.argb32.ref.png differ
diff --git a/test/reference/self-copy-overlap.mask.argb32.ref.png b/test/reference/self-copy-overlap.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a70e819
Binary files /dev/null and b/test/reference/self-copy-overlap.mask.argb32.ref.png differ
diff --git a/test/reference/self-copy-overlap.mask.rgb24.ref.png b/test/reference/self-copy-overlap.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e9cd7b5
Binary files /dev/null and b/test/reference/self-copy-overlap.mask.rgb24.ref.png differ
diff --git a/test/reference/self-copy.argb32.ref.png b/test/reference/self-copy.argb32.ref.png
new file mode 100644 (file)
index 0000000..d8221d8
Binary files /dev/null and b/test/reference/self-copy.argb32.ref.png differ
diff --git a/test/reference/self-copy.egl.argb32.ref.png b/test/reference/self-copy.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d8221d8
Binary files /dev/null and b/test/reference/self-copy.egl.argb32.ref.png differ
diff --git a/test/reference/self-copy.mask.argb32.ref.png b/test/reference/self-copy.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d8221d8
Binary files /dev/null and b/test/reference/self-copy.mask.argb32.ref.png differ
diff --git a/test/reference/self-copy.mask.rgb24.ref.png b/test/reference/self-copy.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d8221d8
Binary files /dev/null and b/test/reference/self-copy.mask.rgb24.ref.png differ
diff --git a/test/reference/self-copy.rgb24.ref.png b/test/reference/self-copy.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d8221d8
Binary files /dev/null and b/test/reference/self-copy.rgb24.ref.png differ
diff --git a/test/reference/self-intersecting.argb32.ref.png b/test/reference/self-intersecting.argb32.ref.png
new file mode 100644 (file)
index 0000000..d554d83
Binary files /dev/null and b/test/reference/self-intersecting.argb32.ref.png differ
diff --git a/test/reference/self-intersecting.egl.argb32.ref.png b/test/reference/self-intersecting.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d554d83
Binary files /dev/null and b/test/reference/self-intersecting.egl.argb32.ref.png differ
diff --git a/test/reference/self-intersecting.mask.argb32.ref.png b/test/reference/self-intersecting.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d554d83
Binary files /dev/null and b/test/reference/self-intersecting.mask.argb32.ref.png differ
diff --git a/test/reference/self-intersecting.mask.rgb24.ref.png b/test/reference/self-intersecting.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d554d83
Binary files /dev/null and b/test/reference/self-intersecting.mask.rgb24.ref.png differ
diff --git a/test/reference/self-intersecting.rgb24.ref.png b/test/reference/self-intersecting.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d554d83
Binary files /dev/null and b/test/reference/self-intersecting.rgb24.ref.png differ
diff --git a/test/reference/set-source.argb32.ref.png b/test/reference/set-source.argb32.ref.png
new file mode 100644 (file)
index 0000000..222b372
Binary files /dev/null and b/test/reference/set-source.argb32.ref.png differ
diff --git a/test/reference/set-source.egl.argb32.ref.png b/test/reference/set-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..fef82ea
Binary files /dev/null and b/test/reference/set-source.egl.argb32.ref.png differ
diff --git a/test/reference/set-source.mask.argb32.ref.png b/test/reference/set-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..222b372
Binary files /dev/null and b/test/reference/set-source.mask.argb32.ref.png differ
diff --git a/test/reference/set-source.mask.rgb24.ref.png b/test/reference/set-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5e13c82
Binary files /dev/null and b/test/reference/set-source.mask.rgb24.ref.png differ
index b158c74..5e13c82 100644 (file)
Binary files a/test/reference/set-source.rgb24.ref.png and b/test/reference/set-source.rgb24.ref.png differ
diff --git a/test/reference/shape-general-convex.argb32.ref.png b/test/reference/shape-general-convex.argb32.ref.png
new file mode 100644 (file)
index 0000000..b4d4df7
Binary files /dev/null and b/test/reference/shape-general-convex.argb32.ref.png differ
diff --git a/test/reference/shape-general-convex.egl.argb32.ref.png b/test/reference/shape-general-convex.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f20cfc0
Binary files /dev/null and b/test/reference/shape-general-convex.egl.argb32.ref.png differ
diff --git a/test/reference/shape-general-convex.mask.argb32.ref.png b/test/reference/shape-general-convex.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b4d4df7
Binary files /dev/null and b/test/reference/shape-general-convex.mask.argb32.ref.png differ
diff --git a/test/reference/shape-general-convex.mask.rgb24.ref.png b/test/reference/shape-general-convex.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b4d4df7
Binary files /dev/null and b/test/reference/shape-general-convex.mask.rgb24.ref.png differ
diff --git a/test/reference/shape-general-convex.rgb24.ref.png b/test/reference/shape-general-convex.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b4d4df7
Binary files /dev/null and b/test/reference/shape-general-convex.rgb24.ref.png differ
diff --git a/test/reference/shape-sierpinski.argb32.ref.png b/test/reference/shape-sierpinski.argb32.ref.png
new file mode 100644 (file)
index 0000000..ac98557
Binary files /dev/null and b/test/reference/shape-sierpinski.argb32.ref.png differ
diff --git a/test/reference/shape-sierpinski.egl.argb32.ref.png b/test/reference/shape-sierpinski.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..39c4e43
Binary files /dev/null and b/test/reference/shape-sierpinski.egl.argb32.ref.png differ
diff --git a/test/reference/shape-sierpinski.mask.argb32.ref.png b/test/reference/shape-sierpinski.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ac98557
Binary files /dev/null and b/test/reference/shape-sierpinski.mask.argb32.ref.png differ
diff --git a/test/reference/shape-sierpinski.mask.rgb24.ref.png b/test/reference/shape-sierpinski.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ac98557
Binary files /dev/null and b/test/reference/shape-sierpinski.mask.rgb24.ref.png differ
diff --git a/test/reference/shape-sierpinski.rgb24.ref.png b/test/reference/shape-sierpinski.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ac98557
Binary files /dev/null and b/test/reference/shape-sierpinski.rgb24.ref.png differ
diff --git a/test/reference/show-glyphs-advance.argb32.ref.png b/test/reference/show-glyphs-advance.argb32.ref.png
new file mode 100644 (file)
index 0000000..e65ad05
Binary files /dev/null and b/test/reference/show-glyphs-advance.argb32.ref.png differ
index e784099..e65ad05 100644 (file)
Binary files a/test/reference/show-glyphs-advance.base.argb32.ref.png and b/test/reference/show-glyphs-advance.base.argb32.ref.png differ
index e784099..e65ad05 100644 (file)
Binary files a/test/reference/show-glyphs-advance.base.rgb24.ref.png and b/test/reference/show-glyphs-advance.base.rgb24.ref.png differ
diff --git a/test/reference/show-glyphs-advance.egl.argb32.ref.png b/test/reference/show-glyphs-advance.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..356487e
Binary files /dev/null and b/test/reference/show-glyphs-advance.egl.argb32.ref.png differ
diff --git a/test/reference/show-glyphs-advance.mask.argb32.ref.png b/test/reference/show-glyphs-advance.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e65ad05
Binary files /dev/null and b/test/reference/show-glyphs-advance.mask.argb32.ref.png differ
diff --git a/test/reference/show-glyphs-advance.mask.rgb24.ref.png b/test/reference/show-glyphs-advance.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e65ad05
Binary files /dev/null and b/test/reference/show-glyphs-advance.mask.rgb24.ref.png differ
diff --git a/test/reference/show-glyphs-advance.rgb24.ref.png b/test/reference/show-glyphs-advance.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e65ad05
Binary files /dev/null and b/test/reference/show-glyphs-advance.rgb24.ref.png differ
index e784099..e65ad05 100644 (file)
Binary files a/test/reference/show-glyphs-advance.traps.argb32.ref.png and b/test/reference/show-glyphs-advance.traps.argb32.ref.png differ
diff --git a/test/reference/show-glyphs-advance.traps.ref.png b/test/reference/show-glyphs-advance.traps.ref.png
new file mode 100644 (file)
index 0000000..e65ad05
Binary files /dev/null and b/test/reference/show-glyphs-advance.traps.ref.png differ
index e784099..e65ad05 100644 (file)
Binary files a/test/reference/show-glyphs-advance.traps.rgb24.ref.png and b/test/reference/show-glyphs-advance.traps.rgb24.ref.png differ
diff --git a/test/reference/show-glyphs-many.argb32.ref.png b/test/reference/show-glyphs-many.argb32.ref.png
new file mode 100644 (file)
index 0000000..b638015
Binary files /dev/null and b/test/reference/show-glyphs-many.argb32.ref.png differ
diff --git a/test/reference/show-glyphs-many.egl.argb32.ref.png b/test/reference/show-glyphs-many.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b638015
Binary files /dev/null and b/test/reference/show-glyphs-many.egl.argb32.ref.png differ
diff --git a/test/reference/show-glyphs-many.mask.argb32.ref.png b/test/reference/show-glyphs-many.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b638015
Binary files /dev/null and b/test/reference/show-glyphs-many.mask.argb32.ref.png differ
diff --git a/test/reference/show-glyphs-many.mask.rgb24.ref.png b/test/reference/show-glyphs-many.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b638015
Binary files /dev/null and b/test/reference/show-glyphs-many.mask.rgb24.ref.png differ
diff --git a/test/reference/show-glyphs-many.rgb24.ref.png b/test/reference/show-glyphs-many.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b638015
Binary files /dev/null and b/test/reference/show-glyphs-many.rgb24.ref.png differ
diff --git a/test/reference/show-text-current-point.argb32.ref.png b/test/reference/show-text-current-point.argb32.ref.png
new file mode 100644 (file)
index 0000000..d60d4ac
Binary files /dev/null and b/test/reference/show-text-current-point.argb32.ref.png differ
index b2ee5b2..d60d4ac 100644 (file)
Binary files a/test/reference/show-text-current-point.base.argb32.ref.png and b/test/reference/show-text-current-point.base.argb32.ref.png differ
index b2ee5b2..d60d4ac 100644 (file)
Binary files a/test/reference/show-text-current-point.base.rgb24.ref.png and b/test/reference/show-text-current-point.base.rgb24.ref.png differ
diff --git a/test/reference/show-text-current-point.mask.argb32.ref.png b/test/reference/show-text-current-point.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d60d4ac
Binary files /dev/null and b/test/reference/show-text-current-point.mask.argb32.ref.png differ
diff --git a/test/reference/show-text-current-point.mask.rgb24.ref.png b/test/reference/show-text-current-point.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d60d4ac
Binary files /dev/null and b/test/reference/show-text-current-point.mask.rgb24.ref.png differ
diff --git a/test/reference/show-text-current-point.rgb24.ref.png b/test/reference/show-text-current-point.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d60d4ac
Binary files /dev/null and b/test/reference/show-text-current-point.rgb24.ref.png differ
index b2ee5b2..d60d4ac 100644 (file)
Binary files a/test/reference/show-text-current-point.traps.argb32.ref.png and b/test/reference/show-text-current-point.traps.argb32.ref.png differ
diff --git a/test/reference/show-text-current-point.traps.ref.png b/test/reference/show-text-current-point.traps.ref.png
new file mode 100644 (file)
index 0000000..d60d4ac
Binary files /dev/null and b/test/reference/show-text-current-point.traps.ref.png differ
index b2ee5b2..d60d4ac 100644 (file)
Binary files a/test/reference/show-text-current-point.traps.rgb24.ref.png and b/test/reference/show-text-current-point.traps.rgb24.ref.png differ
diff --git a/test/reference/skew-extreme.argb32.ref.png b/test/reference/skew-extreme.argb32.ref.png
new file mode 100644 (file)
index 0000000..5ccd8c0
Binary files /dev/null and b/test/reference/skew-extreme.argb32.ref.png differ
diff --git a/test/reference/skew-extreme.egl.argb32.ref.png b/test/reference/skew-extreme.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0e684f6
Binary files /dev/null and b/test/reference/skew-extreme.egl.argb32.ref.png differ
diff --git a/test/reference/skew-extreme.mask.argb32.ref.png b/test/reference/skew-extreme.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5ccd8c0
Binary files /dev/null and b/test/reference/skew-extreme.mask.argb32.ref.png differ
diff --git a/test/reference/skew-extreme.mask.rgb24.ref.png b/test/reference/skew-extreme.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5ccd8c0
Binary files /dev/null and b/test/reference/skew-extreme.mask.rgb24.ref.png differ
diff --git a/test/reference/skew-extreme.rgb24.ref.png b/test/reference/skew-extreme.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5ccd8c0
Binary files /dev/null and b/test/reference/skew-extreme.rgb24.ref.png differ
diff --git a/test/reference/smask-fill.argb32.ref.png b/test/reference/smask-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..84e1755
Binary files /dev/null and b/test/reference/smask-fill.argb32.ref.png differ
diff --git a/test/reference/smask-fill.egl.argb32.ref.png b/test/reference/smask-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..cccb96d
Binary files /dev/null and b/test/reference/smask-fill.egl.argb32.ref.png differ
diff --git a/test/reference/smask-fill.mask.argb32.ref.png b/test/reference/smask-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..84e1755
Binary files /dev/null and b/test/reference/smask-fill.mask.argb32.ref.png differ
diff --git a/test/reference/smask-fill.mask.rgb24.ref.png b/test/reference/smask-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..84e1755
Binary files /dev/null and b/test/reference/smask-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/smask-fill.rgb24.ref.png b/test/reference/smask-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..84e1755
Binary files /dev/null and b/test/reference/smask-fill.rgb24.ref.png differ
diff --git a/test/reference/smask-image-mask.argb32.ref.png b/test/reference/smask-image-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..12063bd
Binary files /dev/null and b/test/reference/smask-image-mask.argb32.ref.png differ
diff --git a/test/reference/smask-image-mask.egl.argb32.ref.png b/test/reference/smask-image-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ea3f44c
Binary files /dev/null and b/test/reference/smask-image-mask.egl.argb32.ref.png differ
diff --git a/test/reference/smask-image-mask.mask.argb32.ref.png b/test/reference/smask-image-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..12063bd
Binary files /dev/null and b/test/reference/smask-image-mask.mask.argb32.ref.png differ
diff --git a/test/reference/smask-image-mask.mask.rgb24.ref.png b/test/reference/smask-image-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..12063bd
Binary files /dev/null and b/test/reference/smask-image-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/smask-image-mask.rgb24.ref.png b/test/reference/smask-image-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..12063bd
Binary files /dev/null and b/test/reference/smask-image-mask.rgb24.ref.png differ
diff --git a/test/reference/smask-image-mask.xlib-fallback.rgb24.ref.png b/test/reference/smask-image-mask.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..12063bd
Binary files /dev/null and b/test/reference/smask-image-mask.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/smask-image-mask.xlib-window.rgb24.ref.png b/test/reference/smask-image-mask.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..12063bd
Binary files /dev/null and b/test/reference/smask-image-mask.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/smask-mask.argb32.ref.png b/test/reference/smask-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..80329c2
Binary files /dev/null and b/test/reference/smask-mask.argb32.ref.png differ
diff --git a/test/reference/smask-mask.egl.argb32.ref.png b/test/reference/smask-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..5506dca
Binary files /dev/null and b/test/reference/smask-mask.egl.argb32.ref.png differ
diff --git a/test/reference/smask-mask.mask.argb32.ref.png b/test/reference/smask-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..80329c2
Binary files /dev/null and b/test/reference/smask-mask.mask.argb32.ref.png differ
diff --git a/test/reference/smask-mask.mask.rgb24.ref.png b/test/reference/smask-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..80329c2
Binary files /dev/null and b/test/reference/smask-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/smask-mask.rgb24.ref.png b/test/reference/smask-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..80329c2
Binary files /dev/null and b/test/reference/smask-mask.rgb24.ref.png differ
diff --git a/test/reference/smask-paint.argb32.ref.png b/test/reference/smask-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..95af29a
Binary files /dev/null and b/test/reference/smask-paint.argb32.ref.png differ
diff --git a/test/reference/smask-paint.egl.argb32.ref.png b/test/reference/smask-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a1fe085
Binary files /dev/null and b/test/reference/smask-paint.egl.argb32.ref.png differ
diff --git a/test/reference/smask-paint.mask.argb32.ref.png b/test/reference/smask-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..95af29a
Binary files /dev/null and b/test/reference/smask-paint.mask.argb32.ref.png differ
diff --git a/test/reference/smask-paint.mask.rgb24.ref.png b/test/reference/smask-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..95af29a
Binary files /dev/null and b/test/reference/smask-paint.mask.rgb24.ref.png differ
diff --git a/test/reference/smask-paint.rgb24.ref.png b/test/reference/smask-paint.rgb24.ref.png
new file mode 100644 (file)
index 0000000..95af29a
Binary files /dev/null and b/test/reference/smask-paint.rgb24.ref.png differ
diff --git a/test/reference/smask-stroke.argb32.ref.png b/test/reference/smask-stroke.argb32.ref.png
new file mode 100644 (file)
index 0000000..d7b56e5
Binary files /dev/null and b/test/reference/smask-stroke.argb32.ref.png differ
diff --git a/test/reference/smask-stroke.egl.argb32.ref.png b/test/reference/smask-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f7e2a76
Binary files /dev/null and b/test/reference/smask-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/smask-stroke.mask.argb32.ref.png b/test/reference/smask-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d7b56e5
Binary files /dev/null and b/test/reference/smask-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/smask-stroke.mask.rgb24.ref.png b/test/reference/smask-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d7b56e5
Binary files /dev/null and b/test/reference/smask-stroke.mask.rgb24.ref.png differ
diff --git a/test/reference/smask-stroke.rgb24.ref.png b/test/reference/smask-stroke.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d7b56e5
Binary files /dev/null and b/test/reference/smask-stroke.rgb24.ref.png differ
diff --git a/test/reference/smask-text.argb32.ref.png b/test/reference/smask-text.argb32.ref.png
new file mode 100644 (file)
index 0000000..66ef289
Binary files /dev/null and b/test/reference/smask-text.argb32.ref.png differ
index 871eaee..344ac20 100644 (file)
Binary files a/test/reference/smask-text.base.argb32.ref.png and b/test/reference/smask-text.base.argb32.ref.png differ
index 871eaee..344ac20 100644 (file)
Binary files a/test/reference/smask-text.base.rgb24.ref.png and b/test/reference/smask-text.base.rgb24.ref.png differ
diff --git a/test/reference/smask-text.mask.argb32.ref.png b/test/reference/smask-text.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..344ac20
Binary files /dev/null and b/test/reference/smask-text.mask.argb32.ref.png differ
diff --git a/test/reference/smask-text.mask.rgb24.ref.png b/test/reference/smask-text.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..344ac20
Binary files /dev/null and b/test/reference/smask-text.mask.rgb24.ref.png differ
diff --git a/test/reference/smask-text.rgb24.ref.png b/test/reference/smask-text.rgb24.ref.png
new file mode 100644 (file)
index 0000000..66ef289
Binary files /dev/null and b/test/reference/smask-text.rgb24.ref.png differ
index c570259..66ef289 100644 (file)
Binary files a/test/reference/smask-text.traps.argb32.ref.png and b/test/reference/smask-text.traps.argb32.ref.png differ
diff --git a/test/reference/smask-text.traps.ref.png b/test/reference/smask-text.traps.ref.png
new file mode 100644 (file)
index 0000000..66ef289
Binary files /dev/null and b/test/reference/smask-text.traps.ref.png differ
index c570259..66ef289 100644 (file)
Binary files a/test/reference/smask-text.traps.rgb24.ref.png and b/test/reference/smask-text.traps.rgb24.ref.png differ
diff --git a/test/reference/smask.argb32.ref.png b/test/reference/smask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3b5703e
Binary files /dev/null and b/test/reference/smask.argb32.ref.png differ
index 445d920..357e8e7 100644 (file)
Binary files a/test/reference/smask.base.argb32.ref.png and b/test/reference/smask.base.argb32.ref.png differ
index 445d920..357e8e7 100644 (file)
Binary files a/test/reference/smask.base.rgb24.ref.png and b/test/reference/smask.base.rgb24.ref.png differ
diff --git a/test/reference/smask.egl.argb32.ref.png b/test/reference/smask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ae8f28
Binary files /dev/null and b/test/reference/smask.egl.argb32.ref.png differ
diff --git a/test/reference/smask.mask.argb32.ref.png b/test/reference/smask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..dab308d
Binary files /dev/null and b/test/reference/smask.mask.argb32.ref.png differ
diff --git a/test/reference/smask.mask.rgb24.ref.png b/test/reference/smask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..dab308d
Binary files /dev/null and b/test/reference/smask.mask.rgb24.ref.png differ
diff --git a/test/reference/smask.rgb24.ref.png b/test/reference/smask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3b5703e
Binary files /dev/null and b/test/reference/smask.rgb24.ref.png differ
index 445d920..357e8e7 100644 (file)
Binary files a/test/reference/smask.traps.argb32.ref.png and b/test/reference/smask.traps.argb32.ref.png differ
diff --git a/test/reference/smask.traps.ref.png b/test/reference/smask.traps.ref.png
new file mode 100644 (file)
index 0000000..357e8e7
Binary files /dev/null and b/test/reference/smask.traps.ref.png differ
index 445d920..357e8e7 100644 (file)
Binary files a/test/reference/smask.traps.rgb24.ref.png and b/test/reference/smask.traps.rgb24.ref.png differ
diff --git a/test/reference/solid-pattern-cache-stress.argb32.ref.png b/test/reference/solid-pattern-cache-stress.argb32.ref.png
new file mode 100644 (file)
index 0000000..08a2ce1
Binary files /dev/null and b/test/reference/solid-pattern-cache-stress.argb32.ref.png differ
diff --git a/test/reference/solid-pattern-cache-stress.egl.argb32.ref.png b/test/reference/solid-pattern-cache-stress.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..08a2ce1
Binary files /dev/null and b/test/reference/solid-pattern-cache-stress.egl.argb32.ref.png differ
diff --git a/test/reference/solid-pattern-cache-stress.mask.argb32.ref.png b/test/reference/solid-pattern-cache-stress.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..08a2ce1
Binary files /dev/null and b/test/reference/solid-pattern-cache-stress.mask.argb32.ref.png differ
diff --git a/test/reference/solid-pattern-cache-stress.mask.rgb24.ref.png b/test/reference/solid-pattern-cache-stress.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..08a2ce1
Binary files /dev/null and b/test/reference/solid-pattern-cache-stress.mask.rgb24.ref.png differ
diff --git a/test/reference/solid-pattern-cache-stress.rgb24.ref.png b/test/reference/solid-pattern-cache-stress.rgb24.ref.png
new file mode 100644 (file)
index 0000000..08a2ce1
Binary files /dev/null and b/test/reference/solid-pattern-cache-stress.rgb24.ref.png differ
diff --git a/test/reference/source-clip-scale.argb32.ref.png b/test/reference/source-clip-scale.argb32.ref.png
new file mode 100644 (file)
index 0000000..4b63ad9
Binary files /dev/null and b/test/reference/source-clip-scale.argb32.ref.png differ
diff --git a/test/reference/source-clip-scale.egl.argb32.ref.png b/test/reference/source-clip-scale.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..368fa18
Binary files /dev/null and b/test/reference/source-clip-scale.egl.argb32.ref.png differ
diff --git a/test/reference/source-clip-scale.mask.argb32.ref.png b/test/reference/source-clip-scale.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4b63ad9
Binary files /dev/null and b/test/reference/source-clip-scale.mask.argb32.ref.png differ
diff --git a/test/reference/source-clip-scale.mask.rgb24.ref.png b/test/reference/source-clip-scale.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4b63ad9
Binary files /dev/null and b/test/reference/source-clip-scale.mask.rgb24.ref.png differ
diff --git a/test/reference/source-clip-scale.recording.ref.png b/test/reference/source-clip-scale.recording.ref.png
new file mode 100644 (file)
index 0000000..bbf7c9b
Binary files /dev/null and b/test/reference/source-clip-scale.recording.ref.png differ
diff --git a/test/reference/source-clip-scale.rgb24.ref.png b/test/reference/source-clip-scale.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4b63ad9
Binary files /dev/null and b/test/reference/source-clip-scale.rgb24.ref.png differ
diff --git a/test/reference/source-clip.argb32.ref.png b/test/reference/source-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..821bc6c
Binary files /dev/null and b/test/reference/source-clip.argb32.ref.png differ
diff --git a/test/reference/source-clip.egl.argb32.ref.png b/test/reference/source-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..821bc6c
Binary files /dev/null and b/test/reference/source-clip.egl.argb32.ref.png differ
diff --git a/test/reference/source-clip.mask.argb32.ref.png b/test/reference/source-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..821bc6c
Binary files /dev/null and b/test/reference/source-clip.mask.argb32.ref.png differ
diff --git a/test/reference/source-clip.mask.rgb24.ref.png b/test/reference/source-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..821bc6c
Binary files /dev/null and b/test/reference/source-clip.mask.rgb24.ref.png differ
diff --git a/test/reference/source-clip.rgb24.ref.png b/test/reference/source-clip.rgb24.ref.png
new file mode 100644 (file)
index 0000000..821bc6c
Binary files /dev/null and b/test/reference/source-clip.rgb24.ref.png differ
diff --git a/test/reference/source-surface-scale-paint.argb32.ref.png b/test/reference/source-surface-scale-paint.argb32.ref.png
new file mode 100644 (file)
index 0000000..087ef75
Binary files /dev/null and b/test/reference/source-surface-scale-paint.argb32.ref.png differ
diff --git a/test/reference/source-surface-scale-paint.egl.argb32.ref.png b/test/reference/source-surface-scale-paint.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..fefb18b
Binary files /dev/null and b/test/reference/source-surface-scale-paint.egl.argb32.ref.png differ
diff --git a/test/reference/source-surface-scale-paint.mask.argb32.ref.png b/test/reference/source-surface-scale-paint.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..087ef75
Binary files /dev/null and b/test/reference/source-surface-scale-paint.mask.argb32.ref.png differ
diff --git a/test/reference/source-surface-scale-paint.mask.rgb24.ref.png b/test/reference/source-surface-scale-paint.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..322af21
Binary files /dev/null and b/test/reference/source-surface-scale-paint.mask.rgb24.ref.png differ
index 7ca7459..322af21 100644 (file)
Binary files a/test/reference/source-surface-scale-paint.rgb24.ref.png and b/test/reference/source-surface-scale-paint.rgb24.ref.png differ
diff --git a/test/reference/spline-decomposition.argb32.ref.png b/test/reference/spline-decomposition.argb32.ref.png
new file mode 100644 (file)
index 0000000..e93e621
Binary files /dev/null and b/test/reference/spline-decomposition.argb32.ref.png differ
diff --git a/test/reference/spline-decomposition.egl.argb32.ref.png b/test/reference/spline-decomposition.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..29210c8
Binary files /dev/null and b/test/reference/spline-decomposition.egl.argb32.ref.png differ
diff --git a/test/reference/spline-decomposition.mask.argb32.ref.png b/test/reference/spline-decomposition.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e93e621
Binary files /dev/null and b/test/reference/spline-decomposition.mask.argb32.ref.png differ
diff --git a/test/reference/spline-decomposition.mask.rgb24.ref.png b/test/reference/spline-decomposition.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e93e621
Binary files /dev/null and b/test/reference/spline-decomposition.mask.rgb24.ref.png differ
diff --git a/test/reference/spline-decomposition.rgb24.ref.png b/test/reference/spline-decomposition.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e93e621
Binary files /dev/null and b/test/reference/spline-decomposition.rgb24.ref.png differ
diff --git a/test/reference/stride-12-image.argb32.ref.png b/test/reference/stride-12-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.argb32.ref.png differ
diff --git a/test/reference/stride-12-image.base.argb32.ref.png b/test/reference/stride-12-image.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.base.argb32.ref.png differ
diff --git a/test/reference/stride-12-image.base.rgb24.ref.png b/test/reference/stride-12-image.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.base.rgb24.ref.png differ
diff --git a/test/reference/stride-12-image.egl.argb32.ref.png b/test/reference/stride-12-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f6f9a43
Binary files /dev/null and b/test/reference/stride-12-image.egl.argb32.ref.png differ
diff --git a/test/reference/stride-12-image.image16.ref.png b/test/reference/stride-12-image.image16.ref.png
new file mode 100644 (file)
index 0000000..4b15914
Binary files /dev/null and b/test/reference/stride-12-image.image16.ref.png differ
diff --git a/test/reference/stride-12-image.mask.argb32.ref.png b/test/reference/stride-12-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.mask.argb32.ref.png differ
diff --git a/test/reference/stride-12-image.mask.rgb24.ref.png b/test/reference/stride-12-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.mask.rgb24.ref.png differ
diff --git a/test/reference/stride-12-image.ps.ref.png b/test/reference/stride-12-image.ps.ref.png
new file mode 100644 (file)
index 0000000..953c9a1
Binary files /dev/null and b/test/reference/stride-12-image.ps.ref.png differ
diff --git a/test/reference/stride-12-image.ref.png b/test/reference/stride-12-image.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.ref.png differ
diff --git a/test/reference/stride-12-image.rgb24.ref.png b/test/reference/stride-12-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.rgb24.ref.png differ
diff --git a/test/reference/stride-12-image.traps.argb32.ref.png b/test/reference/stride-12-image.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.traps.argb32.ref.png differ
diff --git a/test/reference/stride-12-image.traps.rgb24.ref.png b/test/reference/stride-12-image.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-image.traps.rgb24.ref.png differ
diff --git a/test/reference/stride-12-xlib-fallback.rgb24.ref.png b/test/reference/stride-12-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/stride-12-xlib-window.rgb24.ref.png b/test/reference/stride-12-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/stride-12-xlib.argb32.ref.png b/test/reference/stride-12-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-xlib.argb32.ref.png differ
diff --git a/test/reference/stride-12-xlib.rgb24.ref.png b/test/reference/stride-12-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4428456
Binary files /dev/null and b/test/reference/stride-12-xlib.rgb24.ref.png differ
diff --git a/test/reference/stroke-ctm-caps.argb32.ref.png b/test/reference/stroke-ctm-caps.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a77d3e
Binary files /dev/null and b/test/reference/stroke-ctm-caps.argb32.ref.png differ
diff --git a/test/reference/stroke-ctm-caps.egl.argb32.ref.png b/test/reference/stroke-ctm-caps.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d4203b6
Binary files /dev/null and b/test/reference/stroke-ctm-caps.egl.argb32.ref.png differ
diff --git a/test/reference/stroke-ctm-caps.mask.argb32.ref.png b/test/reference/stroke-ctm-caps.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3a77d3e
Binary files /dev/null and b/test/reference/stroke-ctm-caps.mask.argb32.ref.png differ
diff --git a/test/reference/stroke-ctm-caps.mask.rgb24.ref.png b/test/reference/stroke-ctm-caps.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3a77d3e
Binary files /dev/null and b/test/reference/stroke-ctm-caps.mask.rgb24.ref.png differ
diff --git a/test/reference/stroke-ctm-caps.rgb24.ref.png b/test/reference/stroke-ctm-caps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3a77d3e
Binary files /dev/null and b/test/reference/stroke-ctm-caps.rgb24.ref.png differ
diff --git a/test/reference/stroke-image.argb32.ref.png b/test/reference/stroke-image.argb32.ref.png
new file mode 100644 (file)
index 0000000..03a07eb
Binary files /dev/null and b/test/reference/stroke-image.argb32.ref.png differ
index 15d4dce..75737d5 100644 (file)
Binary files a/test/reference/stroke-image.base.argb32.ref.png and b/test/reference/stroke-image.base.argb32.ref.png differ
index 15d4dce..75737d5 100644 (file)
Binary files a/test/reference/stroke-image.base.rgb24.ref.png and b/test/reference/stroke-image.base.rgb24.ref.png differ
diff --git a/test/reference/stroke-image.egl.argb32.ref.png b/test/reference/stroke-image.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3e24392
Binary files /dev/null and b/test/reference/stroke-image.egl.argb32.ref.png differ
diff --git a/test/reference/stroke-image.mask.argb32.ref.png b/test/reference/stroke-image.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..03a07eb
Binary files /dev/null and b/test/reference/stroke-image.mask.argb32.ref.png differ
diff --git a/test/reference/stroke-image.mask.rgb24.ref.png b/test/reference/stroke-image.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..03a07eb
Binary files /dev/null and b/test/reference/stroke-image.mask.rgb24.ref.png differ
diff --git a/test/reference/stroke-image.rgb24.ref.png b/test/reference/stroke-image.rgb24.ref.png
new file mode 100644 (file)
index 0000000..03a07eb
Binary files /dev/null and b/test/reference/stroke-image.rgb24.ref.png differ
index 15d4dce..75737d5 100644 (file)
Binary files a/test/reference/stroke-image.traps.argb32.ref.png and b/test/reference/stroke-image.traps.argb32.ref.png differ
index 15d4dce..75737d5 100644 (file)
Binary files a/test/reference/stroke-image.traps.rgb24.ref.png and b/test/reference/stroke-image.traps.rgb24.ref.png differ
diff --git a/test/reference/stroke-open-box.argb32.ref.png b/test/reference/stroke-open-box.argb32.ref.png
new file mode 100644 (file)
index 0000000..b5f5bd5
Binary files /dev/null and b/test/reference/stroke-open-box.argb32.ref.png differ
diff --git a/test/reference/stroke-open-box.egl.argb32.ref.png b/test/reference/stroke-open-box.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b5f5bd5
Binary files /dev/null and b/test/reference/stroke-open-box.egl.argb32.ref.png differ
diff --git a/test/reference/stroke-open-box.mask.argb32.ref.png b/test/reference/stroke-open-box.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b5f5bd5
Binary files /dev/null and b/test/reference/stroke-open-box.mask.argb32.ref.png differ
diff --git a/test/reference/stroke-open-box.mask.rgb24.ref.png b/test/reference/stroke-open-box.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b5f5bd5
Binary files /dev/null and b/test/reference/stroke-open-box.mask.rgb24.ref.png differ
diff --git a/test/reference/stroke-open-box.rgb24.ref.png b/test/reference/stroke-open-box.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b5f5bd5
Binary files /dev/null and b/test/reference/stroke-open-box.rgb24.ref.png differ
diff --git a/test/reference/stroke-pattern.argb32.ref.png b/test/reference/stroke-pattern.argb32.ref.png
new file mode 100644 (file)
index 0000000..38ff6ad
Binary files /dev/null and b/test/reference/stroke-pattern.argb32.ref.png differ
diff --git a/test/reference/stroke-pattern.base.argb32.ref.png b/test/reference/stroke-pattern.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..67bb031
Binary files /dev/null and b/test/reference/stroke-pattern.base.argb32.ref.png differ
diff --git a/test/reference/stroke-pattern.base.rgb24.ref.png b/test/reference/stroke-pattern.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..67bb031
Binary files /dev/null and b/test/reference/stroke-pattern.base.rgb24.ref.png differ
diff --git a/test/reference/stroke-pattern.egl.argb32.ref.png b/test/reference/stroke-pattern.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..e8af799
Binary files /dev/null and b/test/reference/stroke-pattern.egl.argb32.ref.png differ
diff --git a/test/reference/stroke-pattern.mask.argb32.ref.png b/test/reference/stroke-pattern.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..38ff6ad
Binary files /dev/null and b/test/reference/stroke-pattern.mask.argb32.ref.png differ
diff --git a/test/reference/stroke-pattern.mask.rgb24.ref.png b/test/reference/stroke-pattern.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..38ff6ad
Binary files /dev/null and b/test/reference/stroke-pattern.mask.rgb24.ref.png differ
diff --git a/test/reference/stroke-pattern.rgb24.ref.png b/test/reference/stroke-pattern.rgb24.ref.png
new file mode 100644 (file)
index 0000000..38ff6ad
Binary files /dev/null and b/test/reference/stroke-pattern.rgb24.ref.png differ
diff --git a/test/reference/stroke-pattern.traps.argb32.ref.png b/test/reference/stroke-pattern.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..67bb031
Binary files /dev/null and b/test/reference/stroke-pattern.traps.argb32.ref.png differ
diff --git a/test/reference/stroke-pattern.traps.ref.png b/test/reference/stroke-pattern.traps.ref.png
new file mode 100644 (file)
index 0000000..67bb031
Binary files /dev/null and b/test/reference/stroke-pattern.traps.ref.png differ
diff --git a/test/reference/stroke-pattern.traps.rgb24.ref.png b/test/reference/stroke-pattern.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..67bb031
Binary files /dev/null and b/test/reference/stroke-pattern.traps.rgb24.ref.png differ
diff --git a/test/reference/stroke-xlib-fallback.rgb24.ref.png b/test/reference/stroke-xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..75737d5
Binary files /dev/null and b/test/reference/stroke-xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/stroke-xlib-window.rgb24.ref.png b/test/reference/stroke-xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..75737d5
Binary files /dev/null and b/test/reference/stroke-xlib-window.rgb24.ref.png differ
diff --git a/test/reference/stroke-xlib.argb32.ref.png b/test/reference/stroke-xlib.argb32.ref.png
new file mode 100644 (file)
index 0000000..75737d5
Binary files /dev/null and b/test/reference/stroke-xlib.argb32.ref.png differ
diff --git a/test/reference/stroke-xlib.rgb24.ref.png b/test/reference/stroke-xlib.rgb24.ref.png
new file mode 100644 (file)
index 0000000..75737d5
Binary files /dev/null and b/test/reference/stroke-xlib.rgb24.ref.png differ
diff --git a/test/reference/subsurface-image-repeat.argb32.ref.png b/test/reference/subsurface-image-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..3dd6306
Binary files /dev/null and b/test/reference/subsurface-image-repeat.argb32.ref.png differ
diff --git a/test/reference/subsurface-image-repeat.egl.argb32.ref.png b/test/reference/subsurface-image-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b51dd8c
Binary files /dev/null and b/test/reference/subsurface-image-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-image-repeat.mask.argb32.ref.png b/test/reference/subsurface-image-repeat.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..3dd6306
Binary files /dev/null and b/test/reference/subsurface-image-repeat.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-image-repeat.mask.rgb24.ref.png b/test/reference/subsurface-image-repeat.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3dd6306
Binary files /dev/null and b/test/reference/subsurface-image-repeat.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-image-repeat.rgb24.ref.png b/test/reference/subsurface-image-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3dd6306
Binary files /dev/null and b/test/reference/subsurface-image-repeat.rgb24.ref.png differ
diff --git a/test/reference/subsurface-image-repeat.xlib-fallback.rgb24.ref.png b/test/reference/subsurface-image-repeat.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3dd6306
Binary files /dev/null and b/test/reference/subsurface-image-repeat.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/subsurface-image-repeat.xlib-window.rgb24.ref.png b/test/reference/subsurface-image-repeat.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..3dd6306
Binary files /dev/null and b/test/reference/subsurface-image-repeat.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/subsurface-modify-child.argb32.ref.png b/test/reference/subsurface-modify-child.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-child.argb32.ref.png differ
diff --git a/test/reference/subsurface-modify-child.egl.argb32.ref.png b/test/reference/subsurface-modify-child.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-child.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-modify-child.mask.argb32.ref.png b/test/reference/subsurface-modify-child.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-child.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-modify-child.mask.rgb24.ref.png b/test/reference/subsurface-modify-child.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-child.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-modify-child.rgb24.ref.png b/test/reference/subsurface-modify-child.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-child.rgb24.ref.png differ
diff --git a/test/reference/subsurface-modify-parent.argb32.ref.png b/test/reference/subsurface-modify-parent.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-parent.argb32.ref.png differ
diff --git a/test/reference/subsurface-modify-parent.egl.argb32.ref.png b/test/reference/subsurface-modify-parent.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7c53b0
Binary files /dev/null and b/test/reference/subsurface-modify-parent.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-modify-parent.mask.argb32.ref.png b/test/reference/subsurface-modify-parent.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-parent.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-modify-parent.mask.rgb24.ref.png b/test/reference/subsurface-modify-parent.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-parent.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-modify-parent.rgb24.ref.png b/test/reference/subsurface-modify-parent.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-modify-parent.rgb24.ref.png differ
index 16294f3..337cdd8 100644 (file)
Binary files a/test/reference/subsurface-outside-target.base.argb32.ref.png and b/test/reference/subsurface-outside-target.base.argb32.ref.png differ
index 1009249..368936e 100644 (file)
Binary files a/test/reference/subsurface-outside-target.base.rgb24.ref.png and b/test/reference/subsurface-outside-target.base.rgb24.ref.png differ
diff --git a/test/reference/subsurface-outside-target.egl.argb32.ref.png b/test/reference/subsurface-outside-target.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d86289a
Binary files /dev/null and b/test/reference/subsurface-outside-target.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-outside-target.mask.argb32.ref.png b/test/reference/subsurface-outside-target.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..337cdd8
Binary files /dev/null and b/test/reference/subsurface-outside-target.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-outside-target.mask.rgb24.ref.png b/test/reference/subsurface-outside-target.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..368936e
Binary files /dev/null and b/test/reference/subsurface-outside-target.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-outside-target.traps.argb32.ref.png b/test/reference/subsurface-outside-target.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..337cdd8
Binary files /dev/null and b/test/reference/subsurface-outside-target.traps.argb32.ref.png differ
diff --git a/test/reference/subsurface-outside-target.traps.rgb24.ref.png b/test/reference/subsurface-outside-target.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..368936e
Binary files /dev/null and b/test/reference/subsurface-outside-target.traps.rgb24.ref.png differ
diff --git a/test/reference/subsurface-pad.argb32.ref.png b/test/reference/subsurface-pad.argb32.ref.png
new file mode 100644 (file)
index 0000000..eeb9f8f
Binary files /dev/null and b/test/reference/subsurface-pad.argb32.ref.png differ
diff --git a/test/reference/subsurface-pad.egl.argb32.ref.png b/test/reference/subsurface-pad.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7c53b0
Binary files /dev/null and b/test/reference/subsurface-pad.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-pad.mask.argb32.ref.png b/test/reference/subsurface-pad.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..eeb9f8f
Binary files /dev/null and b/test/reference/subsurface-pad.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-pad.mask.rgb24.ref.png b/test/reference/subsurface-pad.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..eeb9f8f
Binary files /dev/null and b/test/reference/subsurface-pad.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-pad.rgb24.ref.png b/test/reference/subsurface-pad.rgb24.ref.png
new file mode 100644 (file)
index 0000000..eeb9f8f
Binary files /dev/null and b/test/reference/subsurface-pad.rgb24.ref.png differ
diff --git a/test/reference/subsurface-reflect.argb32.ref.png b/test/reference/subsurface-reflect.argb32.ref.png
new file mode 100644 (file)
index 0000000..55643f4
Binary files /dev/null and b/test/reference/subsurface-reflect.argb32.ref.png differ
diff --git a/test/reference/subsurface-reflect.egl.argb32.ref.png b/test/reference/subsurface-reflect.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7c53b0
Binary files /dev/null and b/test/reference/subsurface-reflect.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-reflect.mask.argb32.ref.png b/test/reference/subsurface-reflect.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..55643f4
Binary files /dev/null and b/test/reference/subsurface-reflect.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-reflect.mask.rgb24.ref.png b/test/reference/subsurface-reflect.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..55643f4
Binary files /dev/null and b/test/reference/subsurface-reflect.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-reflect.rgb24.ref.png b/test/reference/subsurface-reflect.rgb24.ref.png
new file mode 100644 (file)
index 0000000..55643f4
Binary files /dev/null and b/test/reference/subsurface-reflect.rgb24.ref.png differ
diff --git a/test/reference/subsurface-repeat.argb32.ref.png b/test/reference/subsurface-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-repeat.argb32.ref.png differ
diff --git a/test/reference/subsurface-repeat.egl.argb32.ref.png b/test/reference/subsurface-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b7c53b0
Binary files /dev/null and b/test/reference/subsurface-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-repeat.mask.argb32.ref.png b/test/reference/subsurface-repeat.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-repeat.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-repeat.mask.rgb24.ref.png b/test/reference/subsurface-repeat.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-repeat.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-repeat.rgb24.ref.png b/test/reference/subsurface-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-repeat.rgb24.ref.png differ
diff --git a/test/reference/subsurface-scale.argb32.ref.png b/test/reference/subsurface-scale.argb32.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.argb32.ref.png differ
diff --git a/test/reference/subsurface-scale.base.argb32.ref.png b/test/reference/subsurface-scale.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.base.argb32.ref.png differ
diff --git a/test/reference/subsurface-scale.base.rgb24.ref.png b/test/reference/subsurface-scale.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.base.rgb24.ref.png differ
diff --git a/test/reference/subsurface-scale.egl.argb32.ref.png b/test/reference/subsurface-scale.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..bd6afa7
Binary files /dev/null and b/test/reference/subsurface-scale.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-scale.mask.argb32.ref.png b/test/reference/subsurface-scale.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-scale.mask.rgb24.ref.png b/test/reference/subsurface-scale.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-scale.rgb24.ref.png b/test/reference/subsurface-scale.rgb24.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.rgb24.ref.png differ
diff --git a/test/reference/subsurface-scale.traps.argb32.ref.png b/test/reference/subsurface-scale.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.traps.argb32.ref.png differ
diff --git a/test/reference/subsurface-scale.traps.rgb24.ref.png b/test/reference/subsurface-scale.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..69bb0fb
Binary files /dev/null and b/test/reference/subsurface-scale.traps.rgb24.ref.png differ
diff --git a/test/reference/subsurface-similar-repeat.argb32.ref.png b/test/reference/subsurface-similar-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-similar-repeat.argb32.ref.png differ
diff --git a/test/reference/subsurface-similar-repeat.egl.argb32.ref.png b/test/reference/subsurface-similar-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b51dd8c
Binary files /dev/null and b/test/reference/subsurface-similar-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface-similar-repeat.mask.argb32.ref.png b/test/reference/subsurface-similar-repeat.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-similar-repeat.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface-similar-repeat.mask.rgb24.ref.png b/test/reference/subsurface-similar-repeat.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-similar-repeat.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface-similar-repeat.rgb24.ref.png b/test/reference/subsurface-similar-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c37e22e
Binary files /dev/null and b/test/reference/subsurface-similar-repeat.rgb24.ref.png differ
diff --git a/test/reference/subsurface.argb32.ref.png b/test/reference/subsurface.argb32.ref.png
new file mode 100644 (file)
index 0000000..feeb5dc
Binary files /dev/null and b/test/reference/subsurface.argb32.ref.png differ
index 77e3c23..feeb5dc 100644 (file)
Binary files a/test/reference/subsurface.base.argb32.ref.png and b/test/reference/subsurface.base.argb32.ref.png differ
index 77e3c23..feeb5dc 100644 (file)
Binary files a/test/reference/subsurface.base.rgb24.ref.png and b/test/reference/subsurface.base.rgb24.ref.png differ
diff --git a/test/reference/subsurface.egl.argb32.ref.png b/test/reference/subsurface.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..eaf97e1
Binary files /dev/null and b/test/reference/subsurface.egl.argb32.ref.png differ
diff --git a/test/reference/subsurface.mask.argb32.ref.png b/test/reference/subsurface.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..feeb5dc
Binary files /dev/null and b/test/reference/subsurface.mask.argb32.ref.png differ
diff --git a/test/reference/subsurface.mask.rgb24.ref.png b/test/reference/subsurface.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..feeb5dc
Binary files /dev/null and b/test/reference/subsurface.mask.rgb24.ref.png differ
diff --git a/test/reference/subsurface.rgb24.ref.png b/test/reference/subsurface.rgb24.ref.png
new file mode 100644 (file)
index 0000000..feeb5dc
Binary files /dev/null and b/test/reference/subsurface.rgb24.ref.png differ
index 77e3c23..feeb5dc 100644 (file)
Binary files a/test/reference/subsurface.traps.argb32.ref.png and b/test/reference/subsurface.traps.argb32.ref.png differ
index 77e3c23..feeb5dc 100644 (file)
Binary files a/test/reference/subsurface.traps.rgb24.ref.png and b/test/reference/subsurface.traps.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-big-scale-down.argb32.ref.png b/test/reference/surface-pattern-big-scale-down.argb32.ref.png
new file mode 100644 (file)
index 0000000..c050990
Binary files /dev/null and b/test/reference/surface-pattern-big-scale-down.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-big-scale-down.egl.argb32.ref.png b/test/reference/surface-pattern-big-scale-down.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c050990
Binary files /dev/null and b/test/reference/surface-pattern-big-scale-down.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-big-scale-down.mask.argb32.ref.png b/test/reference/surface-pattern-big-scale-down.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c050990
Binary files /dev/null and b/test/reference/surface-pattern-big-scale-down.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-big-scale-down.mask.rgb24.ref.png b/test/reference/surface-pattern-big-scale-down.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c050990
Binary files /dev/null and b/test/reference/surface-pattern-big-scale-down.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-big-scale-down.rgb24.ref.png b/test/reference/surface-pattern-big-scale-down.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c050990
Binary files /dev/null and b/test/reference/surface-pattern-big-scale-down.rgb24.ref.png differ
index 9abc252..8178030 100644 (file)
Binary files a/test/reference/surface-pattern-operator.argb32.ref.png and b/test/reference/surface-pattern-operator.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-operator.egl.argb32.ref.png b/test/reference/surface-pattern-operator.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ca85992
Binary files /dev/null and b/test/reference/surface-pattern-operator.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-operator.mask.argb32.ref.png b/test/reference/surface-pattern-operator.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8178030
Binary files /dev/null and b/test/reference/surface-pattern-operator.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-operator.mask.rgb24.ref.png b/test/reference/surface-pattern-operator.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2378bdd
Binary files /dev/null and b/test/reference/surface-pattern-operator.mask.rgb24.ref.png differ
index dd9315a..2378bdd 100644 (file)
Binary files a/test/reference/surface-pattern-operator.rgb24.ref.png and b/test/reference/surface-pattern-operator.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-none.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-none.argb32.ref.png
new file mode 100644 (file)
index 0000000..9df14cc
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-none.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-none.egl.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-none.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..044b32d
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-none.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-none.mask.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-none.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9df14cc
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-none.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-none.mask.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-none.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9df14cc
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-none.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-none.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-none.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9df14cc
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-none.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-pad.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-pad.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ee9419
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-pad.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-pad.egl.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-pad.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b105222
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-pad.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-pad.mask.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-pad.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..2ee9419
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-pad.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-pad.mask.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-pad.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2ee9419
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-pad.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-pad.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-pad.rgb24.ref.png
new file mode 100644 (file)
index 0000000..2ee9419
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-pad.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-reflect.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-reflect.argb32.ref.png
new file mode 100644 (file)
index 0000000..f2e93a7
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-reflect.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-reflect.egl.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-reflect.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..4c6412f
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-reflect.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-reflect.mask.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-reflect.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f2e93a7
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-reflect.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-reflect.mask.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-reflect.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f2e93a7
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-reflect.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-reflect.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-reflect.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f2e93a7
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-reflect.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-repeat.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-repeat.argb32.ref.png
new file mode 100644 (file)
index 0000000..c5cff0f
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-repeat.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-repeat.egl.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-repeat.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..03e44fa
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-repeat.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-repeat.mask.argb32.ref.png b/test/reference/surface-pattern-scale-down-extend-repeat.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..c5cff0f
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-repeat.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-repeat.mask.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-repeat.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c5cff0f
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-repeat.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down-extend-repeat.rgb24.ref.png b/test/reference/surface-pattern-scale-down-extend-repeat.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c5cff0f
Binary files /dev/null and b/test/reference/surface-pattern-scale-down-extend-repeat.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down.argb32.ref.png b/test/reference/surface-pattern-scale-down.argb32.ref.png
new file mode 100644 (file)
index 0000000..8bb58a2
Binary files /dev/null and b/test/reference/surface-pattern-scale-down.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down.egl.argb32.ref.png b/test/reference/surface-pattern-scale-down.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..7769699
Binary files /dev/null and b/test/reference/surface-pattern-scale-down.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down.mask.argb32.ref.png b/test/reference/surface-pattern-scale-down.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8bb58a2
Binary files /dev/null and b/test/reference/surface-pattern-scale-down.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down.mask.rgb24.ref.png b/test/reference/surface-pattern-scale-down.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8bb58a2
Binary files /dev/null and b/test/reference/surface-pattern-scale-down.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-down.rgb24.ref.png b/test/reference/surface-pattern-scale-down.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8bb58a2
Binary files /dev/null and b/test/reference/surface-pattern-scale-down.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-up.argb32.ref.png b/test/reference/surface-pattern-scale-up.argb32.ref.png
new file mode 100644 (file)
index 0000000..e8d84e2
Binary files /dev/null and b/test/reference/surface-pattern-scale-up.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-up.egl.argb32.ref.png b/test/reference/surface-pattern-scale-up.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ef90783
Binary files /dev/null and b/test/reference/surface-pattern-scale-up.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-up.mask.argb32.ref.png b/test/reference/surface-pattern-scale-up.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..e8d84e2
Binary files /dev/null and b/test/reference/surface-pattern-scale-up.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern-scale-up.mask.rgb24.ref.png b/test/reference/surface-pattern-scale-up.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e8d84e2
Binary files /dev/null and b/test/reference/surface-pattern-scale-up.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern-scale-up.rgb24.ref.png b/test/reference/surface-pattern-scale-up.rgb24.ref.png
new file mode 100644 (file)
index 0000000..e8d84e2
Binary files /dev/null and b/test/reference/surface-pattern-scale-up.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern.argb32.ref.png b/test/reference/surface-pattern.argb32.ref.png
new file mode 100644 (file)
index 0000000..079ebfb
Binary files /dev/null and b/test/reference/surface-pattern.argb32.ref.png differ
diff --git a/test/reference/surface-pattern.egl.argb32.ref.png b/test/reference/surface-pattern.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..7d91fb2
Binary files /dev/null and b/test/reference/surface-pattern.egl.argb32.ref.png differ
diff --git a/test/reference/surface-pattern.mask.argb32.ref.png b/test/reference/surface-pattern.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..079ebfb
Binary files /dev/null and b/test/reference/surface-pattern.mask.argb32.ref.png differ
diff --git a/test/reference/surface-pattern.mask.rgb24.ref.png b/test/reference/surface-pattern.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..079ebfb
Binary files /dev/null and b/test/reference/surface-pattern.mask.rgb24.ref.png differ
diff --git a/test/reference/surface-pattern.rgb24.ref.png b/test/reference/surface-pattern.rgb24.ref.png
new file mode 100644 (file)
index 0000000..079ebfb
Binary files /dev/null and b/test/reference/surface-pattern.rgb24.ref.png differ
diff --git a/test/reference/svg-surface-source.egl.argb32.ref.png b/test/reference/svg-surface-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/svg-surface-source.egl.argb32.ref.png differ
diff --git a/test/reference/svg-surface-source.mask.argb32.ref.png b/test/reference/svg-surface-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/svg-surface-source.mask.argb32.ref.png differ
diff --git a/test/reference/svg-surface-source.mask.rgb24.ref.png b/test/reference/svg-surface-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/svg-surface-source.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-gray.argb32.ref.png b/test/reference/text-antialias-gray.argb32.ref.png
new file mode 100644 (file)
index 0000000..06b805e
Binary files /dev/null and b/test/reference/text-antialias-gray.argb32.ref.png differ
index b1dbc20..06b805e 100644 (file)
Binary files a/test/reference/text-antialias-gray.base.argb32.ref.png and b/test/reference/text-antialias-gray.base.argb32.ref.png differ
index b1dbc20..06b805e 100644 (file)
Binary files a/test/reference/text-antialias-gray.base.rgb24.ref.png and b/test/reference/text-antialias-gray.base.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-gray.mask.argb32.ref.png b/test/reference/text-antialias-gray.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..06b805e
Binary files /dev/null and b/test/reference/text-antialias-gray.mask.argb32.ref.png differ
diff --git a/test/reference/text-antialias-gray.mask.rgb24.ref.png b/test/reference/text-antialias-gray.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06b805e
Binary files /dev/null and b/test/reference/text-antialias-gray.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-gray.rgb24.ref.png b/test/reference/text-antialias-gray.rgb24.ref.png
new file mode 100644 (file)
index 0000000..06b805e
Binary files /dev/null and b/test/reference/text-antialias-gray.rgb24.ref.png differ
index b1dbc20..06b805e 100644 (file)
Binary files a/test/reference/text-antialias-gray.traps.argb32.ref.png and b/test/reference/text-antialias-gray.traps.argb32.ref.png differ
diff --git a/test/reference/text-antialias-gray.traps.ref.png b/test/reference/text-antialias-gray.traps.ref.png
new file mode 100644 (file)
index 0000000..06b805e
Binary files /dev/null and b/test/reference/text-antialias-gray.traps.ref.png differ
index b1dbc20..06b805e 100644 (file)
Binary files a/test/reference/text-antialias-gray.traps.rgb24.ref.png and b/test/reference/text-antialias-gray.traps.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-none.argb32.ref.png b/test/reference/text-antialias-none.argb32.ref.png
new file mode 100644 (file)
index 0000000..86c09cd
Binary files /dev/null and b/test/reference/text-antialias-none.argb32.ref.png differ
diff --git a/test/reference/text-antialias-none.mask.argb32.ref.png b/test/reference/text-antialias-none.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..86c09cd
Binary files /dev/null and b/test/reference/text-antialias-none.mask.argb32.ref.png differ
diff --git a/test/reference/text-antialias-none.mask.rgb24.ref.png b/test/reference/text-antialias-none.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..86c09cd
Binary files /dev/null and b/test/reference/text-antialias-none.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-none.rgb24.ref.png b/test/reference/text-antialias-none.rgb24.ref.png
new file mode 100644 (file)
index 0000000..86c09cd
Binary files /dev/null and b/test/reference/text-antialias-none.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-none.traps.ref.png b/test/reference/text-antialias-none.traps.ref.png
new file mode 100644 (file)
index 0000000..86c09cd
Binary files /dev/null and b/test/reference/text-antialias-none.traps.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.argb32.ref.png b/test/reference/text-antialias-subpixel-bgr.argb32.ref.png
new file mode 100644 (file)
index 0000000..a221472
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.base.argb32.ref.png b/test/reference/text-antialias-subpixel-bgr.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.base.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.base.rgb24.ref.png b/test/reference/text-antialias-subpixel-bgr.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.base.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.egl.argb32.ref.png b/test/reference/text-antialias-subpixel-bgr.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..56394a4
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.egl.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.image16.ref.png b/test/reference/text-antialias-subpixel-bgr.image16.ref.png
new file mode 100644 (file)
index 0000000..5a4e193
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.image16.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.mask.argb32.ref.png b/test/reference/text-antialias-subpixel-bgr.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.mask.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.mask.rgb24.ref.png b/test/reference/text-antialias-subpixel-bgr.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.ref.png b/test/reference/text-antialias-subpixel-bgr.ref.png
new file mode 100644 (file)
index 0000000..fa64fa7
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.rgb24.ref.png b/test/reference/text-antialias-subpixel-bgr.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a221472
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.traps.argb32.ref.png b/test/reference/text-antialias-subpixel-bgr.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..a221472
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.traps.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.traps.ref.png b/test/reference/text-antialias-subpixel-bgr.traps.ref.png
new file mode 100644 (file)
index 0000000..a221472
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.traps.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-bgr.traps.rgb24.ref.png b/test/reference/text-antialias-subpixel-bgr.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a221472
Binary files /dev/null and b/test/reference/text-antialias-subpixel-bgr.traps.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.argb32.ref.png b/test/reference/text-antialias-subpixel-rgb.argb32.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.base.argb32.ref.png b/test/reference/text-antialias-subpixel-rgb.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.base.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.base.rgb24.ref.png b/test/reference/text-antialias-subpixel-rgb.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.base.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.egl.argb32.ref.png b/test/reference/text-antialias-subpixel-rgb.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..56394a4
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.egl.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.image16.ref.png b/test/reference/text-antialias-subpixel-rgb.image16.ref.png
new file mode 100644 (file)
index 0000000..cf049b9
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.image16.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.mask.argb32.ref.png b/test/reference/text-antialias-subpixel-rgb.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.mask.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.mask.rgb24.ref.png b/test/reference/text-antialias-subpixel-rgb.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.ref.png b/test/reference/text-antialias-subpixel-rgb.ref.png
new file mode 100644 (file)
index 0000000..09da5fa
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.rgb24.ref.png b/test/reference/text-antialias-subpixel-rgb.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.traps.argb32.ref.png b/test/reference/text-antialias-subpixel-rgb.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.traps.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.traps.ref.png b/test/reference/text-antialias-subpixel-rgb.traps.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.traps.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-rgb.traps.rgb24.ref.png b/test/reference/text-antialias-subpixel-rgb.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel-rgb.traps.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.argb32.ref.png b/test/reference/text-antialias-subpixel-vbgr.argb32.ref.png
new file mode 100644 (file)
index 0000000..905579b
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.base.argb32.ref.png b/test/reference/text-antialias-subpixel-vbgr.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.base.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.base.rgb24.ref.png b/test/reference/text-antialias-subpixel-vbgr.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.base.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.egl.argb32.ref.png b/test/reference/text-antialias-subpixel-vbgr.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..56394a4
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.egl.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.image16.ref.png b/test/reference/text-antialias-subpixel-vbgr.image16.ref.png
new file mode 100644 (file)
index 0000000..6ef721a
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.image16.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.mask.argb32.ref.png b/test/reference/text-antialias-subpixel-vbgr.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.mask.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.mask.rgb24.ref.png b/test/reference/text-antialias-subpixel-vbgr.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.ref.png b/test/reference/text-antialias-subpixel-vbgr.ref.png
new file mode 100644 (file)
index 0000000..13bdaf6
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.rgb24.ref.png b/test/reference/text-antialias-subpixel-vbgr.rgb24.ref.png
new file mode 100644 (file)
index 0000000..905579b
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.traps.argb32.ref.png b/test/reference/text-antialias-subpixel-vbgr.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..905579b
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.traps.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.traps.ref.png b/test/reference/text-antialias-subpixel-vbgr.traps.ref.png
new file mode 100644 (file)
index 0000000..905579b
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.traps.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vbgr.traps.rgb24.ref.png b/test/reference/text-antialias-subpixel-vbgr.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..905579b
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vbgr.traps.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.argb32.ref.png b/test/reference/text-antialias-subpixel-vrgb.argb32.ref.png
new file mode 100644 (file)
index 0000000..f7c5bef
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.base.argb32.ref.png b/test/reference/text-antialias-subpixel-vrgb.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.base.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.base.rgb24.ref.png b/test/reference/text-antialias-subpixel-vrgb.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.base.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.egl.argb32.ref.png b/test/reference/text-antialias-subpixel-vrgb.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..56394a4
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.egl.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.image16.ref.png b/test/reference/text-antialias-subpixel-vrgb.image16.ref.png
new file mode 100644 (file)
index 0000000..cb3586b
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.image16.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.mask.argb32.ref.png b/test/reference/text-antialias-subpixel-vrgb.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.mask.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.mask.rgb24.ref.png b/test/reference/text-antialias-subpixel-vrgb.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9fd35ea
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.ref.png b/test/reference/text-antialias-subpixel-vrgb.ref.png
new file mode 100644 (file)
index 0000000..91d5abf
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.rgb24.ref.png b/test/reference/text-antialias-subpixel-vrgb.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f7c5bef
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.traps.argb32.ref.png b/test/reference/text-antialias-subpixel-vrgb.traps.argb32.ref.png
new file mode 100644 (file)
index 0000000..f7c5bef
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.traps.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.traps.ref.png b/test/reference/text-antialias-subpixel-vrgb.traps.ref.png
new file mode 100644 (file)
index 0000000..f7c5bef
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.traps.ref.png differ
diff --git a/test/reference/text-antialias-subpixel-vrgb.traps.rgb24.ref.png b/test/reference/text-antialias-subpixel-vrgb.traps.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f7c5bef
Binary files /dev/null and b/test/reference/text-antialias-subpixel-vrgb.traps.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel.argb32.ref.png b/test/reference/text-antialias-subpixel.argb32.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel.base.argb32.ref.png b/test/reference/text-antialias-subpixel.base.argb32.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel.base.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel.base.rgb24.ref.png b/test/reference/text-antialias-subpixel.base.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel.base.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel.mask.argb32.ref.png b/test/reference/text-antialias-subpixel.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel.mask.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel.mask.rgb24.ref.png b/test/reference/text-antialias-subpixel.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f8d5130
Binary files /dev/null and b/test/reference/text-antialias-subpixel.mask.rgb24.ref.png differ
diff --git a/test/reference/text-antialias-subpixel.rgb24.ref.png b/test/reference/text-antialias-subpixel.rgb24.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel.rgb24.ref.png differ
index 09da5fa..af5e0ae 100644 (file)
Binary files a/test/reference/text-antialias-subpixel.traps.argb32.ref.png and b/test/reference/text-antialias-subpixel.traps.argb32.ref.png differ
diff --git a/test/reference/text-antialias-subpixel.traps.ref.png b/test/reference/text-antialias-subpixel.traps.ref.png
new file mode 100644 (file)
index 0000000..af5e0ae
Binary files /dev/null and b/test/reference/text-antialias-subpixel.traps.ref.png differ
index 09da5fa..af5e0ae 100644 (file)
Binary files a/test/reference/text-antialias-subpixel.traps.rgb24.ref.png and b/test/reference/text-antialias-subpixel.traps.rgb24.ref.png differ
diff --git a/test/reference/text-glyph-range.argb32.ref.png b/test/reference/text-glyph-range.argb32.ref.png
new file mode 100644 (file)
index 0000000..648fef5
Binary files /dev/null and b/test/reference/text-glyph-range.argb32.ref.png differ
index 91de73d..3268699 100644 (file)
Binary files a/test/reference/text-glyph-range.base.argb32.ref.png and b/test/reference/text-glyph-range.base.argb32.ref.png differ
index 91de73d..3268699 100644 (file)
Binary files a/test/reference/text-glyph-range.base.rgb24.ref.png and b/test/reference/text-glyph-range.base.rgb24.ref.png differ
diff --git a/test/reference/text-glyph-range.egl.argb32.ref.png b/test/reference/text-glyph-range.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ce798a0
Binary files /dev/null and b/test/reference/text-glyph-range.egl.argb32.ref.png differ
diff --git a/test/reference/text-glyph-range.mask.argb32.ref.png b/test/reference/text-glyph-range.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..648fef5
Binary files /dev/null and b/test/reference/text-glyph-range.mask.argb32.ref.png differ
diff --git a/test/reference/text-glyph-range.mask.rgb24.ref.png b/test/reference/text-glyph-range.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..648fef5
Binary files /dev/null and b/test/reference/text-glyph-range.mask.rgb24.ref.png differ
diff --git a/test/reference/text-glyph-range.rgb24.ref.png b/test/reference/text-glyph-range.rgb24.ref.png
new file mode 100644 (file)
index 0000000..648fef5
Binary files /dev/null and b/test/reference/text-glyph-range.rgb24.ref.png differ
index 91de73d..3268699 100644 (file)
Binary files a/test/reference/text-glyph-range.traps.argb32.ref.png and b/test/reference/text-glyph-range.traps.argb32.ref.png differ
diff --git a/test/reference/text-glyph-range.traps.ref.png b/test/reference/text-glyph-range.traps.ref.png
new file mode 100644 (file)
index 0000000..3268699
Binary files /dev/null and b/test/reference/text-glyph-range.traps.ref.png differ
index 91de73d..3268699 100644 (file)
Binary files a/test/reference/text-glyph-range.traps.rgb24.ref.png and b/test/reference/text-glyph-range.traps.rgb24.ref.png differ
diff --git a/test/reference/text-pattern.argb32.ref.png b/test/reference/text-pattern.argb32.ref.png
new file mode 100644 (file)
index 0000000..95410fa
Binary files /dev/null and b/test/reference/text-pattern.argb32.ref.png differ
index d9f3eaa..79f18e4 100644 (file)
Binary files a/test/reference/text-pattern.base.argb32.ref.png and b/test/reference/text-pattern.base.argb32.ref.png differ
index 70d4a59..b073b98 100644 (file)
Binary files a/test/reference/text-pattern.base.rgb24.ref.png and b/test/reference/text-pattern.base.rgb24.ref.png differ
diff --git a/test/reference/text-pattern.mask.argb32.ref.png b/test/reference/text-pattern.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..95410fa
Binary files /dev/null and b/test/reference/text-pattern.mask.argb32.ref.png differ
diff --git a/test/reference/text-pattern.mask.rgb24.ref.png b/test/reference/text-pattern.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a6b9e4c
Binary files /dev/null and b/test/reference/text-pattern.mask.rgb24.ref.png differ
diff --git a/test/reference/text-pattern.rgb24.ref.png b/test/reference/text-pattern.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a6b9e4c
Binary files /dev/null and b/test/reference/text-pattern.rgb24.ref.png differ
index d9f3eaa..79f18e4 100644 (file)
Binary files a/test/reference/text-pattern.traps.argb32.ref.png and b/test/reference/text-pattern.traps.argb32.ref.png differ
index 70d4a59..b073b98 100644 (file)
Binary files a/test/reference/text-pattern.traps.rgb24.ref.png and b/test/reference/text-pattern.traps.rgb24.ref.png differ
index 1db9a00..ff3fe84 100644 (file)
Binary files a/test/reference/text-rotate.base.argb32.ref.png and b/test/reference/text-rotate.base.argb32.ref.png differ
index 1db9a00..ff3fe84 100644 (file)
Binary files a/test/reference/text-rotate.base.rgb24.ref.png and b/test/reference/text-rotate.base.rgb24.ref.png differ
diff --git a/test/reference/text-rotate.mask.argb32.ref.png b/test/reference/text-rotate.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b455aab
Binary files /dev/null and b/test/reference/text-rotate.mask.argb32.ref.png differ
diff --git a/test/reference/text-rotate.mask.rgb24.ref.png b/test/reference/text-rotate.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b455aab
Binary files /dev/null and b/test/reference/text-rotate.mask.rgb24.ref.png differ
index 59a0d0a..00c59e7 100644 (file)
Binary files a/test/reference/text-rotate.ref.png and b/test/reference/text-rotate.ref.png differ
index 1db9a00..ff3fe84 100644 (file)
Binary files a/test/reference/text-rotate.traps.argb32.ref.png and b/test/reference/text-rotate.traps.argb32.ref.png differ
diff --git a/test/reference/text-rotate.traps.ref.png b/test/reference/text-rotate.traps.ref.png
new file mode 100644 (file)
index 0000000..ff3fe84
Binary files /dev/null and b/test/reference/text-rotate.traps.ref.png differ
index 1db9a00..ff3fe84 100644 (file)
Binary files a/test/reference/text-rotate.traps.rgb24.ref.png and b/test/reference/text-rotate.traps.rgb24.ref.png differ
diff --git a/test/reference/text-transform.argb32.ref.png b/test/reference/text-transform.argb32.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/text-transform.argb32.ref.png differ
diff --git a/test/reference/text-transform.mask.argb32.ref.png b/test/reference/text-transform.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/text-transform.mask.argb32.ref.png differ
diff --git a/test/reference/text-transform.mask.rgb24.ref.png b/test/reference/text-transform.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/text-transform.mask.rgb24.ref.png differ
diff --git a/test/reference/text-transform.rgb24.ref.png b/test/reference/text-transform.rgb24.ref.png
new file mode 100644 (file)
index 0000000..4603bc5
Binary files /dev/null and b/test/reference/text-transform.rgb24.ref.png differ
diff --git a/test/reference/tiger.argb32.ref.png b/test/reference/tiger.argb32.ref.png
new file mode 100644 (file)
index 0000000..85ae151
Binary files /dev/null and b/test/reference/tiger.argb32.ref.png differ
diff --git a/test/reference/tiger.egl.argb32.ref.png b/test/reference/tiger.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..01dad3c
Binary files /dev/null and b/test/reference/tiger.egl.argb32.ref.png differ
diff --git a/test/reference/tiger.mask.argb32.ref.png b/test/reference/tiger.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..85ae151
Binary files /dev/null and b/test/reference/tiger.mask.argb32.ref.png differ
diff --git a/test/reference/tiger.mask.rgb24.ref.png b/test/reference/tiger.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..85ae151
Binary files /dev/null and b/test/reference/tiger.mask.rgb24.ref.png differ
index 1a84906..b31d358 100644 (file)
Binary files a/test/reference/tiger.ref.png and b/test/reference/tiger.ref.png differ
diff --git a/test/reference/tiger.rgb24.ref.png b/test/reference/tiger.rgb24.ref.png
new file mode 100644 (file)
index 0000000..85ae151
Binary files /dev/null and b/test/reference/tiger.rgb24.ref.png differ
index 3fbd8a4..e348018 100644 (file)
Binary files a/test/reference/tighten-bounds.argb32.ref.png and b/test/reference/tighten-bounds.argb32.ref.png differ
index 291a841..169d9de 100644 (file)
Binary files a/test/reference/tighten-bounds.base.argb32.ref.png and b/test/reference/tighten-bounds.base.argb32.ref.png differ
index f31c17c..d984ff7 100644 (file)
Binary files a/test/reference/tighten-bounds.base.rgb24.ref.png and b/test/reference/tighten-bounds.base.rgb24.ref.png differ
index 5f0161f..28e3c1b 100644 (file)
Binary files a/test/reference/tighten-bounds.rgb24.ref.png and b/test/reference/tighten-bounds.rgb24.ref.png differ
diff --git a/test/reference/transforms.argb32.ref.png b/test/reference/transforms.argb32.ref.png
new file mode 100644 (file)
index 0000000..390bad4
Binary files /dev/null and b/test/reference/transforms.argb32.ref.png differ
diff --git a/test/reference/transforms.egl.argb32.ref.png b/test/reference/transforms.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a5f2afe
Binary files /dev/null and b/test/reference/transforms.egl.argb32.ref.png differ
diff --git a/test/reference/transforms.mask.argb32.ref.png b/test/reference/transforms.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..390bad4
Binary files /dev/null and b/test/reference/transforms.mask.argb32.ref.png differ
diff --git a/test/reference/transforms.mask.rgb24.ref.png b/test/reference/transforms.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..390bad4
Binary files /dev/null and b/test/reference/transforms.mask.rgb24.ref.png differ
diff --git a/test/reference/transforms.rgb24.ref.png b/test/reference/transforms.rgb24.ref.png
new file mode 100644 (file)
index 0000000..390bad4
Binary files /dev/null and b/test/reference/transforms.rgb24.ref.png differ
diff --git a/test/reference/translate-show-surface.argb32.ref.png b/test/reference/translate-show-surface.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/translate-show-surface.argb32.ref.png differ
diff --git a/test/reference/translate-show-surface.egl.argb32.ref.png b/test/reference/translate-show-surface.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ec93608
Binary files /dev/null and b/test/reference/translate-show-surface.egl.argb32.ref.png differ
diff --git a/test/reference/translate-show-surface.mask.argb32.ref.png b/test/reference/translate-show-surface.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/translate-show-surface.mask.argb32.ref.png differ
diff --git a/test/reference/translate-show-surface.mask.rgb24.ref.png b/test/reference/translate-show-surface.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/translate-show-surface.mask.rgb24.ref.png differ
diff --git a/test/reference/translate-show-surface.rgb24.ref.png b/test/reference/translate-show-surface.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0a145d9
Binary files /dev/null and b/test/reference/translate-show-surface.rgb24.ref.png differ
diff --git a/test/reference/trap-clip.argb32.ref.png b/test/reference/trap-clip.argb32.ref.png
new file mode 100644 (file)
index 0000000..b138064
Binary files /dev/null and b/test/reference/trap-clip.argb32.ref.png differ
index 319d835..285934b 100644 (file)
Binary files a/test/reference/trap-clip.base.argb32.ref.png and b/test/reference/trap-clip.base.argb32.ref.png differ
index 7ac5789..ed89be7 100644 (file)
Binary files a/test/reference/trap-clip.base.rgb24.ref.png and b/test/reference/trap-clip.base.rgb24.ref.png differ
diff --git a/test/reference/trap-clip.egl.argb32.ref.png b/test/reference/trap-clip.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..dc8b3f8
Binary files /dev/null and b/test/reference/trap-clip.egl.argb32.ref.png differ
diff --git a/test/reference/trap-clip.mask.argb32.ref.png b/test/reference/trap-clip.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..98cd0a2
Binary files /dev/null and b/test/reference/trap-clip.mask.argb32.ref.png differ
diff --git a/test/reference/trap-clip.mask.rgb24.ref.png b/test/reference/trap-clip.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..c013153
Binary files /dev/null and b/test/reference/trap-clip.mask.rgb24.ref.png differ
index 1e737a0..45f4d69 100644 (file)
Binary files a/test/reference/trap-clip.rgb24.ref.png and b/test/reference/trap-clip.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-gray.argb32.ref.png b/test/reference/twin-antialias-gray.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-gray.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-gray.base.argb32.ref.png and b/test/reference/twin-antialias-gray.base.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-gray.base.rgb24.ref.png and b/test/reference/twin-antialias-gray.base.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-gray.egl.argb32.ref.png b/test/reference/twin-antialias-gray.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c19538a
Binary files /dev/null and b/test/reference/twin-antialias-gray.egl.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-gray.mask.argb32.ref.png b/test/reference/twin-antialias-gray.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-gray.mask.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-gray.mask.rgb24.ref.png b/test/reference/twin-antialias-gray.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-gray.mask.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-gray.rgb24.ref.png b/test/reference/twin-antialias-gray.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-gray.rgb24.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-gray.traps.argb32.ref.png and b/test/reference/twin-antialias-gray.traps.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-gray.traps.rgb24.ref.png and b/test/reference/twin-antialias-gray.traps.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-mixed.argb32.ref.png b/test/reference/twin-antialias-mixed.argb32.ref.png
new file mode 100644 (file)
index 0000000..d6c406f
Binary files /dev/null and b/test/reference/twin-antialias-mixed.argb32.ref.png differ
index 0c91dd1..d6c406f 100644 (file)
Binary files a/test/reference/twin-antialias-mixed.base.argb32.ref.png and b/test/reference/twin-antialias-mixed.base.argb32.ref.png differ
index 0c91dd1..d6c406f 100644 (file)
Binary files a/test/reference/twin-antialias-mixed.base.rgb24.ref.png and b/test/reference/twin-antialias-mixed.base.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-mixed.egl.argb32.ref.png b/test/reference/twin-antialias-mixed.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..162bc60
Binary files /dev/null and b/test/reference/twin-antialias-mixed.egl.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-mixed.mask.argb32.ref.png b/test/reference/twin-antialias-mixed.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d6c406f
Binary files /dev/null and b/test/reference/twin-antialias-mixed.mask.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-mixed.mask.rgb24.ref.png b/test/reference/twin-antialias-mixed.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d6c406f
Binary files /dev/null and b/test/reference/twin-antialias-mixed.mask.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-mixed.rgb24.ref.png b/test/reference/twin-antialias-mixed.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d6c406f
Binary files /dev/null and b/test/reference/twin-antialias-mixed.rgb24.ref.png differ
index 0c91dd1..d6c406f 100644 (file)
Binary files a/test/reference/twin-antialias-mixed.traps.argb32.ref.png and b/test/reference/twin-antialias-mixed.traps.argb32.ref.png differ
index 0c91dd1..d6c406f 100644 (file)
Binary files a/test/reference/twin-antialias-mixed.traps.rgb24.ref.png and b/test/reference/twin-antialias-mixed.traps.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-none.argb32.ref.png b/test/reference/twin-antialias-none.argb32.ref.png
new file mode 100644 (file)
index 0000000..cb9628e
Binary files /dev/null and b/test/reference/twin-antialias-none.argb32.ref.png differ
index 42f386d..02cf333 100644 (file)
Binary files a/test/reference/twin-antialias-none.base.argb32.ref.png and b/test/reference/twin-antialias-none.base.argb32.ref.png differ
index 42f386d..02cf333 100644 (file)
Binary files a/test/reference/twin-antialias-none.base.rgb24.ref.png and b/test/reference/twin-antialias-none.base.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-none.egl.argb32.ref.png b/test/reference/twin-antialias-none.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..cb9628e
Binary files /dev/null and b/test/reference/twin-antialias-none.egl.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-none.mask.argb32.ref.png b/test/reference/twin-antialias-none.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..cb9628e
Binary files /dev/null and b/test/reference/twin-antialias-none.mask.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-none.mask.rgb24.ref.png b/test/reference/twin-antialias-none.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..cb9628e
Binary files /dev/null and b/test/reference/twin-antialias-none.mask.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-none.rgb24.ref.png b/test/reference/twin-antialias-none.rgb24.ref.png
new file mode 100644 (file)
index 0000000..cb9628e
Binary files /dev/null and b/test/reference/twin-antialias-none.rgb24.ref.png differ
index 42f386d..02cf333 100644 (file)
Binary files a/test/reference/twin-antialias-none.traps.argb32.ref.png and b/test/reference/twin-antialias-none.traps.argb32.ref.png differ
index 42f386d..02cf333 100644 (file)
Binary files a/test/reference/twin-antialias-none.traps.rgb24.ref.png and b/test/reference/twin-antialias-none.traps.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-subpixel.argb32.ref.png b/test/reference/twin-antialias-subpixel.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-subpixel.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-subpixel.base.argb32.ref.png and b/test/reference/twin-antialias-subpixel.base.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-subpixel.base.rgb24.ref.png and b/test/reference/twin-antialias-subpixel.base.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-subpixel.egl.argb32.ref.png b/test/reference/twin-antialias-subpixel.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c19538a
Binary files /dev/null and b/test/reference/twin-antialias-subpixel.egl.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-subpixel.mask.argb32.ref.png b/test/reference/twin-antialias-subpixel.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-subpixel.mask.argb32.ref.png differ
diff --git a/test/reference/twin-antialias-subpixel.mask.rgb24.ref.png b/test/reference/twin-antialias-subpixel.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-subpixel.mask.rgb24.ref.png differ
diff --git a/test/reference/twin-antialias-subpixel.rgb24.ref.png b/test/reference/twin-antialias-subpixel.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin-antialias-subpixel.rgb24.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-subpixel.traps.argb32.ref.png and b/test/reference/twin-antialias-subpixel.traps.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin-antialias-subpixel.traps.rgb24.ref.png and b/test/reference/twin-antialias-subpixel.traps.rgb24.ref.png differ
diff --git a/test/reference/twin.argb32.ref.png b/test/reference/twin.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin.base.argb32.ref.png and b/test/reference/twin.base.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin.base.rgb24.ref.png and b/test/reference/twin.base.rgb24.ref.png differ
diff --git a/test/reference/twin.egl.argb32.ref.png b/test/reference/twin.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..c19538a
Binary files /dev/null and b/test/reference/twin.egl.argb32.ref.png differ
diff --git a/test/reference/twin.mask.argb32.ref.png b/test/reference/twin.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin.mask.argb32.ref.png differ
diff --git a/test/reference/twin.mask.rgb24.ref.png b/test/reference/twin.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin.mask.rgb24.ref.png differ
diff --git a/test/reference/twin.rgb24.ref.png b/test/reference/twin.rgb24.ref.png
new file mode 100644 (file)
index 0000000..6b091af
Binary files /dev/null and b/test/reference/twin.rgb24.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin.traps.argb32.ref.png and b/test/reference/twin.traps.argb32.ref.png differ
index bfd4211..d1102b2 100644 (file)
Binary files a/test/reference/twin.traps.rgb24.ref.png and b/test/reference/twin.traps.rgb24.ref.png differ
diff --git a/test/reference/unaligned-box.argb32.ref.png b/test/reference/unaligned-box.argb32.ref.png
new file mode 100644 (file)
index 0000000..ec7c489
Binary files /dev/null and b/test/reference/unaligned-box.argb32.ref.png differ
diff --git a/test/reference/unaligned-box.egl.argb32.ref.png b/test/reference/unaligned-box.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..ec7c489
Binary files /dev/null and b/test/reference/unaligned-box.egl.argb32.ref.png differ
diff --git a/test/reference/unaligned-box.mask.argb32.ref.png b/test/reference/unaligned-box.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ec7c489
Binary files /dev/null and b/test/reference/unaligned-box.mask.argb32.ref.png differ
diff --git a/test/reference/unaligned-box.mask.rgb24.ref.png b/test/reference/unaligned-box.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ec7c489
Binary files /dev/null and b/test/reference/unaligned-box.mask.rgb24.ref.png differ
diff --git a/test/reference/unaligned-box.rgb24.ref.png b/test/reference/unaligned-box.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ec7c489
Binary files /dev/null and b/test/reference/unaligned-box.rgb24.ref.png differ
diff --git a/test/reference/unantialiased-shapes.argb32.ref.png b/test/reference/unantialiased-shapes.argb32.ref.png
new file mode 100644 (file)
index 0000000..d9f466e
Binary files /dev/null and b/test/reference/unantialiased-shapes.argb32.ref.png differ
diff --git a/test/reference/unantialiased-shapes.egl.argb32.ref.png b/test/reference/unantialiased-shapes.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d9f466e
Binary files /dev/null and b/test/reference/unantialiased-shapes.egl.argb32.ref.png differ
diff --git a/test/reference/unantialiased-shapes.mask.argb32.ref.png b/test/reference/unantialiased-shapes.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..d9f466e
Binary files /dev/null and b/test/reference/unantialiased-shapes.mask.argb32.ref.png differ
diff --git a/test/reference/unantialiased-shapes.mask.rgb24.ref.png b/test/reference/unantialiased-shapes.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d9f466e
Binary files /dev/null and b/test/reference/unantialiased-shapes.mask.rgb24.ref.png differ
diff --git a/test/reference/unantialiased-shapes.rgb24.ref.png b/test/reference/unantialiased-shapes.rgb24.ref.png
new file mode 100644 (file)
index 0000000..d9f466e
Binary files /dev/null and b/test/reference/unantialiased-shapes.rgb24.ref.png differ
index c91a4b7..08f4356 100644 (file)
Binary files a/test/reference/unbounded-operator.argb32.ref.png and b/test/reference/unbounded-operator.argb32.ref.png differ
index dfb9031..fe86a94 100644 (file)
Binary files a/test/reference/unbounded-operator.base.argb32.ref.png and b/test/reference/unbounded-operator.base.argb32.ref.png differ
index 6a0c5b3..c8555af 100644 (file)
Binary files a/test/reference/unbounded-operator.base.rgb24.ref.png and b/test/reference/unbounded-operator.base.rgb24.ref.png differ
diff --git a/test/reference/unbounded-operator.mask.argb32.ref.png b/test/reference/unbounded-operator.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..08f4356
Binary files /dev/null and b/test/reference/unbounded-operator.mask.argb32.ref.png differ
diff --git a/test/reference/unbounded-operator.mask.rgb24.ref.png b/test/reference/unbounded-operator.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..80d20dc
Binary files /dev/null and b/test/reference/unbounded-operator.mask.rgb24.ref.png differ
index d383d66..80d20dc 100644 (file)
Binary files a/test/reference/unbounded-operator.rgb24.ref.png and b/test/reference/unbounded-operator.rgb24.ref.png differ
index 80a57b5..fde0b6e 100644 (file)
Binary files a/test/reference/unbounded-operator.traps.argb32.ref.png and b/test/reference/unbounded-operator.traps.argb32.ref.png differ
index 1c0276c..8d51cce 100644 (file)
Binary files a/test/reference/unbounded-operator.traps.rgb24.ref.png and b/test/reference/unbounded-operator.traps.rgb24.ref.png differ
diff --git a/test/reference/unclosed-strokes.argb32.ref.png b/test/reference/unclosed-strokes.argb32.ref.png
new file mode 100644 (file)
index 0000000..8af8472
Binary files /dev/null and b/test/reference/unclosed-strokes.argb32.ref.png differ
diff --git a/test/reference/unclosed-strokes.egl.argb32.ref.png b/test/reference/unclosed-strokes.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..3fef53b
Binary files /dev/null and b/test/reference/unclosed-strokes.egl.argb32.ref.png differ
diff --git a/test/reference/unclosed-strokes.mask.argb32.ref.png b/test/reference/unclosed-strokes.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..8af8472
Binary files /dev/null and b/test/reference/unclosed-strokes.mask.argb32.ref.png differ
diff --git a/test/reference/unclosed-strokes.mask.rgb24.ref.png b/test/reference/unclosed-strokes.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8af8472
Binary files /dev/null and b/test/reference/unclosed-strokes.mask.rgb24.ref.png differ
diff --git a/test/reference/unclosed-strokes.rgb24.ref.png b/test/reference/unclosed-strokes.rgb24.ref.png
new file mode 100644 (file)
index 0000000..8af8472
Binary files /dev/null and b/test/reference/unclosed-strokes.rgb24.ref.png differ
diff --git a/test/reference/user-font-mask.argb32.ref.png b/test/reference/user-font-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..02a9a5e
Binary files /dev/null and b/test/reference/user-font-mask.argb32.ref.png differ
diff --git a/test/reference/user-font-mask.egl.argb32.ref.png b/test/reference/user-font-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d13c868
Binary files /dev/null and b/test/reference/user-font-mask.egl.argb32.ref.png differ
diff --git a/test/reference/user-font-mask.mask.argb32.ref.png b/test/reference/user-font-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..02a9a5e
Binary files /dev/null and b/test/reference/user-font-mask.mask.argb32.ref.png differ
diff --git a/test/reference/user-font-mask.mask.rgb24.ref.png b/test/reference/user-font-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..02a9a5e
Binary files /dev/null and b/test/reference/user-font-mask.mask.rgb24.ref.png differ
diff --git a/test/reference/user-font-mask.rgb24.ref.png b/test/reference/user-font-mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..02a9a5e
Binary files /dev/null and b/test/reference/user-font-mask.rgb24.ref.png differ
diff --git a/test/reference/user-font-proxy.argb32.ref.png b/test/reference/user-font-proxy.argb32.ref.png
new file mode 100644 (file)
index 0000000..5acbca5
Binary files /dev/null and b/test/reference/user-font-proxy.argb32.ref.png differ
index 92ce636..094938c 100644 (file)
Binary files a/test/reference/user-font-proxy.base.argb32.ref.png and b/test/reference/user-font-proxy.base.argb32.ref.png differ
index 92ce636..094938c 100644 (file)
Binary files a/test/reference/user-font-proxy.base.rgb24.ref.png and b/test/reference/user-font-proxy.base.rgb24.ref.png differ
diff --git a/test/reference/user-font-proxy.mask.argb32.ref.png b/test/reference/user-font-proxy.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..5acbca5
Binary files /dev/null and b/test/reference/user-font-proxy.mask.argb32.ref.png differ
diff --git a/test/reference/user-font-proxy.mask.rgb24.ref.png b/test/reference/user-font-proxy.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5acbca5
Binary files /dev/null and b/test/reference/user-font-proxy.mask.rgb24.ref.png differ
diff --git a/test/reference/user-font-proxy.rgb24.ref.png b/test/reference/user-font-proxy.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5acbca5
Binary files /dev/null and b/test/reference/user-font-proxy.rgb24.ref.png differ
index 92ce636..094938c 100644 (file)
Binary files a/test/reference/user-font-proxy.traps.argb32.ref.png and b/test/reference/user-font-proxy.traps.argb32.ref.png differ
diff --git a/test/reference/user-font-proxy.traps.ref.png b/test/reference/user-font-proxy.traps.ref.png
new file mode 100644 (file)
index 0000000..094938c
Binary files /dev/null and b/test/reference/user-font-proxy.traps.ref.png differ
index 92ce636..094938c 100644 (file)
Binary files a/test/reference/user-font-proxy.traps.rgb24.ref.png and b/test/reference/user-font-proxy.traps.rgb24.ref.png differ
diff --git a/test/reference/user-font-rescale.argb32.ref.png b/test/reference/user-font-rescale.argb32.ref.png
new file mode 100644 (file)
index 0000000..0939060
Binary files /dev/null and b/test/reference/user-font-rescale.argb32.ref.png differ
index c644f75..0939060 100644 (file)
Binary files a/test/reference/user-font-rescale.base.argb32.ref.png and b/test/reference/user-font-rescale.base.argb32.ref.png differ
index c644f75..0939060 100644 (file)
Binary files a/test/reference/user-font-rescale.base.rgb24.ref.png and b/test/reference/user-font-rescale.base.rgb24.ref.png differ
diff --git a/test/reference/user-font-rescale.mask.argb32.ref.png b/test/reference/user-font-rescale.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0939060
Binary files /dev/null and b/test/reference/user-font-rescale.mask.argb32.ref.png differ
diff --git a/test/reference/user-font-rescale.mask.rgb24.ref.png b/test/reference/user-font-rescale.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0939060
Binary files /dev/null and b/test/reference/user-font-rescale.mask.rgb24.ref.png differ
diff --git a/test/reference/user-font-rescale.rgb24.ref.png b/test/reference/user-font-rescale.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0939060
Binary files /dev/null and b/test/reference/user-font-rescale.rgb24.ref.png differ
index c644f75..0939060 100644 (file)
Binary files a/test/reference/user-font-rescale.traps.argb32.ref.png and b/test/reference/user-font-rescale.traps.argb32.ref.png differ
diff --git a/test/reference/user-font-rescale.traps.ref.png b/test/reference/user-font-rescale.traps.ref.png
new file mode 100644 (file)
index 0000000..0939060
Binary files /dev/null and b/test/reference/user-font-rescale.traps.ref.png differ
index c644f75..0939060 100644 (file)
Binary files a/test/reference/user-font-rescale.traps.rgb24.ref.png and b/test/reference/user-font-rescale.traps.rgb24.ref.png differ
diff --git a/test/reference/user-font.argb32.ref.png b/test/reference/user-font.argb32.ref.png
new file mode 100644 (file)
index 0000000..b234a88
Binary files /dev/null and b/test/reference/user-font.argb32.ref.png differ
index 0ea3d17..c94cd49 100644 (file)
Binary files a/test/reference/user-font.base.argb32.ref.png and b/test/reference/user-font.base.argb32.ref.png differ
index 0ea3d17..c94cd49 100644 (file)
Binary files a/test/reference/user-font.base.rgb24.ref.png and b/test/reference/user-font.base.rgb24.ref.png differ
diff --git a/test/reference/user-font.egl.argb32.ref.png b/test/reference/user-font.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..09dcf97
Binary files /dev/null and b/test/reference/user-font.egl.argb32.ref.png differ
diff --git a/test/reference/user-font.mask.argb32.ref.png b/test/reference/user-font.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..b234a88
Binary files /dev/null and b/test/reference/user-font.mask.argb32.ref.png differ
diff --git a/test/reference/user-font.mask.rgb24.ref.png b/test/reference/user-font.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b234a88
Binary files /dev/null and b/test/reference/user-font.mask.rgb24.ref.png differ
diff --git a/test/reference/user-font.rgb24.ref.png b/test/reference/user-font.rgb24.ref.png
new file mode 100644 (file)
index 0000000..b234a88
Binary files /dev/null and b/test/reference/user-font.rgb24.ref.png differ
index 0ea3d17..c94cd49 100644 (file)
Binary files a/test/reference/user-font.traps.argb32.ref.png and b/test/reference/user-font.traps.argb32.ref.png differ
index 0ea3d17..c94cd49 100644 (file)
Binary files a/test/reference/user-font.traps.rgb24.ref.png and b/test/reference/user-font.traps.rgb24.ref.png differ
diff --git a/test/reference/white-in-noop.argb32.ref.png b/test/reference/white-in-noop.argb32.ref.png
new file mode 100644 (file)
index 0000000..f42bb8d
Binary files /dev/null and b/test/reference/white-in-noop.argb32.ref.png differ
diff --git a/test/reference/white-in-noop.egl.argb32.ref.png b/test/reference/white-in-noop.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..f42bb8d
Binary files /dev/null and b/test/reference/white-in-noop.egl.argb32.ref.png differ
diff --git a/test/reference/white-in-noop.mask.argb32.ref.png b/test/reference/white-in-noop.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..f42bb8d
Binary files /dev/null and b/test/reference/white-in-noop.mask.argb32.ref.png differ
diff --git a/test/reference/white-in-noop.mask.rgb24.ref.png b/test/reference/white-in-noop.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f42bb8d
Binary files /dev/null and b/test/reference/white-in-noop.mask.rgb24.ref.png differ
diff --git a/test/reference/white-in-noop.rgb24.ref.png b/test/reference/white-in-noop.rgb24.ref.png
new file mode 100644 (file)
index 0000000..f42bb8d
Binary files /dev/null and b/test/reference/white-in-noop.rgb24.ref.png differ
diff --git a/test/reference/world-map-fill.argb32.ref.png b/test/reference/world-map-fill.argb32.ref.png
new file mode 100644 (file)
index 0000000..fad82ee
Binary files /dev/null and b/test/reference/world-map-fill.argb32.ref.png differ
diff --git a/test/reference/world-map-fill.egl.argb32.ref.png b/test/reference/world-map-fill.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..462fb73
Binary files /dev/null and b/test/reference/world-map-fill.egl.argb32.ref.png differ
diff --git a/test/reference/world-map-fill.mask.argb32.ref.png b/test/reference/world-map-fill.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..fad82ee
Binary files /dev/null and b/test/reference/world-map-fill.mask.argb32.ref.png differ
diff --git a/test/reference/world-map-fill.mask.rgb24.ref.png b/test/reference/world-map-fill.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fad82ee
Binary files /dev/null and b/test/reference/world-map-fill.mask.rgb24.ref.png differ
diff --git a/test/reference/world-map-fill.rgb24.ref.png b/test/reference/world-map-fill.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fad82ee
Binary files /dev/null and b/test/reference/world-map-fill.rgb24.ref.png differ
diff --git a/test/reference/world-map-stroke.argb32.ref.png b/test/reference/world-map-stroke.argb32.ref.png
new file mode 100644 (file)
index 0000000..5c6e7d5
Binary files /dev/null and b/test/reference/world-map-stroke.argb32.ref.png differ
diff --git a/test/reference/world-map-stroke.egl.argb32.ref.png b/test/reference/world-map-stroke.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..d366be8
Binary files /dev/null and b/test/reference/world-map-stroke.egl.argb32.ref.png differ
diff --git a/test/reference/world-map-stroke.mask.argb32.ref.png b/test/reference/world-map-stroke.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ec0d502
Binary files /dev/null and b/test/reference/world-map-stroke.mask.argb32.ref.png differ
diff --git a/test/reference/world-map-stroke.mask.rgb24.ref.png b/test/reference/world-map-stroke.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..ec0d502
Binary files /dev/null and b/test/reference/world-map-stroke.mask.rgb24.ref.png differ
diff --git a/test/reference/world-map-stroke.rgb24.ref.png b/test/reference/world-map-stroke.rgb24.ref.png
new file mode 100644 (file)
index 0000000..5c6e7d5
Binary files /dev/null and b/test/reference/world-map-stroke.rgb24.ref.png differ
diff --git a/test/reference/world-map.argb32.ref.png b/test/reference/world-map.argb32.ref.png
new file mode 100644 (file)
index 0000000..1274367
Binary files /dev/null and b/test/reference/world-map.argb32.ref.png differ
diff --git a/test/reference/world-map.egl.argb32.ref.png b/test/reference/world-map.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..72278cc
Binary files /dev/null and b/test/reference/world-map.egl.argb32.ref.png differ
diff --git a/test/reference/world-map.mask.argb32.ref.png b/test/reference/world-map.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..218a303
Binary files /dev/null and b/test/reference/world-map.mask.argb32.ref.png differ
diff --git a/test/reference/world-map.mask.rgb24.ref.png b/test/reference/world-map.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..218a303
Binary files /dev/null and b/test/reference/world-map.mask.rgb24.ref.png differ
diff --git a/test/reference/world-map.rgb24.ref.png b/test/reference/world-map.rgb24.ref.png
new file mode 100644 (file)
index 0000000..1274367
Binary files /dev/null and b/test/reference/world-map.rgb24.ref.png differ
diff --git a/test/reference/xcb-huge-image-shm.argb32.ref.png b/test/reference/xcb-huge-image-shm.argb32.ref.png
new file mode 100644 (file)
index 0000000..a0b24c8
Binary files /dev/null and b/test/reference/xcb-huge-image-shm.argb32.ref.png differ
diff --git a/test/reference/xcb-huge-image-shm.egl.argb32.ref.png b/test/reference/xcb-huge-image-shm.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a0b24c8
Binary files /dev/null and b/test/reference/xcb-huge-image-shm.egl.argb32.ref.png differ
diff --git a/test/reference/xcb-huge-image-shm.mask.argb32.ref.png b/test/reference/xcb-huge-image-shm.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..a0b24c8
Binary files /dev/null and b/test/reference/xcb-huge-image-shm.mask.argb32.ref.png differ
diff --git a/test/reference/xcb-huge-image-shm.mask.rgb24.ref.png b/test/reference/xcb-huge-image-shm.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a0b24c8
Binary files /dev/null and b/test/reference/xcb-huge-image-shm.mask.rgb24.ref.png differ
diff --git a/test/reference/xcb-huge-image-shm.rgb24.ref.png b/test/reference/xcb-huge-image-shm.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a0b24c8
Binary files /dev/null and b/test/reference/xcb-huge-image-shm.rgb24.ref.png differ
diff --git a/test/reference/xcb-huge-image-shm.xlib-fallback.rgb24.ref.png b/test/reference/xcb-huge-image-shm.xlib-fallback.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a0b24c8
Binary files /dev/null and b/test/reference/xcb-huge-image-shm.xlib-fallback.rgb24.ref.png differ
diff --git a/test/reference/xcb-huge-image-shm.xlib-window.rgb24.ref.png b/test/reference/xcb-huge-image-shm.xlib-window.rgb24.ref.png
new file mode 100644 (file)
index 0000000..a0b24c8
Binary files /dev/null and b/test/reference/xcb-huge-image-shm.xlib-window.rgb24.ref.png differ
diff --git a/test/reference/xcb-snapshot-assert.argb32.ref.png b/test/reference/xcb-snapshot-assert.argb32.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-snapshot-assert.argb32.ref.png differ
diff --git a/test/reference/xcb-snapshot-assert.egl.argb32.ref.png b/test/reference/xcb-snapshot-assert.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-snapshot-assert.egl.argb32.ref.png differ
diff --git a/test/reference/xcb-snapshot-assert.mask.argb32.ref.png b/test/reference/xcb-snapshot-assert.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-snapshot-assert.mask.argb32.ref.png differ
diff --git a/test/reference/xcb-snapshot-assert.mask.rgb24.ref.png b/test/reference/xcb-snapshot-assert.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-snapshot-assert.mask.rgb24.ref.png differ
diff --git a/test/reference/xcb-snapshot-assert.rgb24.ref.png b/test/reference/xcb-snapshot-assert.rgb24.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-snapshot-assert.rgb24.ref.png differ
diff --git a/test/reference/xcb-stress-cache.argb32.ref.png b/test/reference/xcb-stress-cache.argb32.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-stress-cache.argb32.ref.png differ
diff --git a/test/reference/xcb-stress-cache.egl.argb32.ref.png b/test/reference/xcb-stress-cache.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-stress-cache.egl.argb32.ref.png differ
diff --git a/test/reference/xcb-stress-cache.mask.argb32.ref.png b/test/reference/xcb-stress-cache.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-stress-cache.mask.argb32.ref.png differ
diff --git a/test/reference/xcb-stress-cache.mask.rgb24.ref.png b/test/reference/xcb-stress-cache.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-stress-cache.mask.rgb24.ref.png differ
diff --git a/test/reference/xcb-stress-cache.rgb24.ref.png b/test/reference/xcb-stress-cache.rgb24.ref.png
new file mode 100644 (file)
index 0000000..850ce59
Binary files /dev/null and b/test/reference/xcb-stress-cache.rgb24.ref.png differ
diff --git a/test/reference/xcb-surface-source.egl.argb32.ref.png b/test/reference/xcb-surface-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/xcb-surface-source.egl.argb32.ref.png differ
diff --git a/test/reference/xcb-surface-source.mask.argb32.ref.png b/test/reference/xcb-surface-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/xcb-surface-source.mask.argb32.ref.png differ
diff --git a/test/reference/xcb-surface-source.mask.rgb24.ref.png b/test/reference/xcb-surface-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/xcb-surface-source.mask.rgb24.ref.png differ
diff --git a/test/reference/xcomposite-projection.argb32.ref.png b/test/reference/xcomposite-projection.argb32.ref.png
new file mode 100644 (file)
index 0000000..abbea08
Binary files /dev/null and b/test/reference/xcomposite-projection.argb32.ref.png differ
diff --git a/test/reference/xcomposite-projection.egl.argb32.ref.png b/test/reference/xcomposite-projection.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..b5e4d0e
Binary files /dev/null and b/test/reference/xcomposite-projection.egl.argb32.ref.png differ
diff --git a/test/reference/xcomposite-projection.mask.argb32.ref.png b/test/reference/xcomposite-projection.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..9ccabda
Binary files /dev/null and b/test/reference/xcomposite-projection.mask.argb32.ref.png differ
diff --git a/test/reference/xcomposite-projection.mask.rgb24.ref.png b/test/reference/xcomposite-projection.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..9ccabda
Binary files /dev/null and b/test/reference/xcomposite-projection.mask.rgb24.ref.png differ
diff --git a/test/reference/xcomposite-projection.rgb24.ref.png b/test/reference/xcomposite-projection.rgb24.ref.png
new file mode 100644 (file)
index 0000000..abbea08
Binary files /dev/null and b/test/reference/xcomposite-projection.rgb24.ref.png differ
diff --git a/test/reference/xlib-expose-event.argb32.ref.png b/test/reference/xlib-expose-event.argb32.ref.png
new file mode 100644 (file)
index 0000000..fd71f5a
Binary files /dev/null and b/test/reference/xlib-expose-event.argb32.ref.png differ
diff --git a/test/reference/xlib-expose-event.egl.argb32.ref.png b/test/reference/xlib-expose-event.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..1e8f43d
Binary files /dev/null and b/test/reference/xlib-expose-event.egl.argb32.ref.png differ
diff --git a/test/reference/xlib-expose-event.mask.argb32.ref.png b/test/reference/xlib-expose-event.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..fd71f5a
Binary files /dev/null and b/test/reference/xlib-expose-event.mask.argb32.ref.png differ
diff --git a/test/reference/xlib-expose-event.mask.rgb24.ref.png b/test/reference/xlib-expose-event.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fd71f5a
Binary files /dev/null and b/test/reference/xlib-expose-event.mask.rgb24.ref.png differ
diff --git a/test/reference/xlib-expose-event.rgb24.ref.png b/test/reference/xlib-expose-event.rgb24.ref.png
new file mode 100644 (file)
index 0000000..fd71f5a
Binary files /dev/null and b/test/reference/xlib-expose-event.rgb24.ref.png differ
diff --git a/test/reference/xlib-surface-source.egl.argb32.ref.png b/test/reference/xlib-surface-source.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/xlib-surface-source.egl.argb32.ref.png differ
diff --git a/test/reference/xlib-surface-source.mask.argb32.ref.png b/test/reference/xlib-surface-source.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..0182972
Binary files /dev/null and b/test/reference/xlib-surface-source.mask.argb32.ref.png differ
diff --git a/test/reference/xlib-surface-source.mask.rgb24.ref.png b/test/reference/xlib-surface-source.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..0d68a82
Binary files /dev/null and b/test/reference/xlib-surface-source.mask.rgb24.ref.png differ
diff --git a/test/reference/zero-alpha.argb32.ref.png b/test/reference/zero-alpha.argb32.ref.png
new file mode 100644 (file)
index 0000000..595c0ae
Binary files /dev/null and b/test/reference/zero-alpha.argb32.ref.png differ
diff --git a/test/reference/zero-alpha.egl.argb32.ref.png b/test/reference/zero-alpha.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..595c0ae
Binary files /dev/null and b/test/reference/zero-alpha.egl.argb32.ref.png differ
diff --git a/test/reference/zero-alpha.mask.argb32.ref.png b/test/reference/zero-alpha.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..595c0ae
Binary files /dev/null and b/test/reference/zero-alpha.mask.argb32.ref.png differ
diff --git a/test/reference/zero-alpha.mask.rgb24.ref.png b/test/reference/zero-alpha.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..595c0ae
Binary files /dev/null and b/test/reference/zero-alpha.mask.rgb24.ref.png differ
diff --git a/test/reference/zero-alpha.rgb24.ref.png b/test/reference/zero-alpha.rgb24.ref.png
new file mode 100644 (file)
index 0000000..595c0ae
Binary files /dev/null and b/test/reference/zero-alpha.rgb24.ref.png differ
diff --git a/test/reference/zero-mask.argb32.ref.png b/test/reference/zero-mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ffae8d9
Binary files /dev/null and b/test/reference/zero-mask.argb32.ref.png differ
diff --git a/test/reference/zero-mask.egl.argb32.ref.png b/test/reference/zero-mask.egl.argb32.ref.png
new file mode 100644 (file)
index 0000000..a475136
Binary files /dev/null and b/test/reference/zero-mask.egl.argb32.ref.png differ
diff --git a/test/reference/zero-mask.mask.argb32.ref.png b/test/reference/zero-mask.mask.argb32.ref.png
new file mode 100644 (file)
index 0000000..ffae8d9
Binary files /dev/null and b/test/reference/zero-mask.mask.argb32.ref.png differ
diff --git a/test/reference/zero-mask.mask.rgb24.ref.png b/test/reference/zero-mask.mask.rgb24.ref.png
new file mode 100644 (file)
index 0000000..263c3d1
Binary files /dev/null and b/test/reference/zero-mask.mask.rgb24.ref.png differ
diff --git a/test/stride-12-image.c b/test/stride-12-image.c
new file mode 100644 (file)
index 0000000..21bd8b0
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2012 Andrea Canciani
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Andrea Canciani <ranma42@gmail.com>
+ */
+
+#include "cairo-test.h"
+
+static const char *png_filename = "romedalen.png";
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    const cairo_test_context_t *ctx = cairo_test_get_context (cr);
+    cairo_format_t format = CAIRO_FORMAT_ARGB32;
+    cairo_t *cr_src;
+    cairo_surface_t *png, *src;
+    uint8_t *data;
+    int stride;
+
+    png = cairo_test_create_surface_from_png (ctx, png_filename);
+
+    stride = cairo_format_stride_for_width (format, width) + 12;
+    data = calloc (stride, height);
+    src = cairo_image_surface_create_for_data (data, format,
+                                              width, height, stride);
+
+    cr_src = cairo_create (src);
+    cairo_set_source_surface (cr_src, png, 0, 0);
+    cairo_paint (cr_src);
+    cairo_destroy (cr_src);
+
+    cairo_set_source_surface (cr, src, 0, 0);
+    cairo_paint (cr);
+
+    cairo_surface_destroy (png);
+
+    cairo_surface_finish (src);
+    cairo_surface_destroy (src);
+
+    free (data);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (stride_12_image,
+           "Test that images with a non-default stride are handled correctly.",
+           "stride, image", /* keywords */
+           NULL, /* requirements */
+           256, 192,
+           NULL, draw)
index d58dd92..c741944 100644 (file)
@@ -65,6 +65,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_image_repeat,
            "Tests source (image) clipping with repeat",
            "subsurface, image, repeat", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            60, 60,
            NULL, draw)
index 3a1e8ff..ed94356 100644 (file)
@@ -93,6 +93,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_modify_child,
            "Tests source clipping with later modifications",
            "subsurface", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            60, 60,
            NULL, draw)
index 3d542d5..de16e75 100644 (file)
@@ -73,6 +73,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_modify_parent,
            "Tests source clipping with later modifications",
            "subsurface", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            60, 60,
            NULL, draw)
index 5e84a84..ef91a2e 100644 (file)
@@ -171,7 +171,7 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_outside_target,
            "Tests contents of subsurfaces outside target area",
            "subsurface, pad", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            (PAINT_SIZE + TARGET_SIZE) * N_PADS         - TARGET_SIZE,
             (PAINT_SIZE + TARGET_SIZE) * N_CONTENTS * 2 - TARGET_SIZE,
            NULL, draw)
index 05e6d72..1ac7a0e 100644 (file)
@@ -71,6 +71,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_pad,
            "Tests source clipping with pad",
            "subsurface, pad", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            60, 60,
            NULL, draw)
index e7ddbac..517106d 100644 (file)
@@ -71,6 +71,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_reflect,
            "Tests source clipping with reflect",
            "subsurface, reflect", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            60, 60,
            NULL, draw)
index 84e25f4..596b973 100644 (file)
@@ -71,6 +71,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_repeat,
            "Tests source clipping with repeat",
            "subsurface, repeat", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            60, 60,
            NULL, draw)
index d5e2d95..9ffd2c4 100644 (file)
@@ -88,6 +88,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_scale,
            "Tests clipping of both source and destination using subsurfaces",
            "subsurface", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            200, 120,
            NULL, draw)
index 5f17b49..011f876 100644 (file)
@@ -81,6 +81,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface_similar_repeat,
            "Tests source clipping through an intermediate with repeat",
            "subsurface, repeat", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            60, 60,
            NULL, draw)
index d79d3d1..812776c 100644 (file)
@@ -80,6 +80,6 @@ draw (cairo_t *cr, int width, int height)
 CAIRO_TEST (subsurface,
            "Tests clipping of both source and destination using subsurfaces",
            "subsurface", /* keywords */
-           NULL, /* requirements */
+           "target=raster", /* FIXME! recursion bug in subsurface/snapshot (with pdf backend) */ /* requirements */
            100, 60,
            NULL, draw)
diff --git a/test/text-antialias-subpixel.c b/test/text-antialias-subpixel.c
new file mode 100644 (file)
index 0000000..6a65059
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright Â© 2005 Red Hat, Inc.
+ * Copyright Â© 2011 Uli Schlachter
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of
+ * Red Hat, Inc. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Red Hat, Inc. makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Uli Schlachter <psychon@znc.in>
+ *
+ * Based on test/text-antialias.c
+ * Author: Carl D. Worth <cworth@cworth.org>
+ */
+
+#include "cairo-test.h"
+
+#define WIDTH  31
+#define HEIGHT 22
+#define TEXT_SIZE 12
+
+static cairo_test_status_t
+draw (cairo_t *cr, cairo_subpixel_order_t order)
+{
+    cairo_text_extents_t extents;
+    cairo_font_options_t *font_options;
+    const char black[] = "black", blue[] = "blue";
+
+    cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
+    cairo_paint (cr);
+
+    cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Sans",
+                           CAIRO_FONT_SLANT_NORMAL,
+                           CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_set_font_size (cr, TEXT_SIZE);
+
+    font_options = cairo_font_options_create ();
+    cairo_get_font_options (cr, font_options);
+    cairo_font_options_set_antialias (font_options, CAIRO_ANTIALIAS_SUBPIXEL);
+    cairo_font_options_set_subpixel_order (font_options, order);
+    cairo_set_font_options (cr, font_options);
+
+    cairo_font_options_destroy (font_options);
+
+    cairo_set_source_rgb (cr, 0, 0, 0); /* black */
+    cairo_text_extents (cr, black, &extents);
+    cairo_move_to (cr, -extents.x_bearing, -extents.y_bearing);
+    cairo_show_text (cr, black);
+    cairo_translate (cr, 0, -extents.y_bearing + 1);
+
+    cairo_set_source_rgb (cr, 0, 0, 1); /* blue */
+    cairo_text_extents (cr, blue, &extents);
+    cairo_move_to (cr, -extents.x_bearing, -extents.y_bearing);
+    cairo_show_text (cr, blue);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+static cairo_test_status_t
+draw_rgb (cairo_t *cr, int width, int height)
+{
+    return draw (cr, CAIRO_SUBPIXEL_ORDER_RGB);
+}
+
+static cairo_test_status_t
+draw_bgr (cairo_t *cr, int width, int height)
+{
+    return draw (cr, CAIRO_SUBPIXEL_ORDER_BGR);
+}
+
+static cairo_test_status_t
+draw_vrgb (cairo_t *cr, int width, int height)
+{
+    return draw (cr, CAIRO_SUBPIXEL_ORDER_VRGB);
+}
+
+static cairo_test_status_t
+draw_vbgr (cairo_t *cr, int width, int height)
+{
+    return draw (cr, CAIRO_SUBPIXEL_ORDER_VBGR);
+}
+
+CAIRO_TEST (text_antialias_subpixel_rgb,
+           "Tests text rendering with rgb subpixel antialiasing",
+           "text", /* keywords */
+           "target=raster", /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw_rgb)
+
+CAIRO_TEST (text_antialias_subpixel_bgr,
+           "Tests text rendering with bgr subpixel antialiasing",
+           "text", /* keywords */
+           "target=raster", /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw_bgr)
+
+CAIRO_TEST (text_antialias_subpixel_vrgb,
+           "Tests text rendering with vertical rgb subpixel antialiasing",
+           "text", /* keywords */
+           "target=raster", /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw_vrgb)
+
+CAIRO_TEST (text_antialias_subpixel_vbgr,
+           "Tests text rendering with vertical bgr subpixel antialiasing",
+           "text", /* keywords */
+           "target=raster", /* requirements */
+           WIDTH, HEIGHT,
+           NULL, draw_vbgr)
index be44b14..4edc44b 100644 (file)
@@ -136,7 +136,6 @@ do_test (const cairo_test_context_t *ctx,
         unsigned char  *reference_data,
         unsigned char  *test_data,
         unsigned char  *diff_data,
-        cairo_bool_t    use_render,
         cairo_bool_t    use_pixmap,
         cairo_bool_t    set_size,
         cairo_bool_t    offscreen)
@@ -184,9 +183,6 @@ do_test (const cairo_test_context_t *ctx,
     if (! surface_compare_visual_and_format (surface))
        return CAIRO_TEST_FAILURE;
 
-    if (!use_render)
-       cairo_boilerplate_xlib_surface_disable_render (surface);
-
     if (set_size) {
        cairo_xlib_surface_set_size (surface, SIZE, SIZE);
 
@@ -243,13 +239,10 @@ do_test (const cairo_test_context_t *ctx,
                             &result);
     }
 
-    cairo_test_log (ctx, "xlib-surface: %s, %s, %s%s: %s\n",
-                   use_render ? "   render" : "no-render",
+    cairo_test_log (ctx, "xlib-surface: %s, %s, %s: %s\n",
                    set_size ? "   size" : "no-size",
                    use_pixmap ? "pixmap" : "window",
-                   use_pixmap ?
-                   "           " :
-                   (offscreen ? ", offscreen" : ",  onscreen"),
+                   use_pixmap ?  "           " : (offscreen ? ", offscreen" : ",  onscreen"),
                    image_diff_is_failure (&result, 0) ? "FAIL" : "PASS");
 
     if (image_diff_is_failure (&result, 0))
@@ -335,17 +328,7 @@ preamble (cairo_test_context_t *ctx)
            for (offscreen = 0; offscreen <= 1; offscreen++) {
                status = do_test (ctx, dpy,
                                  reference_data, test_data, diff_data,
-                                 1, use_pixmap, set_size, offscreen);
-               if (status)
-                   result = status;
-           }
-
-    for (set_size = 0; set_size <= 1; set_size++)
-       for (use_pixmap = 0; use_pixmap <= 1; use_pixmap++)
-           for (offscreen = 0; offscreen <= 1; offscreen++) {
-               status = do_test (ctx, dpy,
-                                 reference_data, test_data, diff_data,
-                                 0, use_pixmap, set_size, offscreen);
+                                 use_pixmap, set_size, offscreen);
                if (status)
                    result = status;
            }
diff --git a/util/.gitignore b/util/.gitignore
new file mode 100644 (file)
index 0000000..9a28da1
--- /dev/null
@@ -0,0 +1,24 @@
+.deps
+.libs
+Makefile
+Makefile.in
+show-contour
+show-edges
+show-events
+show-polygon
+show-traps
+xml-to-trace
+trace-to-xml
+*.so
+*.la
+*.lo
+*.loT
+*.o
+*.obj
+*.pdb
+*.dll
+*.exp
+*.lib
+*~
+.*.sw?
+TAGS
index f202f35..82d0a80 100644 (file)
@@ -12,20 +12,24 @@ endif
 
 if CAIRO_HAS_TRACE
 SUBDIRS += cairo-trace
+if CAIRO_HAS_DLSYM
 if CAIRO_HAS_SCRIPT_SURFACE
 if CAIRO_HAS_TEE_SURFACE
 SUBDIRS += cairo-fdr
 endif
 endif
 endif
+endif
 
 if BUILD_SPHINX
+if CAIRO_HAS_DLSYM
 if CAIRO_HAS_SCRIPT_SURFACE
 if CAIRO_HAS_TEE_SURFACE
 SUBDIRS += cairo-sphinx
 endif
 endif
 endif
+endif
 
 AM_CPPFLAGS = -I$(top_srcdir)/src \
              -I$(top_builddir)/src \
index ccb85fa..7e4f0a3 100644 (file)
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
+#ifndef _SSIZE_T_DEFINED
 typedef SSIZE_T ssize_t;
 #endif
+#endif
 
 #ifndef HAVE_GETLINE
 cairo_private ssize_t
diff --git a/util/cairo-script/.gitignore b/util/cairo-script/.gitignore
new file mode 100644 (file)
index 0000000..8ecaee3
--- /dev/null
@@ -0,0 +1,3 @@
+csi-replay
+csi-exec
+csi-trace
index ad1a201..8df03d6 100644 (file)
@@ -1120,10 +1120,11 @@ static csi_status_t
 _curve_to (csi_t *ctx)
 {
     csi_status_t status;
+    csi_object_t *obj;
+    int type;
     double x1, y1;
     double x2, y2;
     double x3, y3;
-    cairo_t *cr;
 
     check (7);
 
@@ -1145,13 +1146,20 @@ _curve_to (csi_t *ctx)
     status = _csi_ostack_get_number (ctx, 5, &x1);
     if (_csi_unlikely (status))
        return status;
-    status = _csi_ostack_get_context (ctx, 6, &cr);
-    if (_csi_unlikely (status))
-       return status;
 
-    /* XXX handle path object */
+    obj = _csi_peek_ostack (ctx, 6);
+    type = csi_object_get_type (obj);
+    switch (type) {
+    case CSI_OBJECT_TYPE_CONTEXT:
+       cairo_curve_to (obj->datum.cr, x1, y1, x2, y2, x3, y3);
+       break;
+    case CSI_OBJECT_TYPE_PATTERN:
+       cairo_mesh_pattern_curve_to (obj->datum.pattern,
+                                    x1, y1, x2, y2, x3, y3);
+       break;
+       /* XXX handle path object */
+    }
 
-    cairo_curve_to (cr, x1, y1, x2, y2, x3, y3);
     pop (6);
     return CSI_STATUS_SUCCESS;
 }
@@ -3423,8 +3431,9 @@ static csi_status_t
 _line_to (csi_t *ctx)
 {
     csi_status_t status;
+    csi_object_t *obj;
+    int type;
     double x, y;
-    cairo_t *cr;
 
     check (3);
 
@@ -3434,14 +3443,21 @@ _line_to (csi_t *ctx)
     status = _csi_ostack_get_number (ctx, 1, &x);
     if (_csi_unlikely (status))
        return status;
-    status = _csi_ostack_get_context (ctx, 2, &cr);
-    if (_csi_unlikely (status))
-       return status;
 
     /* XXX path object */
 
+    obj = _csi_peek_ostack (ctx, 2);
+    type = csi_object_get_type (obj);
+    switch (type) {
+    case CSI_OBJECT_TYPE_CONTEXT:
+       cairo_line_to (obj->datum.cr, x, y);
+       break;
+    case CSI_OBJECT_TYPE_PATTERN:
+       cairo_mesh_pattern_line_to (obj->datum.pattern, x, y);
+       break;
+    }
+
     pop (2);
-    cairo_line_to (cr, x, y);
     return CSI_STATUS_SUCCESS;
 }
 
@@ -3712,43 +3728,6 @@ _mesh_begin_patch (csi_t *ctx)
 }
 
 static csi_status_t
-_mesh_curve_to (csi_t *ctx)
-{
-    csi_status_t status;
-    double x1, y1, x2, y2, x3, y3;
-    cairo_pattern_t *pattern = NULL; /* silence the compiler */
-
-    check (7);
-
-    status = _csi_ostack_get_number (ctx, 0, &y3);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_number (ctx, 1, &x3);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_number (ctx, 2, &y2);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_number (ctx, 3, &x2);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_number (ctx, 4, &y1);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_number (ctx, 5, &x1);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_pattern (ctx, 6, &pattern);
-    if (_csi_unlikely (status))
-       return status;
-
-    cairo_mesh_pattern_curve_to (pattern, x1, y1, x2, y2, x3, y3);
-
-    pop (6);
-    return CSI_STATUS_SUCCESS;
-}
-
-static csi_status_t
 _mesh_end_patch (csi_t *ctx)
 {
     csi_status_t status;
@@ -3765,56 +3744,6 @@ _mesh_end_patch (csi_t *ctx)
 }
 
 static csi_status_t
-_mesh_line_to (csi_t *ctx)
-{
-    csi_status_t status;
-    double x, y;
-    cairo_pattern_t *pattern = NULL; /* silence the compiler */
-
-    check (3);
-
-    status = _csi_ostack_get_number (ctx, 0, &y);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_number (ctx, 1, &x);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_pattern (ctx, 2, &pattern);
-    if (_csi_unlikely (status))
-       return status;
-
-    cairo_mesh_pattern_line_to (pattern, x, y);
-
-    pop (2);
-    return CSI_STATUS_SUCCESS;
-}
-
-static csi_status_t
-_mesh_move_to (csi_t *ctx)
-{
-    csi_status_t status;
-    double x, y;
-    cairo_pattern_t *pattern = NULL; /* silence the compiler */
-
-    check (3);
-
-    status = _csi_ostack_get_number (ctx, 0, &y);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_number (ctx, 1, &x);
-    if (_csi_unlikely (status))
-       return status;
-    status = _csi_ostack_get_pattern (ctx, 2, &pattern);
-    if (_csi_unlikely (status))
-       return status;
-
-    cairo_mesh_pattern_move_to (pattern, x, y);
-
-    pop (2);
-    return CSI_STATUS_SUCCESS;
-}
-
-static csi_status_t
 _mesh_set_control_point (csi_t *ctx)
 {
     csi_status_t status;
@@ -3901,8 +3830,9 @@ static csi_status_t
 _move_to (csi_t *ctx)
 {
     csi_status_t status;
+    csi_object_t *obj;
+    int type;
     double x, y;
-    cairo_t *cr;
 
     check (3);
 
@@ -3912,14 +3842,21 @@ _move_to (csi_t *ctx)
     status = _csi_ostack_get_number (ctx, 1, &x);
     if (_csi_unlikely (status))
        return status;
-    status = _csi_ostack_get_context (ctx, 2, &cr);
-    if (_csi_unlikely (status))
-       return status;
 
-    /* XXX path object */
+    obj = _csi_peek_ostack (ctx, 2);
+    type = csi_object_get_type (obj);
+    switch (type) {
+    case CSI_OBJECT_TYPE_CONTEXT:
+       cairo_move_to (obj->datum.cr, x, y);
+       break;
+    case CSI_OBJECT_TYPE_PATTERN:
+       cairo_mesh_pattern_move_to (obj->datum.pattern, x, y);
+       break;
+
+       /* XXX path object */
+    }
 
     pop (2);
-    cairo_move_to (cr, x, y);
     return CSI_STATUS_SUCCESS;
 }
 
@@ -6442,14 +6379,13 @@ _defs[] = {
     { "mark", _mark },
     { "mask", _mask },
     { "matrix", _matrix },
+
     { "mesh", _mesh },
-    { "mesh-begin-patch", _mesh_begin_patch },
-    { "mesh-curve-to", _mesh_curve_to },
-    { "mesh-end-patch", _mesh_end_patch },
-    { "mesh-line-to", _mesh_line_to },
-    { "mesh-move-to", _mesh_move_to },
-    { "mesh-set-control-point", _mesh_set_control_point },
-    { "mesh-set-corner-color", _mesh_set_corner_color },
+    { "begin-patch", _mesh_begin_patch },
+    { "end-patch", _mesh_end_patch },
+    { "set-control-point", _mesh_set_control_point },
+    { "set-corner-color", _mesh_set_corner_color },
+
     { "mod", _mod },
     { "move-to", _move_to },
     { "mul", _mul },
index 969fb63..eeec686 100644 (file)
@@ -768,7 +768,7 @@ base64_end (csi_t *ctx, csi_scanner_t *scan)
        longjmp (scan->jmpbuf, status);
 }
 
-static inline void
+static void
 scan_read (csi_scanner_t *scan, csi_file_t *src, void *ptr, int len)
 {
     uint8_t *data = ptr;
diff --git a/util/cairo-sphinx/.gitignore b/util/cairo-sphinx/.gitignore
new file mode 100644 (file)
index 0000000..56ecd5d
--- /dev/null
@@ -0,0 +1 @@
+cairo-sphinx
index 40d6776..7bc1c50 100644 (file)
@@ -1378,7 +1378,7 @@ do_client (int fd,
 
     client.surface = client.target->create_surface (NULL, content, 1, 1, 1, 1,
                                                    CAIRO_BOILERPLATE_MODE_TEST,
-                                                   0, &closure);
+                                                   &closure);
     if (client.surface == NULL) {
        fprintf (stderr, "Failed to create target surface: %s.\n",
                 client.target->name);
diff --git a/util/cairo-trace/.gitignore b/util/cairo-trace/.gitignore
new file mode 100644 (file)
index 0000000..b5f8666
--- /dev/null
@@ -0,0 +1 @@
+cairo-trace
index 1fc3de6..ece90d3 100644 (file)
@@ -25,7 +25,7 @@ Whatever else happens is driven by its argument:
   --compress      - Compress the output with LZMA
   --profile       - Combine --no-callers and --no-mark-dirty and --compress
 
-Enviroment variables understood by cairo-trace:
+Environment variables understood by cairo-trace:
   CAIRO_TRACE_FLUSH - flush the output after every function call.
   CAIRO_TRACE_LINE_INFO - emit line information for most function calls.
 EOF
index 7475958..da7d2f0 100644 (file)
@@ -770,7 +770,6 @@ _emit_header (void)
     get_prog_name (name, sizeof (name));
 
     _trace_printf ("%%!CairoScript - %s\n", name);
-    _trace_printf ("%%*** Warning CairoScript is still a new tracing format, and is subject to change.\n");
 }
 
 static cairo_bool_t
@@ -3511,24 +3510,42 @@ cairo_image_surface_create_for_data (unsigned char *data, cairo_format_t format,
     return ret;
 }
 
-cairo_surface_t *
-cairo_mime_surface_create (void *data, cairo_content_t content, int width, int height)
+unsigned char *
+cairo_image_surface_get_data (cairo_surface_t *surface)
 {
-    cairo_surface_t *ret;
+    unsigned char *ptr;
+
+    /* Just leave some breadcrumbs */
+    _enter_trace ();
+    _emit_line_info ();
+    if (surface != NULL && _write_lock ()) {
+       _trace_printf ("%% s%ld get-data\n", _get_surface_id (surface));
+       _write_unlock ();
+    }
+    ptr = DLCALL (cairo_image_surface_get_data, surface);
+    _exit_trace ();
+
+    return ptr;
+}
+
+cairo_pattern_t *
+cairo_pattern_create_raster_source (void *data, cairo_content_t content, int width, int height)
+{
+    cairo_pattern_t *ret;
 
     _enter_trace ();
 
-    ret = DLCALL (cairo_mime_surface_create, data, content, width, height);
+    ret = DLCALL (cairo_pattern_create_raster_source, data, content, width, height);
 
     _emit_line_info ();
     if (_write_lock ()) {
-       Object *obj = _create_surface (ret);
+       long pattern_id = _create_pattern_id (ret);
        cairo_format_t format;
        cairo_surface_t *image;
        cairo_t *cr;
 
-       /* Impossible to accurately record the interaction with a mime-surface
-        * so just suck all the data into an image upfront */
+       /* Impossible to accurately record the interaction with this custom
+        * pattern so just suck all the data into an image upfront */
        switch (content) {
        case CAIRO_CONTENT_ALPHA: format = CAIRO_FORMAT_A8; break;
        case CAIRO_CONTENT_COLOR: format = CAIRO_FORMAT_RGB24; break;
@@ -3536,23 +3553,20 @@ cairo_mime_surface_create (void *data, cairo_content_t content, int width, int h
        case CAIRO_CONTENT_COLOR_ALPHA: format = CAIRO_FORMAT_ARGB32; break;
        }
 
-       _trace_printf ("%% mime-surface\n");
+       _trace_printf ("%% raster-source\n");
 
        image = DLCALL (cairo_image_surface_create, format, width, height);
        cr = DLCALL (cairo_create, image);
-       DLCALL (cairo_set_source_surface, cr, ret, 0, 0);
+       DLCALL (cairo_set_source, cr, ret);
        DLCALL (cairo_paint, cr);
        DLCALL (cairo_destroy, cr);
 
        _emit_image (image, NULL);
        DLCALL (cairo_surface_destroy, image);
-       _trace_printf (" dup /s%ld exch def\n",
-                      obj->token);
+       _trace_printf (" pattern dup /s%ld exch def\n",
+                      pattern_id);
 
-       obj->width = width;
-       obj->height = height;
-       obj->defined = TRUE;
-       _push_object (obj);
+       _push_operand (PATTERN, ret);
        _write_unlock ();
     }
 
@@ -3750,6 +3764,10 @@ cairo_surface_flush (cairo_surface_t *surface)
 {
     _enter_trace ();
     _emit_line_info ();
+    if (surface != NULL && _write_lock ()) {
+       _trace_printf ("%% s%ld flush\n", _get_surface_id (surface));
+       _write_unlock ();
+    }
     DLCALL (cairo_surface_flush, surface);
     _exit_trace ();
 }
@@ -5169,3 +5187,186 @@ cairo_vg_surface_create_for_image (cairo_vg_context_t *context,
     return ret;
 }
 #endif
+
+#if CAIRO_HAS_GL_SURFACE || CAIRO_HAS_GLESV2_SURFACE
+#include <cairo-gl.h>
+cairo_surface_t *
+cairo_gl_surface_create (cairo_device_t                *abstract_device,
+                        cairo_content_t         content,
+                        int                     width,
+                        int                     height)
+{
+    cairo_surface_t *ret;
+
+    _enter_trace ();
+
+    ret = DLCALL (cairo_gl_surface_create, abstract_device, content, width, height);
+
+    _emit_line_info ();
+    if (_write_lock ()) {
+       Object *obj = _create_surface (ret);
+
+       _trace_printf ("dict\n"
+                      "  /type /gl set\n"
+                      "  /content //%s set\n"
+                      "  /width %d set\n"
+                      "  /height %d set\n"
+                      "  surface dup /s%ld exch def\n",
+                      _content_to_string (content),
+                      width, height,
+                      obj->token);
+       obj->width = width;
+       obj->height = height;
+       obj->defined = TRUE;
+       _push_object (obj);
+       _write_unlock ();
+    }
+
+    _exit_trace ();
+    return ret;
+}
+
+cairo_surface_t *
+cairo_gl_surface_create_for_texture (cairo_device_t    *abstract_device,
+                                    cairo_content_t     content,
+                                    unsigned int        tex,
+                                    int                 width,
+                                    int                 height)
+{
+    cairo_surface_t *ret;
+
+    _enter_trace ();
+
+    ret = DLCALL (cairo_gl_surface_create_for_texture, abstract_device, content, tex, width, height);
+
+    _emit_line_info ();
+    if (_write_lock ()) {
+       Object *obj = _create_surface (ret);
+
+       _trace_printf ("dict\n"
+                      "  /type /gl set\n"
+                      "  /content //%s set\n"
+                      "  /width %d set\n"
+                      "  /height %d set\n"
+                      "  surface dup /s%ld exch def\n",
+                      _content_to_string (content),
+                      width, height,
+                      obj->token);
+       obj->width = width;
+       obj->height = height;
+       obj->defined = TRUE;
+       _push_object (obj);
+       _write_unlock ();
+    }
+
+    _exit_trace ();
+    return ret;
+}
+
+#if CAIRO_HAS_GLX_FUNCTIONS
+cairo_surface_t *
+cairo_gl_surface_create_for_window (cairo_device_t *device,
+                                   Window win,
+                                   int width, int height)
+{
+    cairo_surface_t *ret;
+
+    _enter_trace ();
+
+    ret = DLCALL (cairo_gl_surface_create_for_window, device, win, width, height);
+
+    _emit_line_info ();
+    if (_write_lock ()) {
+       Object *obj = _create_surface (ret);
+
+       _trace_printf ("dict\n"
+                      "  /type /gl set\n"
+                      "  /width %d set\n"
+                      "  /height %d set\n"
+                      "  surface dup /s%ld exch def\n",
+                      width, height,
+                      obj->token);
+       obj->width = width;
+       obj->height = height;
+       obj->defined = TRUE;
+       _push_object (obj);
+       _write_unlock ();
+    }
+
+    _exit_trace ();
+    return ret;
+}
+#endif
+
+#if CAIRO_HAS_WGL_FUNCTIONS
+cairo_surface_t *
+cairo_gl_surface_create_for_dc (cairo_device_t         *device,
+                               HDC                      dc,
+                               int                      width,
+                               int                      height)
+{
+    cairo_surface_t *ret;
+
+    _enter_trace ();
+
+    ret = DLCALL (cairo_gl_surface_create_for_dc, device, dc, width, height);
+
+    _emit_line_info ();
+    if (_write_lock ()) {
+       Object *obj = _create_surface (ret);
+
+       _trace_printf ("dict\n"
+                      "  /type /gl set\n"
+                      "  /width %d set\n"
+                      "  /height %d set\n"
+                      "  surface dup /s%ld exch def\n",
+                      width, height,
+                      obj->token);
+       obj->width = width;
+       obj->height = height;
+       obj->defined = TRUE;
+       _push_object (obj);
+       _write_unlock ();
+    }
+
+    _exit_trace ();
+    return ret;
+}
+#endif
+
+#if CAIRO_HAS_EGL_FUNCTIONS
+cairo_surface_t *
+cairo_gl_surface_create_for_egl (cairo_device_t        *device,
+                                EGLSurface      egl,
+                                int             width,
+                                int             height)
+{
+    cairo_surface_t *ret;
+
+    _enter_trace ();
+
+    ret = DLCALL (cairo_gl_surface_create_for_egl, device, egl, width, height);
+
+    _emit_line_info ();
+    if (_write_lock ()) {
+       Object *obj = _create_surface (ret);
+
+       _trace_printf ("dict\n"
+                      "  /type /gl set\n"
+                      "  /width %d set\n"
+                      "  /height %d set\n"
+                      "  surface dup /s%ld exch def\n",
+                      width, height,
+                      obj->token);
+       obj->width = width;
+       obj->height = height;
+       obj->defined = TRUE;
+       _push_object (obj);
+       _write_unlock ();
+    }
+
+    _exit_trace ();
+    return ret;
+}
+#endif
+#endif