Revamp the build system.

Quick summary of changes:

  - Move list of cairo source files out of src/Makefile.am and into
    src/Sources.mk,

  - Generate files src/Config.mk and src/Config.mk.win32 that choose
    the right set of source files and headers based on configured
    backends and features.  This drastically simplifies building
    using other build systems.  The src/Makefile.win32 file needs
    to be updated to reflect these changes.

  - Add README files to various directories,

  - Add toplevel HACKING file.
This commit is contained in:
Behdad Esfahbod 2008-09-02 20:20:49 -04:00
parent 5cb3e66305
commit 5926257770
50 changed files with 938 additions and 606 deletions

View file

@ -267,4 +267,11 @@ for overflow and will return NULL in that case.
In general, be wary of performing any arithmetic operations in an
argument to malloc. You should explicitly check for integer overflow
yourself in any more complex situations.
yourself in any more complex situations.
TODO
----
Write rules for common editors to use this style. Also cleanup/unify
the modlines in the source files.

View file

@ -42,7 +42,8 @@ $(srcdir)/ChangeLog:
after=$(srcdir)/ChangeLog.cache-$$nearest_tag..; \
$(MAKE) $(AM_MAKEFLAGS) $$before $$after && \
echo Creating $@ && \
{ cat $$after; echo; cat $$before; } > $@; \
{ 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 && \

165
HACKING Normal file
View file

@ -0,0 +1,165 @@
Hacking Cairo
=============
This is a high-level guide to how the cairo distribution is organized
and how to get started hacking on it. Make sure you read through the
file README before continuing.
Coding Style
------------
The easiest way to write code in the cairo style is to follow code close
to the place you are hacking, but if you want a written down set of
rules, see file CODING_STYLE.
Files for backends that depend on languages other than C (C++ or
Objective C for example) may use features specific to those languages.
For example, "//" comments are allowed, though discouraged, in those files.
Contact
-------
Various ways to get in touch with other cairo developers and maintainers
have been enumerated at:
http://cairographics.org/contact/
Most of that information is also reflected in the following sections.
Mailing Lists
-------------
There are various mailing lists that are useful when developing cairo
code. A complete list is always available at:
http://cairographics.org/lists/
It is recommended that cairo developers subscribe to all those lists.
The cairo list by itself generates much more traffic than the others
combined, so developers and contributors should not be intimidated by
the -commit and -bugs lists.
Bug Tracking System
-------------------
We use a standard bugzilla bug tracking system available at:
http://bugs.freedesktop.org/
For straight bug reports, it's best to report them there such that they
are not lost or forgotten. For discussion of new features or
complicated issues, use the mailing list.
IRC
---
It's a great idea to hang around the cairo IRC channel if you have any
interest in cairo. We use the #cairo channel on irc.freenode.net.
Make sure you introduce yourself if your nick is not easy to match to
the name you use on the mailing list.
Version Control System
----------------------
We use /git/ for version control. See:
http://cairographics.org/download/
TODO:
Add links to some git tutorials or better, right a few paragraphs
about how to use git to efficiently hack on cairo.
Build System
------------
We use the autotools build system with cairo, but with various
customizations and advanced features. Reading configure.in is your
best bet to understanding it, or just ask on IRC.
To bootstrap the build system run ./autogen.sh. After that the
regular "./configure; make; make install" sequence can be used.
There is limited support for a win32 build system.
See src/Makefile.win32.
ChangeLog
---------
We generate ChangeLog files automatically from the git commit log.
No manual ChangeLog writing is necessary.
Source Code
-----------
The library source code and headers live in the src/ directory.
See src/README for more information.
Regression Test Suite
---------------------
Cairo has a fairly extensive regression-testing suite. Indeed, without
these tests it would be impossible to make a cairo release without
introducing tens of regressions. We still manage to introduce
regressions with each release even with the hundreds of tests we already
have.
The regression test suite is located under the test/ directory.
See test/README for more information.
Performance Test Suite
----------------------
There is a small performance-testing suite for cairo.
The performance test suite is located under the perf/ directory.
See perf/README for more information.
Boilerplate
-----------
The cairo-boilerplate is a small private library used by the regression
and performance test suites. It includes the boilerplace code needed
to initialize various backends for the test suites, as well as allow
tweaking some of the internal workings of the backends for more testing.
The boilerplate code is localted under the boilerplate/ directory.
See boilerplate/README for more information.
Documentation
-------------
Cairo uses the gtk-doc system for reference API documentation.
The reference documentation is located under doc/public.
See doc/public/README for more information.
For more documentation including frequently asked questions, tutorials,
samples, roadmap, todo list, etc visit:
http://cairographics.org/documentation/
Some of those should gradually be moved to doc/.
Utilities
---------
There are a few useful utilities we have developed that are either
useful when writing code using cairo, or writing cairo, or useful in
general. These tools can be found under the util/ directory.
See util/README for more information.

View file

@ -66,6 +66,7 @@ EXTRA_DIST = \
COPYING \
COPYING-LGPL-2.1 \
COPYING-MPL-1.1 \
HACKING \
INSTALL \
NEWS \
PORTING_GUIDE \

View file

@ -51,7 +51,7 @@ Here are the steps to follow to create a new cairo release:
the following command will show each patch that has changed a
public header file since the given version:
find src/ -name '*.h' ! -name '*-private.h' ! -name 'cairoint.h' ! -name 'cairo-features-win32.h' | \
find src/ -name '*.h' ! -name '*-private.h' ! -name 'cairoint.h' ! -name 'cairo-*features*.h' | \
xargs git diff X.Y.Z.. --
4) Increment cairo_version_{minor|micro} in cairo-version.h:

View file

@ -1,4 +1,5 @@
TAGS
tags
*.lo
*.la
*.exe

View file

@ -330,7 +330,8 @@ AC_DEFUN([CAIRO_BACKEND_ENABLE],
CAIRO_LIBS="$$1_NONPKGCONFIG_LIBS$$1_LIBS$CAIRO_LIBS"
CAIRO_NONPKGCONFIG_CFLAGS="$$1_NONPKGCONFIG_CFLAGS$CAIRO_NONPKGCONFIG_CFLAGS"
CAIRO_NONPKGCONFIG_LIBS="$$1_NONPKGCONFIG_LIBS$CAIRO_NONPKGCONFIG_LIBS"
CAIRO_CONFIG_COMMANDS(m4_bpatsubst(src/cairo-$1.pc,_,-),
m4_define([cairo_backend_pc], m4_bpatsubst(src/cairo-$1.pc,_,-))
AC_CONFIG_FILES(cairo_backend_pc():src/cairo-backend.pc.in,
[sed \
-e "s,@backend_name@,$1,g" \
-e "s,@Backend_Name@,$2,g" \
@ -338,29 +339,62 @@ AC_DEFUN([CAIRO_BACKEND_ENABLE],
-e "s,@BACKEND_REQUIRES@,$$1_REQUIRES,g" \
-e "s%@BACKEND_NONPKGCONFIG_LIBS@%$$1_NONPKGCONFIG_LIBS%g" \
-e "s,@BACKEND_NONPKGCONFIG_CFLAGS@,$$1_NONPKGCONFIG_CFLAGS,g" \
-e "s,@prefix@,$prefix,g" \
-e "s,@exec_prefix@,$exec_prefix,g" \
-e "s,@libdir@,$libdir,g" \
-e "s,@includedir@,$includedir,g" \
-e "s,@VERSION@,$VERSION,g" \
$srcdir/src/cairo-backend.pc.in
-i ]cairo_backend_pc()[ ||
AC_MSG_ERROR(failed to update cairo_backend_pc())
],
[
$1_BASE='$$1_BASE'
$1_REQUIRES='$$1_REQUIRES'
$1_NONPKGCONFIG_LIBS='$$1_NONPKGCONFIG_LIBS'
$1_NONPKGCONFIG_CFLAGS='$$1_NONPKGCONFIG_CFLAGS'
prefix='$prefix'
exec_prefix='$exec_prefix'
libdir='$libdir'
includedir='$includedir'
VERSION='$VERSION'
])
else
CAIRO_NO_FEATURES="$4 $CAIRO_NO_FEATURES"
# Collect list of all supported but disabled features
AS_IF([test "x$5" = xno],,[
CAIRO_NO_FEATURES="$4 $CAIRO_NO_FEATURES"
])
fi
fi
AM_CONDITIONAL(CAIRO_HAS_$4, test "x$use_$1" = xyes)
# Collect list of all supported features and cairo headers
AS_IF([test "x$5" = xno],[
CAIRO_CONFIG_AMAKE=$CAIRO_CONFIG_AMAKE'
unsupported_cairo_headers += $(cairo_$1_headers)'
CAIRO_CONFIG_WIN32=$CAIRO_CONFIG_WIN32'
unsupported_cairo_headers += $(cairo_$1_headers)'
],[
CAIRO_SUPPORTED_FEATURES="$4 $CAIRO_SUPPORTED_FEATURES"
CAIRO_CONFIG_AMAKE=$CAIRO_CONFIG_AMAKE'
supported_cairo_headers += $(cairo_$1_headers)'
CAIRO_CONFIG_WIN32=$CAIRO_CONFIG_WIN32'
supported_cairo_headers += $(cairo_$1_headers)'
])
# Collect list of all/enabled cairo source files
CAIRO_CONFIG_AMAKE=$CAIRO_CONFIG_AMAKE'
all_cairo_pkgconf += $(cairo_$1_pkgconf)
all_cairo_headers += $(cairo_$1_headers)
all_cairo_private += $(cairo_$1_private)
all_cairo_sources += $(cairo_$1_sources)
if CAIRO_HAS_$4
enabled_cairo_pkgconf += $(cairo_$1_pkgconf)
enabled_cairo_headers += $(cairo_$1_headers)
enabled_cairo_private += $(cairo_$1_private)
enabled_cairo_sources += $(cairo_$1_sources)
endif
'
CAIRO_CONFIG_WIN32=$CAIRO_CONFIG_WIN32'
all_cairo_pkgconf += $(cairo_$1_pkgconf)
all_cairo_headers += $(cairo_$1_headers)
all_cairo_private += $(cairo_$1_private)
all_cairo_sources += $(cairo_$1_sources)
ifeq ($(CAIRO_HAS_$4),1)
enabled_cairo_pkgconf += $(cairo_$1_pkgconf)
enabled_cairo_headers += $(cairo_$1_headers)
enabled_cairo_private += $(cairo_$1_private)
enabled_cairo_sources += $(cairo_$1_sources)
endif
'
# Collect warning message for enabled unsupported backends
AS_IF([test "x$use_[]$1" = xyes && test "x$5" = xno],[
CAIRO_WARNING_MESSAGE="$CAIRO_WARNING_MESSAGE
*** The $2 backend is still under active development and
@ -374,24 +408,31 @@ AC_DEFUN([CAIRO_BACKEND_ENABLE],
CAIRO_WARNING_MESSAGE=""
CAIRO_FEATURES=""
CAIRO_NO_FEATURES=""
CAIRO_SUPPORTED_FEATURES=""
CAIRO_REQUIRES=""
CAIRO_NONPKGCONFIG_CFLAGS=""
CAIRO_NONPKGCONFIG_LIBS="$LIBM"
CAIRO_LDADD=""
CAIRO_CFLAGS=$CAIRO_NONPKGCONFIG_CFLAGS
CAIRO_LIBS=$CAIRO_NONPKGCONFIG_LIBS
CAIRO_CONFIG_AMAKE='# Generated by configure. Do not edit.
dnl ===========================================================================
include $(top_srcdir)/src/Sources.mk
PIXMAN_VERSION="0.11.2"
PIXMAN_REQUIRES="pixman-1 >= $PIXMAN_VERSION"
PKG_CHECK_MODULES(pixman, $PIXMAN_REQUIRES, ,
[AC_MSG_ERROR([pixman >= $PIXMAN_VERSION is required
(http://cairographics.org/releases/)])])
CAIRO_REQUIRES="$PIXMAN_REQUIRES $CAIRO_REQUIRES"
CAIRO_CFLAGS="$pixman_CFLAGS $CAIRO_CFLAGS"
CAIRO_LIBS="$pixman_LIBS $CAIRO_LIBS"
enabled_cairo_pkgconf = cairo.pc
enabled_cairo_headers = $(cairo_headers)
enabled_cairo_private = $(cairo_private)
enabled_cairo_sources = $(cairo_sources)
all_cairo_pkgconf =
all_cairo_headers = $(cairo_headers)
all_cairo_private = $(cairo_private)
all_cairo_sources = $(cairo_sources)
supported_cairo_headers = $(cairo_headers)
unsupported_cairo_headers =
'
CAIRO_CONFIG_WIN32=$CAIRO_CONFIG_AMAKE'
enabled_cairo_headers += $(_cairo_nodist_headers) $(_cairo_extra_headers)
'
dnl ===========================================================================
@ -792,6 +833,23 @@ AM_CONDITIONAL(CAIRO_CAN_TEST_SVG_SURFACE, test "x$test_svg" = "xyes")
AC_SUBST(LIBRSVG_CFLAGS)
AC_SUBST(LIBRSVG_LIBS)
dnl ===========================================================================
dnl XXX make this a private feature?
CAIRO_BACKEND_ENABLE(test_surfaces, test surfaces, test-surfaces, TEST_SURFACES, no)
dnl ===========================================================================
PIXMAN_VERSION="0.11.2"
PIXMAN_REQUIRES="pixman-1 >= $PIXMAN_VERSION"
PKG_CHECK_MODULES(pixman, $PIXMAN_REQUIRES, ,
[AC_MSG_ERROR([pixman >= $PIXMAN_VERSION is required
(http://cairographics.org/releases/)])])
CAIRO_REQUIRES="$PIXMAN_REQUIRES $CAIRO_REQUIRES"
CAIRO_CFLAGS="$pixman_CFLAGS $CAIRO_CFLAGS"
CAIRO_LIBS="$pixman_LIBS $CAIRO_LIBS"
dnl ===========================================================================
dnl Build the external converter if we have any of the test backends
AM_CONDITIONAL(BUILD_ANY2PPM,
@ -1013,18 +1071,6 @@ AM_CONDITIONAL(CAIRO_HAS_LCOV, test "x$cairo_has_lcov" = "xyes")
dnl ===========================================================================
AC_ARG_ENABLE(test-surfaces,
AS_HELP_STRING([--enable-test-surfaces],
[Add backends for more test suite coverage (no additional public functionality)]),
[use_test_surfaces=$enableval], [use_test_surfaces=no])
AM_CONDITIONAL(CAIRO_HAS_TEST_SURFACES, test "x$use_test_surfaces" = "xyes")
if test "x$use_test_surfaces" = "xyes"; then
AC_DEFINE(CAIRO_HAS_TEST_SURFACES, 1, [define in the extra test surface have been built into cairo for the test suite])
fi
dnl ===========================================================================
AC_ARG_ENABLE(some-floating-point,
AS_HELP_STRING([--disable-some-floating-point],
[Disable certain code paths that rely heavily on double precision
@ -1048,6 +1094,12 @@ fi
dnl ===========================================================================
CAIRO_CONFIG_COMMANDS([$srcdir/src/Config.mk],
[echo "$CAIRO_CONFIG_AMAKE"],
[CAIRO_CONFIG_AMAKE='$CAIRO_CONFIG_AMAKE'])
CAIRO_CONFIG_COMMANDS([$srcdir/src/Config.mk.win32],
[echo "$CAIRO_CONFIG_WIN32"],
[CAIRO_CONFIG_WIN32='$CAIRO_CONFIG_WIN32'])
CAIRO_CONFIG_COMMANDS([src/cairo-features.h],
[
echo '/* Generated by configure. Do not edit. */'
@ -1067,21 +1119,21 @@ CAIRO_CONFIG_COMMANDS([src/cairo-features.h],
CAIRO_FEATURES='$CAIRO_FEATURES'
CAIRO_NO_FEATURES='$CAIRO_NO_FEATURES'
])
CAIRO_CONFIG_COMMANDS([src/cairo-no-features.h],
CAIRO_CONFIG_COMMANDS([src/cairo-supported-features.h],
[
echo '/* Generated by configure. Do not edit. */'
echo '#ifndef CAIRO_NO_FEATURES_H'
echo '#define CAIRO_NO_FEATURES_H'
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_NO_FEATURES; do
for FEATURE in $CAIRO_SUPPORTED_FEATURES; do
echo "#define CAIRO_HAS_$FEATURE 1"
done
echo ''
echo '#endif'
],[
CAIRO_NO_FEATURES='$CAIRO_NO_FEATURES'
CAIRO_SUPPORTED_FEATURES='$CAIRO_SUPPORTED_FEATURES'
])
AC_CONFIG_FILES([
Makefile

View file

@ -1,52 +0,0 @@
PRIVATE_TEST_HFILES = \
cairo-analysis-surface-private.h \
cairo-arc-private.h \
cairo-atomic-private.h \
cairo-cache-private.h \
cairo-clip-private.h \
cairo-compiler-private.h \
cairo-fixed-private.h \
cairo-fixed-type-private.h \
cairo-freelist-private.h \
cairo-ft-private.h \
cairo-glitz-private.h \
cairo-gstate-private.h \
cairo-hash-private.h \
cairo-malloc-private.h \
cairo-meta-surface-private.h \
cairo-mutex-impl-private.h \
cairo-mutex-list-private.h \
cairo-mutex-private.h \
cairo-mutex-type-private.h \
cairo-os2-private.h \
cairo-output-stream-private.h \
cairo-paginated-private.h \
cairo-paginated-surface-private.h \
cairo-path-fixed-private.h \
cairo-path-private.h \
cairo-pdf-operators-private.h \
cairo-pdf-surface-private.h \
cairo-private.h \
cairo-ps-surface-private.h \
cairo-quartz-private.h \
cairo-reference-count-private.h \
cairo-region-private.h \
cairo-scaled-font-private.h \
cairo-scaled-font-subsets-private.h \
cairo-skiplist-private.h \
cairo-surface-fallback-private.h \
cairo-surface-private.h \
cairo-svg-surface-private.h \
cairo-truetype-subset-private.h \
cairo-type1-private.h \
cairo-type3-glyph-surface-private.h \
cairo-types-private.h \
cairo-user-font-private.h \
cairo-wideint-private.h \
cairo-wideint-type-private.h \
cairo-win32-private.h \
cairo-xlib-private.h \
cairo-xlib-surface-private.h \
cairo-xlib-xrender-private.h \
cairo-features-win32.h \
cairoint.h

View file

@ -16,31 +16,15 @@ DOC_SOURCE_DIR=../../src
HFILE_GLOB=$(top_srcdir)/src/cairo-*.h
CFILE_GLOB=$(top_srcdir)/src/cairo-*.c $(top_srcdir)/src/cairo-*.h
include $(srcdir)/Headers.mk
UNSUPPORTED_HFILES= \
cairo-atsui.h \
cairo-beos.h \
cairo-directfb.h \
cairo-glitz.h \
cairo-os2.h \
cairo-xcb.h \
cairo-xcb-xrender.h
include $(top_srcdir)/src/Config.mk
# Headers to ignore
IGNORE_HFILES= \
$(PRIVATE_TEST_HFILES) \
$(UNSUPPORTED_HFILES)
Headers.mk:
( echo "PRIVATE_TEST_HFILES = \\"; \
find $(top_srcdir)/src \
-name '*-private.h' | \
sed 's@.*/@ @; s@$$@ \\@' | \
LANG=C sort; \
echo ' cairo-features-win32.h \'; \
echo ' cairoint.h' ) > $@.tmp
mv $@.tmp $@
IGNORE_HFILES= \
cairo-features.h \
cairo-features-win32.h \
$(all_cairo_private) \
$(unsupported_cairo_headers) \
$(NULL)
# CFLAGS and LDFLAGS for compiling scan program. Only needed
# if $(DOC_MODULE).types is non-empty.

37
doc/public/README Normal file
View file

@ -0,0 +1,37 @@
Cairo Reference Documentation
=============================
The API documentation is generated using gtk-doc.
Building
--------
The documentation is not built by default. To build it you need to
configure with gtk-doc enabled (--enable-gtk-doc), and run:
make doc
Adding New API
--------------
When adding new symbols and macros to the public API, modify
cairo-section.txt and add new symbols to the right place.
When adding whole new features, you also need to modify cairo-docs.xml
and add a new file under tmpl/. Beware that the files are tmpl/ are
both manually edited AND modified by gtk-doc, gathering documentation
stub from source files.
Tests
-----
There are some tests in this directory, ensuring proper documentation
syntax as well as checking that all public symbols are fully documented.
After adding any new API, just run:
make check

2
perf/.gitignore vendored
View file

@ -1,3 +1,5 @@
TAGS
tags
cairo-perf
cairo-perf-diff-files
valgrind-log

5
src/.gitignore vendored
View file

@ -8,8 +8,10 @@ Makefile.in
*.lo
*.loT
*.pc
Config.mk
Config.mk.win32
cairo-features.h
cairo-no-features.h
cairo-supported-features.h
cairo.def
*.i
*.s
@ -24,4 +26,5 @@ cairo.def
*~
.*.sw?
TAGS
tags
check-has-hidden-symbols.i

View file

@ -1,348 +1,60 @@
backend_pkgconfigs =
include $(srcdir)/Config.mk
cairo_base_headers = cairo.h
EXTRA_DIST =
CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
BUILT_SOURCES =
cairo_base_sources = \
cairo.c \
cairo.h \
cairo-private.h \
cairo-arc.c \
cairo-arc-private.h \
cairo-array.c \
cairo-atomic.c \
cairo-atomic-private.h \
cairo-base85-stream.c \
cairo-bentley-ottmann.c \
cairo-cache.c \
cairo-clip.c \
cairo-clip-private.h \
cairo-color.c \
cairo-compiler-private.h \
cairo-debug.c \
cairo-fixed.c \
cairo-font-face.c \
cairo-font-options.c \
cairo-freelist.c \
cairo-freelist-private.h \
cairo-gstate.c \
cairo-gstate-private.h \
cairo-hash.c \
cairo-hash-private.h \
cairo-hull.c \
cairo-image-surface.c \
cairo-lzw.c \
cairo-misc.c \
cairo-malloc-private.h \
cairo-matrix.c \
cairo-mutex.c \
cairo-mutex-private.h \
cairo-mutex-impl-private.h \
cairo-mutex-type-private.h \
cairo-path.c \
cairo-path-private.h \
cairo-path-bounds.c \
cairo-path-fill.c \
cairo-path-fixed.c \
cairo-path-fixed-private.h \
cairo-path-stroke.c \
cairo-pattern.c \
cairo-pen.c \
cairo-polygon.c \
cairo-rectangle.c \
cairo-reference-count-private.h \
cairo-region.c \
cairo-region-private.h \
cairo-scaled-font.c \
cairo-scaled-font-private.h \
cairo-skiplist.c \
cairo-skiplist-private.h \
cairo-slope.c \
cairo-spline.c \
cairo-stroke-style.c \
cairo-surface.c \
cairo-surface-fallback.c \
cairo-surface-fallback-private.h \
cairo-surface-private.h \
cairo-traps.c \
cairo-user-font.c \
cairo-user-font-private.h \
cairo-unicode.c \
cairo-output-stream.c \
cairo-output-stream-private.h \
cairo-wideint.c \
cairo-wideint-private.h \
cairo-wideint-type-private.h \
cairo-meta-surface.c \
cairo-meta-surface-private.h \
cairo-paginated-private.h \
cairo-paginated-surface.c \
cairo-paginated-surface-private.h \
cairo-analysis-surface.c \
cairo-analysis-surface-private.h \
cairo-version.c \
cairo-version.h \
cairoint.h
cairo_all_sources = $(cairo_base_sources) $(cairo_base_headers)
cairo_headers = $(cairo_base_headers)
cairo_sources = $(cairo_base_sources)
font_subset_sources_base = \
cairo-cff-subset.c \
cairo-truetype-subset.c \
cairo-type1-fallback.c \
cairo-type1-private.h \
cairo-truetype-subset-private.h \
cairo-type3-glyph-surface.c \
cairo-type3-glyph-surface-private.h \
cairo-scaled-font-subsets.c \
cairo-scaled-font-subsets-private.h
cairo_all_sources += $(font_subset_sources_base)
font_subset_sources_ft = cairo-type1-subset.c
cairo_all_sources += $(font_subset_sources_ft)
font_subset_sources = $(font_subset_sources_base)
if CAIRO_HAS_FT_FONT
font_subset_sources += $(font_subset_sources_ft)
endif
pdf_operators_sources = cairo-pdf-operators.c cairo-pdf-operators-private.h
ps_headers = cairo-ps.h
ps_sources = cairo-ps-surface.c cairo-ps-surface-private.h
cairo_all_sources += $(ps_headers) $(ps_sources)
if CAIRO_HAS_PS_SURFACE
libcairo_pdf_operators_sources = $(pdf_operators_sources)
libcairo_font_subset_sources = $(font_subset_sources)
cairo_headers += $(ps_headers)
cairo_sources += $(ps_sources)
backend_pkgconfigs += cairo-ps.pc
endif
pdf_headers = cairo-pdf.h
pdf_sources = cairo-pdf-surface.c cairo-pdf-surface-private.h \
cairo-deflate-stream.c
cairo_all_sources += $(pdf_headers) $(pdf_sources)
if CAIRO_HAS_PDF_SURFACE
libcairo_pdf_operators_sources = $(pdf_operators_sources)
libcairo_font_subset_sources = $(font_subset_sources)
cairo_headers += $(pdf_headers)
cairo_sources += $(pdf_sources)
backend_pkgconfigs += cairo-pdf.pc
endif
png_sources = cairo-png.c
cairo_all_sources += $(png_sources)
if CAIRO_HAS_PNG_FUNCTIONS
cairo_sources += $(png_sources)
backend_pkgconfigs += cairo-png.pc
endif
svg_headers = cairo-svg.h
svg_sources = cairo-svg-surface.c cairo-svg-surface-private.h
cairo_all_sources += $(svg_headers) $(svg_sources)
if CAIRO_HAS_SVG_SURFACE
libcairo_font_subset_sources = $(font_subset_sources)
cairo_headers += $(svg_headers)
cairo_sources += $(svg_sources)
backend_pkgconfigs += cairo-svg.pc
endif
cairo_sources += $(libcairo_pdf_operators_sources)
cairo_sources += $(libcairo_font_subset_sources)
test_sources = test-fallback-surface.c test-fallback-surface.h \
test-meta-surface.c test-meta-surface.h \
test-paginated-surface.c test-paginated-surface.h
cairo_all_sources += $(test_sources)
if CAIRO_HAS_TEST_SURFACES
cairo_sources += $(test_sources)
endif
xlib_headers = cairo-xlib.h
xlib_sources = cairo-xlib-surface.c \
cairo-xlib-surface-private.h \
cairo-xlib-display.c \
cairo-xlib-screen.c \
cairo-xlib-visual.c \
cairo-xlib-private.h \
cairo-xlib-xrender-private.h
cairo_all_sources += $(xlib_headers) $(xlib_sources)
if CAIRO_HAS_XLIB_SURFACE
cairo_headers += $(xlib_headers)
cairo_sources += $(xlib_sources)
backend_pkgconfigs += cairo-xlib.pc
endif
xlib_xrender_headers = cairo-xlib-xrender.h
cairo_all_sources += $(xlib_xrender_headers)
if CAIRO_HAS_XLIB_XRENDER_SURFACE
cairo_headers += $(xlib_xrender_headers)
backend_pkgconfigs += cairo-xlib-xrender.pc
endif
xcb_headers = cairo-xcb.h cairo-xcb-xrender.h
xcb_sources = cairo-xcb-surface.c
cairo_all_sources += $(xcb_headers) $(xcb_sources)
if CAIRO_HAS_XCB_SURFACE
cairo_headers += $(xcb_headers)
cairo_sources += $(xcb_sources)
backend_pkgconfigs += cairo-xcb.pc
endif
quartz_headers = cairo-quartz.h
quartz_sources = cairo-quartz-surface.c cairo-quartz-image-surface.c cairo-quartz-private.h
cairo_all_sources += $(quartz_headers) $(quartz_sources)
if CAIRO_HAS_QUARTZ_SURFACE
cairo_headers += $(quartz_headers)
cairo_sources += $(quartz_sources)
backend_pkgconfigs += cairo-quartz.pc
endif
if CAIRO_HAS_QUARTZ_IMAGE_SURFACE
cairo_headers += cairo-quartz-image.h
backend_pkgconfigs += cairo-quartz-image.pc
endif
quartz_font_sources = cairo-quartz-font.c
cairo_all_sources += $(quartz_font_sources)
if CAIRO_HAS_QUARTZ_FONT
cairo_sources += $(quartz_font_sources)
backend_pkgconfigs += cairo-quartz-font.pc
endif
os_win32_sources = cairo-win32.c
cairo_all_sources += $(os_win32_sources)
if OS_WIN32
cairo_sources += $(os_win32_sources)
export_symbols = -export-symbols cairo.def
cairo_def_dependency = cairo.def
endif
win32_headers = cairo-win32.h
win32_sources = cairo-win32-surface.c cairo-win32-printing-surface.c cairo-win32-private.h
cairo_all_sources += $(win32_headers) $(win32_sources)
if CAIRO_HAS_WIN32_SURFACE
cairo_headers += $(win32_headers)
cairo_sources += $(win32_sources)
backend_pkgconfigs += cairo-win32.pc
endif
win32_font_sources = cairo-win32-font.c
cairo_all_sources += $(win32_font_sources)
if CAIRO_HAS_WIN32_FONT
cairo_sources += $(win32_font_sources)
backend_pkgconfigs += cairo-win32-font.pc
endif
os2_headers = cairo-os2.h
os2_sources = cairo-os2-surface.c cairo-os2-private.h
cairo_all_sources += $(os2_headers) $(os2_sources)
if CAIRO_HAS_OS2_SURFACE
cairo_headers += $(os2_headers)
cairo_sources += $(os2_sources)
backend_pkgconfigs += cairo-os2.pc
endif
beos_headers = cairo-beos.h
beos_sources = cairo-beos-surface.cpp
cairo_all_sources += $(beos_headers) $(beos_sources)
if CAIRO_HAS_BEOS_SURFACE
cairo_headers += $(beos_headers)
# automake is stupid enough to always use c++ linker if we enable the
# following line, even if beos surface is not enabled. Disable it for now.
#cairo_sources += $(beos_sources)
backend_pkgconfigs += cairo-beos.pc
endif
glitz_headers = cairo-glitz.h
glitz_sources = cairo-glitz-surface.c cairo-glitz-private.h
cairo_all_sources += $(glitz_headers) $(glitz_sources)
if CAIRO_HAS_GLITZ_SURFACE
cairo_headers += $(glitz_headers)
cairo_sources += $(glitz_sources)
backend_pkgconfigs += cairo-glitz.pc
endif
directfb_headers = cairo-directfb.h
directfb_sources = cairo-directfb-surface.c
cairo_all_sources += $(directfb_headers) $(directfb_sources)
if CAIRO_HAS_DIRECTFB_SURFACE
cairo_headers += $(directfb_headers)
cairo_sources += $(directfb_sources)
backend_pkgconfigs += cairo-directfb.pc
endif
ft_headers = cairo-ft.h
ft_sources = cairo-ft-font.c cairo-ft-private.h
cairo_all_sources += $(ft_headers) $(ft_sources)
if CAIRO_HAS_FT_FONT
cairo_headers += $(ft_headers)
cairo_sources += $(ft_sources)
backend_pkgconfigs += cairo-ft.pc
endif
# These names match automake style variable definition conventions so
# without these lines, automake will complain during the handling of
# the libcairo_la_LIBADD below. (The INCLUDES is an autoconf only
# term and automake does not care about it)
FONTCONFIG_LIBS=@FONTCONFIG_LIBS@
XRENDER_LIBS=@XRENDER_LIBS@
cairoincludedir = $(includedir)/cairo
cairoinclude_HEADERS = \
cairo-deprecated.h \
$(top_srcdir)/cairo-version.h \
$(cairo_headers)
nodist_cairoinclude_HEADERS = \
cairo-features.h
lib_LTLIBRARIES = libcairo.la
# source files that cannot be passed to compiler directly.
# mostly when they depend recursively on cairoint.h. that is,
# cairoint.h includes them in the middle.
cairo_special_sources = \
cairo-cache-private.h \
cairo-fixed-private.h \
cairo-fixed-type-private.h \
cairo-mutex-list-private.h \
cairo-types-private.h
libcairo_la_SOURCES = \
$(cairo_sources) \
$(cairo_special_sources)
cairo_all_source_files = \
$(cairo_all_sources) \
$(cairo_special_sources)
libcairo_la_LDFLAGS = -version-info $(CAIRO_LIBTOOL_VERSION_INFO) -no-undefined $(export_symbols)
libcairo_la_CFLAGS = -I$(srcdir) $(CAIRO_CFLAGS)
libcairo_la_LIBADD = $(CAIRO_LIBS) $(noinst_LTLIBRARIES) $(CAIRO_LDADD)
libcairo_la_DEPENDENCIES = $(cairo_def_dependency) $(noinst_LTLIBRARIES)
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = cairo.pc $(backend_pkgconfigs)
DISTCLEANFILES = $(backend_pkgconfigs)
EXTRA_DIST = cairo-backend.pc.in cairo-features-win32.h
$(backend_pkgconfigs): $(top_srcdir)/configure
cd $(top_builddir) && ./config.status --recheck
EXTRA_DIST += cairo-features-win32.h Config.mk.win32
MAINTAINERCLEANFILES += cairo-features-win32.h Config.mk.win32
$(top_builddir)/config.h: $(top_srcdir)/config.h.in
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) config.h
DISTCLEANFILES += cairo-features.h cairo-no-features.h
cairo-features.h cairo-no-features.h:
all_cairo_files = \
$(cairo_all_headers) \
$(cairo_all_private) \
$(cairo_all_sources) \
$(NULL)
cairoincludedir = $(includedir)/cairo
cairoinclude_HEADERS = $(enabled_cairo_headers)
lib_LTLIBRARIES = libcairo.la
libcairo_la_SOURCES = \
$(enabled_cairo_headers) \
$(enabled_cairo_private) \
$(enabled_cairo_sources) \
$(NULL)
libcairo_la_LDFLAGS = -version-info $(CAIRO_LIBTOOL_VERSION_INFO) -no-undefined $(export_symbols)
libcairo_la_CFLAGS = -I$(srcdir) $(CAIRO_CFLAGS)
libcairo_la_LIBADD = $(CAIRO_LIBS) $(CAIRO_LDADD)
libcairo_la_DEPENDENCIES = $(cairo_def_dependency)
# Special headers
cairoinclude_HEADERS += $(top_srcdir)/cairo-version.h
nodist_cairoinclude_HEADERS = cairo-features.h
libcairo_la_SOURCES += cairo-version.h cairo-features.h
BUILT_SOURCES += cairo-features.h cairo-supported-features.h
DISTCLEANFILES += cairo-features.h cairo-supported-features.h
cairo-features.h cairo-supported-features.h:
cd $(top_builddir) && ./config.status src/$@
CLEANFILES = cairo.def
cairo.def: $(cairo_headers) cairo-features.h
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = $(enabled_cairo_pkgconf)
CLEANFILES += cairo.def
cairo.def: cairo-features.h $(enabled_cairo_headers)
@echo Generating $@
@(echo EXPORTS; \
(cd $(srcdir); cat $(cairo_headers) || echo 'cairo_ERROR ()' ) | \
(cd $(srcdir); cat $(enabled_cairo_headers) || echo 'cairo_ERROR ()' ) | \
grep -v -E '^# *include' | \
( cat cairo-features.h - | $(CPP) - || echo 'cairo_ERROR ()' ) | \
grep -E '^cairo_.* \(' | \
@ -352,40 +64,27 @@ cairo.def: $(cairo_headers) cairo-features.h
) >$@
@ ! grep -q cairo_ERROR $@ || ($(RM) $@; false)
install-data-local:
@if test -f "$(DESTDIR)$(includedir)/cairo.h" || test -f "$(DESTDIR)$(includedir)/cairo-features.h" ; then \
echo "****************************************************************" ; \
echo "*** Error: Old headers found. You should remove the following" ; \
echo "*** files and then type 'make install' again." ; \
ls $(includedir)/cairo*.h ; \
echo "****************************************************************" ; \
false ; \
fi
TESTS_ENVIRONMENT = srcdir="$(srcdir)" MAKE="$(MAKE)" cairo_all_source_files="$(cairo_all_source_files)"
TESTS_ENVIRONMENT = srcdir="$(srcdir)" MAKE="$(MAKE)" all_cairo_files="$(all_cairo_files)" enabled_cairo_files="$(enabled_cairo_files)"
TESTS = check-def.sh check-plt.sh check-headers.sh check-cairoint.sh check-doc-syntax.sh
EXTRA_DIST += $(TESTS) check-has-hidden-symbols.c
DISTCLEANFILES += check-has-hidden-symbols.i
# Delete intermediate files as well
clean-local:
-${FIND} . -name '*.[is]' -print | ${XARGS} ${RM}
# The pre-processed result is used by check-{def,plt}.sh to determine whether
# cairo has been compiled with symbol hiding.
.c.i: $(cairoinclude_HEADERS) $(nodist_cairoinclude_HEADERS) cairoint.h $(top_builddir)/config.h
$(CPP) -DHAVE_CONFIG_H -I$(top_builddir) -I. $(libcairo_la_CFLAGS) $< -o $@
CLEANFILES += *.i *.s
SPARSE = sparse
sparse:
@status=true; for f in $(cairo_sources); do \
@status=true; for f in $(enabled_cairo_sources); do \
echo sparse $$f; \
$(SPARSE) -I$(top_builddir) $(libcairo_la_CFLAGS) -DHAVE_CONFIG_H $$f || status=false; \
done; $$status
SPLINT = splint -badflag
splint:
@status=true; for f in $(cairo_sources); do \
@status=true; for f in $(enabled_cairo_sources); do \
test "$$f" = "`echo "$$f" | sed 's/[.]h$$//'`" || continue; \
echo sparse $$f; \
$(SPLINT) -I$(top_builddir) $(libcairo_la_CFLAGS) -DHAVE_CONFIG_H $$f || status=false; \
@ -394,7 +93,7 @@ splint:
UNO = uno
uno:
@cpp_flags=`echo $(libcairo_la_CFLAGS) | sed 's/\(-I.*\) /\1 /g'`; \
files=`echo $(cairo_sources) | sed 's/[^ ]*\.h//g'`; \
files=`echo $(enabled_cairo_sources) | sed 's/[^ ]*\.h//g'`; \
$(UNO) -I$(top_builddir) $$cpp_flags -DHAVE_CONFIG_H -U__GNUC__ $$files
EXTRA_DIST += Makefile.win32

View file

@ -1,8 +1,9 @@
SUBMAKEFILE = 1
include ../Makefile.win32
include Config.mk.win32
srcdir = `pwd`
SOURCES = \

58
src/README Normal file
View file

@ -0,0 +1,58 @@
Cairo Library Source Code
=========================
This directory contains the source code to the cairo library.
Source Code Listing
-------------------
The canonical list of source files is the file Source.mk. See that
file for how it works.
New Backends
------------
The rule of the thumb for adding new backends is to see how other
backends are integrated. Pick one of the simpler, unsupported, backends
and search the entire tree for it, and go from there.
To add new backends you need to basically:
* Modify $(top_srcdir)/configure.in to add checks for your backend.
* Modify Sources.mk to add source files for your backend,
* Modify $(top_srcdir)/boilerplate/ to add boilerplate code for
testing your new backend.
New API
-------
After adding new API, run "make check" in this directory and fix any
reported issues. Also add new API to the right location in
$(top_srcdir)/doc/public/cairo-sections.txt and run "make check"
in $(top_builddir)/doc/public to make sure that any newly added
documentation is correctly hooked up.
Do not forget to add tests for the new API. See next section.
Tests
-----
There are some tests in this directory that check the source code and
the build for various issues. The tests are very quick to run, and
particularly should be run after any documentation or API changes. It
does not hurt to run them after any source modification either. Run
them simply by calling:
make check
There are also extensive regression tests in $(top_srcdir)/test. It is
a good idea to run that test suite for any changes made to the source
code. Moreover, for any new feature, API, or bug fix, new tests should
be added to the regression test suite to test the new code.

246
src/Sources.mk Normal file
View file

@ -0,0 +1,246 @@
# Sources.mk
#
# This file is the canonical location listing all the source files used
# to build the cairo library. Every source file is categorized as one of:
#
# * public header file
# * private header file (must end in -private.h except for cairoint.h)
# * source code file
#
# Every source file should be specified exactly once, grouped with the
# backend/feature that uses the source file. If more than one
# backend/feature use the file (like pdf_operators or font_subset files),
# the files should be appended to to the base cairo files, and the code
# inside them enabled/disabled using C preprocessor macros defined in
# cairoint.h. See how pdf_operators or font_subset are handled.
#
# The sources are picked up according to the configured backends/features
# by the generated file Config.mk or Config.mk.win32.
#
# These are a few special source files. Those are not included in this
# file to not confuse build systems. Each build system must handle them
# separately. These files include:
#
# * cairo-features.h:
# This file is generated by configure and includes macros signifying
# which backends/features are enabled. This file should be installed
# like other public headers, but should NOT be distributed in the
# cairo distribution.
#
# * cairo-features-win32.h:
# This is a dummy file for use as cairo-featurs.h when building on
# win32. This file is not used during the build and should NOT be
# installed.
#
# * cairo-version.h:
# This is a dummy header file used during the build, but it should
# NOT be installed. Its sole purpose is to make sure changes in the
# cairo version do not trigger a full rebuild of the library, but
# just the functions actually using the version information.
#
# * $(top_srcdir)/cairo-version.h:
# This is the real file holding the cairo version number. This file
# should be installed like other public headers. This is used during
# the build by cairo-version.c only.
#
# * cairo-supported-features.h:
# This file is generated by configure and includes macros signifying
# all supported supported backends/features. This is used by gtk-doc
# to generate documentation for all those macros, enabled or not.
# This file is NOT used during the build of the library and should NOT
# be installed or distributed.
#
# Please follow the strict syntax of this file, including keeping file
# lists sorted.
#
cairo_headers = cairo.h cairo-deprecated.h
cairo_private = \
cairoint.h \
cairo-analysis-surface-private.h \
cairo-arc-private.h \
cairo-atomic-private.h \
cairo-cache-private.h \
cairo-clip-private.h \
cairo-compiler-private.h \
cairo-fixed-private.h \
cairo-fixed-type-private.h \
cairo-freelist-private.h \
cairo-gstate-private.h \
cairo-hash-private.h \
cairo-malloc-private.h \
cairo-meta-surface-private.h \
cairo-mutex-impl-private.h \
cairo-mutex-list-private.h \
cairo-mutex-private.h \
cairo-mutex-type-private.h \
cairo-output-stream-private.h \
cairo-paginated-private.h \
cairo-paginated-surface-private.h \
cairo-path-fixed-private.h \
cairo-path-private.h \
cairo-private.h \
cairo-reference-count-private.h \
cairo-region-private.h \
cairo-scaled-font-private.h \
cairo-skiplist-private.h \
cairo-surface-fallback-private.h \
cairo-surface-private.h \
cairo-types-private.h \
cairo-user-font-private.h \
cairo-wideint-private.h \
cairo-wideint-type-private.h \
$(NULL)
cairo_sources = \
cairo-analysis-surface.c \
cairo-arc.c \
cairo-array.c \
cairo-atomic.c \
cairo-base85-stream.c \
cairo-bentley-ottmann.c \
cairo.c \
cairo-cache.c \
cairo-clip.c \
cairo-color.c \
cairo-debug.c \
cairo-fixed.c \
cairo-font-face.c \
cairo-font-options.c \
cairo-freelist.c \
cairo-gstate.c \
cairo-hash.c \
cairo-hull.c \
cairo-image-surface.c \
cairo-lzw.c \
cairo-matrix.c \
cairo-meta-surface.c \
cairo-misc.c \
cairo-mutex.c \
cairo-output-stream.c \
cairo-paginated-surface.c \
cairo-path-bounds.c \
cairo-path.c \
cairo-path-fill.c \
cairo-path-fixed.c \
cairo-path-stroke.c \
cairo-pattern.c \
cairo-pen.c \
cairo-polygon.c \
cairo-rectangle.c \
cairo-region.c \
cairo-scaled-font.c \
cairo-skiplist.c \
cairo-slope.c \
cairo-spline.c \
cairo-stroke-style.c \
cairo-surface.c \
cairo-surface-fallback.c \
cairo-traps.c \
cairo-unicode.c \
cairo-user-font.c \
cairo-version.c \
cairo-wideint.c \
$(NULL)
_cairo_font_subset_private = \
cairo-scaled-font-subsets-private.h \
cairo-truetype-subset-private.h \
cairo-type1-private.h \
cairo-type3-glyph-surface-private.h \
$(NULL)
_cairo_font_subset_sources = \
cairo-cff-subset.c \
cairo-scaled-font-subsets.c \
cairo-truetype-subset.c \
cairo-type1-fallback.c \
cairo-type1-subset.c \
cairo-type3-glyph-surface.c \
$(NULL)
cairo_private += $(_cairo_font_subset_private)
cairo_sources += $(_cairo_font_subset_sources)
_cairo_pdf_operators_private = cairo-pdf-operators-private.h
_cairo_pdf_operators_sources = cairo-pdf-operators.c
cairo_private += $(_cairo_pdf_operators_private)
cairo_sources += $(_cairo_pdf_operators_sources)
cairo_png_sources = cairo-png.c
cairo_ps_headers = cairo-ps.h
cairo_ps_private = cairo-ps-surface-private.h
cairo_ps_sources = cairo-ps-surface.c
cairo_pdf_headers = cairo-pdf.h
cairo_pdf_private = cairo-pdf-surface-private.h
cairo_pdf_sources = cairo-pdf-surface.c cairo-deflate-stream.c
cairo_svg_headers = cairo-svg.h
cairo_svg_private = cairo-svg-surface-private.h
cairo_svg_sources = cairo-svg-surface.c
cairo_ft_headers = cairo-ft.h
cairo_ft_private = cairo-ft-private.h
cairo_ft_sources = cairo-ft-font.c
# These are private, even though they look like public headers
cairo_test_surfaces_private = \
test-fallback-surface.h \
test-meta-surface.h \
test-paginated-surface.h \
$(NULL)
cairo_test_surfaces_sources = \
test-fallback-surface.c \
test-meta-surface.c \
test-paginated-surface.c \
$(NULL)
cairo_xlib_headers = cairo-xlib.h
cairo_xlib_private = \
cairo-xlib-private.h \
cairo-xlib-surface-private.h \
cairo-xlib-xrender-private.h \
$(NULL)
cairo_xlib_sources = \
cairo-xlib-display.c \
cairo-xlib-screen.c \
cairo-xlib-surface.c \
cairo-xlib-visual.c \
$(NULL)
cairo_xlib_xrender_headers = cairo-xlib-xrender.h
# XXX split xcb-xrender. or better yet, merge it into xcb. xcb is so recent
# that it's hard to imagine having xcb but not render.
cairo_xcb_headers = cairo-xcb.h cairo-xcb-xrender.h
cairo_xcb_sources = cairo-xcb-surface.c
cairo_quartz_headers = cairo-quartz.h
cairo_quartz_private = cairo-quartz-private.h
cairo_quartz_sources = cairo-quartz-surface.c
cairo_quratz_image_headers = cairo-quartz-image.h
cairo_quratz_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_os2_headers = cairo-os2.h
cairo_os2_private = cairo-os2-private.h
cairo_os2_sources = cairo-os2-surface.c
# automake is stupid enough to always use c++ linker if we enable the
# following lines, even if beos surface is not enabled. Disable it for now.
cairo_beos_headers = cairo-beos.h
#cairo_beos_sources = cairo-beos-surface.cpp
cairo_glitz_headers = cairo-glitz.h
cairo_glitz_private = cairo-glitz-private.h
cairo_glitz_sources = cairo-glitz-surface.c
cairo_directfb_headers = cairo-directfb.h
cairo_directfb_sources = cairo-directfb-surface.c

View file

@ -41,6 +41,9 @@
#define _BSD_SOURCE /* for snprintf(), strdup() */
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
#include "cairo-scaled-font-subsets-private.h"
#include "cairo-truetype-subset-private.h"
#include <string.h>
@ -2282,3 +2285,5 @@ _cairo_cff_fallback_fini (cairo_cff_subset_t *subset)
free (subset->widths);
free (subset->data);
}
#endif /* CAIRO_HAS_FONT_SUBSET */

View file

@ -36,8 +36,11 @@
#ifndef CAIRO_CLIP_PRIVATE_H
#define CAIRO_CLIP_PRIVATE_H
#include "cairo-types-private.h"
#include "cairo-compiler-private.h"
#include "cairo-path-fixed-private.h"
#include "cairo-reference-count-private.h"
#include "cairo-region-private.h"
extern const cairo_private cairo_rectangle_list_t _cairo_rectangles_nil;

View file

@ -38,7 +38,9 @@
#ifndef CAIRO_COMPILER_PRIVATE_H
#define CAIRO_COMPILER_PRIVATE_H
CAIRO_BEGIN_DECLS
#if HAVE_CONFIG_H
#include "config.h"
#endif
#if __GNUC__ >= 3 && defined(__ELF__) && !defined(__sun)
# define slim_hidden_proto(name) slim_hidden_proto1(name, slim_hidden_int_name(name)) cairo_private
@ -126,6 +128,4 @@ CAIRO_BEGIN_DECLS
#define inline __inline__
#endif
CAIRO_END_DECLS
#endif

View file

@ -23,6 +23,7 @@
#define CAIRO_FREELIST_H
#include "cairo-types-private.h"
#include "cairo-compiler-private.h"
/* Opaque implementation types. */
typedef struct _cairo_freelist cairo_freelist_t;

View file

@ -3,6 +3,7 @@
*
* Copyright © 2002 University of Southern California
* Copyright © 2005 Red Hat, Inc.
* Copyright © 2007 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
@ -34,6 +35,7 @@
*
* Contributor(s):
* Carl D. Worth <cworth@cworth.org>
* Adrian Johnson <ajohnson@redneon.com>
*/
#include "cairoint.h"
@ -599,3 +601,69 @@ _cairo_lround (double d)
#undef MSW
#undef LSW
}
#ifdef _WIN32
#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>
#include <io.h>
/* tmpfile() replacment for Windows.
*
* On Windows tmpfile() creates the file in the root directory. This
* may fail due to unsufficient privileges.
*/
FILE *
_cairo_win32_tmpfile (void)
{
DWORD path_len;
WCHAR path_name[MAX_PATH + 1];
WCHAR file_name[MAX_PATH + 1];
HANDLE handle;
int fd;
FILE *fp;
path_len = GetTempPathW (MAX_PATH, path_name);
if (path_len <= 0 || path_len >= MAX_PATH)
return NULL;
if (GetTempFileNameW (path_name, L"ps_", 0, file_name) == 0)
return NULL;
handle = CreateFileW (file_name,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE,
NULL);
if (handle == INVALID_HANDLE_VALUE) {
DeleteFileW (file_name);
return NULL;
}
fd = _open_osfhandle((intptr_t) handle, 0);
if (fd < 0) {
CloseHandle (handle);
return NULL;
}
fp = fdopen(fd, "w+b");
if (fp == NULL) {
_close(fd);
return NULL;
}
return fp;
}
#endif /* _WIN32 */

View file

@ -45,10 +45,6 @@
#include "config.h"
#endif
#include "cairo-features.h"
CAIRO_BEGIN_DECLS
/* A fully qualified no-operation statement */
#define CAIRO_MUTEX_IMPL_NOOP do {/*no-op*/} while (0)
@ -221,6 +217,4 @@ CAIRO_BEGIN_DECLS
#endif
CAIRO_END_DECLS
#endif

View file

@ -41,6 +41,10 @@
#ifndef CAIRO_MUTEX_PRIVATE_H
#define CAIRO_MUTEX_PRIVATE_H
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include "cairo-mutex-type-private.h"
CAIRO_BEGIN_DECLS

View file

@ -41,12 +41,6 @@
#ifndef CAIRO_MUTEX_TYPE_PRIVATE_H
#define CAIRO_MUTEX_TYPE_PRIVATE_H
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include "cairo-features.h"
#include "cairo-compiler-private.h"
#include "cairo-mutex-impl-private.h"

View file

@ -39,6 +39,10 @@
#include "cairo-compiler-private.h"
#include "cairo-types-private.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
typedef cairo_status_t (*cairo_output_stream_write_func_t) (cairo_output_stream_t *output_stream,
const unsigned char *data,
unsigned int length);

View file

@ -36,6 +36,8 @@
#ifndef CAIRO_PATH_FIXED_PRIVATE_H
#define CAIRO_PATH_FIXED_PRIVATE_H
#include "cairo-types-private.h"
enum cairo_path_op {
CAIRO_PATH_OP_MOVE_TO = 0,
CAIRO_PATH_OP_LINE_TO = 1,

View file

@ -162,5 +162,4 @@ _cairo_pdf_operators_show_text_glyphs (cairo_pdf_operators_t *pdf_operators,
cairo_bool_t backward,
cairo_scaled_font_t *scaled_font);
#endif /* CAIRO_PDF_OPERATORS_H */

View file

@ -40,6 +40,9 @@
*/
#include "cairoint.h"
#if CAIRO_HAS_PDF_OPERATORS
#include "cairo-pdf-operators-private.h"
#include "cairo-path-fixed-private.h"
#include "cairo-output-stream-private.h"
@ -1425,3 +1428,5 @@ _cairo_pdf_operators_show_text_glyphs (cairo_pdf_operators_t *pdf_operators,
return _cairo_output_stream_get_status (pdf_operators->stream);
}
#endif /* CAIRO_HAS_PDF_OPERATORS */

View file

@ -46,6 +46,8 @@
#include "cairo-surface-private.h"
#include "cairo-pdf-operators-private.h"
#include <time.h>
typedef struct cairo_ps_surface {
cairo_surface_t base;

View file

@ -37,6 +37,10 @@
#ifndef CAIRO_REFRENCE_COUNT_PRIVATE_H
#define CAIRO_REFRENCE_COUNT_PRIVATE_H
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include "cairo-atomic-private.h"
CAIRO_BEGIN_DECLS

View file

@ -40,6 +40,7 @@
#include <pixman.h>
#include "cairo-compiler-private.h"
#include "cairo-types-private.h"
/* #cairo_region_t is defined in cairoint.h */

View file

@ -39,6 +39,8 @@
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
typedef struct _cairo_scaled_font_subsets_glyph {
unsigned int font_id;
unsigned int subset_id;
@ -421,6 +423,9 @@ typedef struct _cairo_type1_subset {
unsigned long trailer_length;
} cairo_type1_subset_t;
#if CAIRO_HAS_FT_FONT
/**
* _cairo_type1_subset_init:
* @type1_subset: a #cairo_type1_subset_t to initialize
@ -454,6 +459,9 @@ _cairo_type1_subset_init (cairo_type1_subset_t *type_subset,
cairo_private void
_cairo_type1_subset_fini (cairo_type1_subset_t *subset);
#endif /* CAIRO_HAS_FT_FONT */
/**
* _cairo_type1_scaled_font_is_type1:
* @scaled_font: a #cairo_scaled_font_t
@ -592,4 +600,6 @@ _cairo_truetype_index_to_ucs4 (cairo_scaled_font_t *scaled_font,
unsigned long index,
uint32_t *ucs4);
#endif /* CAIRO_HAS_FONT_SUBSET */
#endif /* CAIRO_SCALED_FONT_SUBSETS_PRIVATE_H */

View file

@ -42,6 +42,9 @@
#define _BSD_SOURCE /* for snprintf(), strdup() */
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
#include "cairo-scaled-font-subsets-private.h"
#include "cairo-user-font-private.h"
@ -1014,3 +1017,5 @@ CLEANUP_HASH:
return status;
}
#endif /* CAIRO_HAS_FONT_SUBSET */

View file

@ -39,6 +39,8 @@
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
/* The structs defined here should strictly follow the TrueType
* specification and not be padded. We use only 16-bit integer
* in their definition to guarantee that. The fields of type
@ -192,4 +194,6 @@ typedef struct _tt_glyph_data {
tt_composite_glyph_t glyph;
} tt_glyph_data_t;
#endif /* CAIRO_HAS_FONT_SUBSET */
#endif /* CAIRO_TRUETYPE_SUBSET_PRIVATE_H */

View file

@ -43,6 +43,8 @@
#define _BSD_SOURCE /* for snprintf(), strdup() */
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
#include "cairo-scaled-font-subsets-private.h"
#include "cairo-truetype-subset-private.h"
@ -1323,3 +1325,5 @@ cleanup:
return status;
}
#endif /* CAIRO_HAS_FONT_SUBSET */

View file

@ -35,6 +35,9 @@
#define _BSD_SOURCE /* for snprintf(), strdup() */
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
#include "cairo-type1-private.h"
#include "cairo-scaled-font-subsets-private.h"
#include "cairo-path-fixed-private.h"
@ -873,3 +876,5 @@ _cairo_type2_charstrings_fini (cairo_type2_charstrings_t *type2_subset)
free (type2_subset->widths);
}
#endif /* CAIRO_HAS_FONT_SUBSET */

View file

@ -36,10 +36,16 @@
#ifndef CAIRO_TYPE1_PRIVATE_H
#define CAIRO_TYPE1_PRIVATE_H
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
/* Magic constants for the type1 eexec encryption */
#define CAIRO_TYPE1_ENCRYPT_C1 ((unsigned short) 52845)
#define CAIRO_TYPE1_ENCRYPT_C2 ((unsigned short) 22719)
#define CAIRO_TYPE1_PRIVATE_DICT_KEY ((unsigned short) 55665)
#define CAIRO_TYPE1_CHARSTRING_KEY ((unsigned short) 4330)
#endif /* CAIRO_HAS_FONT_SUBSET */
#endif /* CAIRO_TYPE1_PRIVATE_H */

View file

@ -38,13 +38,19 @@
* http://partners.adobe.com/public/developer/en/font/T1_SPEC.PDF
*/
#define _BSD_SOURCE /* for snprintf(), strdup() */
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
#include "cairo-type1-private.h"
#include "cairo-scaled-font-subsets-private.h"
#include "cairo-output-stream-private.h"
/* XXX: Eventually, we need to handle other font backends */
#if CAIRO_HAS_FT_FONT
#include "cairo-ft-private.h"
#include <ft2build.h>
@ -1405,3 +1411,7 @@ _cairo_type1_scaled_font_is_type1 (cairo_scaled_font_t *scaled_font)
return is_type1;
}
#endif /* CAIRO_HAS_FT_FONT */
#endif /* CAIRO_HAS_FONT_SUBSET */

View file

@ -37,6 +37,10 @@
#ifndef CAIRO_TYPE3_GLYPH_SURFACE_PRIVATE_H
#define CAIRO_TYPE3_GLYPH_SURFACE_PRIVATE_H
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
#include "cairo-surface-private.h"
#include "cairo-pdf-operators-private.h"
@ -71,4 +75,6 @@ _cairo_type3_glyph_surface_emit_glyph (void *abstract_surface,
cairo_box_t *bbox,
double *width);
#endif /* CAIRO_HAS_FONT_SUBSET */
#endif /* CAIRO_TYPE3_GLYPH_SURFACE_PRIVATE_H */

View file

@ -35,6 +35,9 @@
*/
#include "cairoint.h"
#if CAIRO_HAS_FONT_SUBSET
#include "cairo-type3-glyph-surface-private.h"
#include "cairo-output-stream-private.h"
#include "cairo-meta-surface-private.h"
@ -443,3 +446,5 @@ _cairo_type3_glyph_surface_emit_glyph (void *abstract_surface,
return status;
}
#endif /* CAIRO_HAS_FONT_SUBSET */

View file

@ -45,17 +45,27 @@
#include "cairo-fixed-type-private.h"
typedef struct _cairo_array cairo_array_t;
typedef struct _cairo_hash_table cairo_hash_table_t;
typedef struct _cairo_cache cairo_cache_t;
typedef struct _cairo_hash_entry cairo_hash_entry_t;
typedef struct _cairo_surface_backend cairo_surface_backend_t;
typedef struct _cairo_clip cairo_clip_t;
typedef struct _cairo_output_stream cairo_output_stream_t;
typedef struct _cairo_scaled_font_subsets cairo_scaled_font_subsets_t;
typedef struct _cairo_paginated_surface_backend cairo_paginated_surface_backend_t;
typedef struct _cairo_scaled_font_backend cairo_scaled_font_backend_t;
typedef struct _cairo_clip_path cairo_clip_path_t;
typedef struct _cairo_color cairo_color_t;
typedef struct _cairo_font_face_backend cairo_font_face_backend_t;
typedef struct _cairo_gstate cairo_gstate_t;
typedef struct _cairo_hash_entry cairo_hash_entry_t;
typedef struct _cairo_hash_table cairo_hash_table_t;
typedef struct _cairo_image_surface cairo_image_surface_t;
typedef struct _cairo_output_stream cairo_output_stream_t;
typedef struct _cairo_paginated_surface_backend cairo_paginated_surface_backend_t;
typedef struct _cairo_path_fixed cairo_path_fixed_t;
typedef struct _cairo_rectangle_int16 cairo_glyph_size_t;
typedef struct _cairo_region cairo_region_t;
typedef struct _cairo_scaled_font_backend cairo_scaled_font_backend_t;
typedef struct _cairo_scaled_font_subsets cairo_scaled_font_subsets_t;
typedef struct _cairo_solid_pattern cairo_solid_pattern_t;
typedef struct _cairo_surface_backend cairo_surface_backend_t;
typedef struct _cairo_unscaled_font_backend cairo_unscaled_font_backend_t;
typedef struct _cairo_xlib_screen_info cairo_xlib_screen_info_t;
typedef cairo_array_t cairo_user_data_array_t;
/**
@ -156,8 +166,6 @@ typedef enum _cairo_internal_surface_type {
CAIRO_INTERNAL_SURFACE_TYPE_TYPE3_GLYPH
} cairo_internal_surface_type_t;
typedef struct _cairo_region cairo_region_t;
typedef struct _cairo_point {
cairo_fixed_t x;
cairo_fixed_t y;
@ -199,8 +207,6 @@ struct _cairo_rectangle_int32 {
uint32_t width, height;
};
typedef struct _cairo_rectangle_int16 cairo_glyph_size_t;
struct _cairo_point_int16 {
int16_t x, y;
};
@ -233,13 +239,11 @@ typedef enum _cairo_direction {
CAIRO_DIRECTION_REVERSE
} cairo_direction_t;
typedef struct _cairo_path_fixed cairo_path_fixed_t;
typedef enum _cairo_clip_mode {
CAIRO_CLIP_MODE_PATH,
CAIRO_CLIP_MODE_REGION,
CAIRO_CLIP_MODE_MASK
} cairo_clip_mode_t;
typedef struct _cairo_clip_path cairo_clip_path_t;
typedef struct _cairo_edge {
cairo_line_t edge;
@ -292,9 +296,6 @@ typedef struct _cairo_pen {
cairo_pen_vertex_t vertices_embedded[32];
} cairo_pen_t;
typedef struct _cairo_color cairo_color_t;
typedef struct _cairo_image_surface cairo_image_surface_t;
typedef struct _cairo_stroke_style {
double line_width;
cairo_line_cap_t line_cap;

View file

@ -38,6 +38,7 @@
#define CAIRO_USER_FONT_PRIVATE_H
#include "cairo.h"
#include "cairo-compiler-private.h"
cairo_private cairo_bool_t
_cairo_font_face_is_user (cairo_font_face_t *font_face);

View file

@ -1,98 +0,0 @@
/* -*- 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 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., 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 Adrian Johnson.
*
* Contributor(s):
* Adrian Johnson <ajohnson@redneon.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 <windows.h>
#include <io.h>
/* tmpfile() replacment for Windows.
*
* On Windows tmpfile() creates the file in the root directory. This
* may fail due to unsufficient privileges.
*/
FILE *
_cairo_win32_tmpfile (void)
{
DWORD path_len;
WCHAR path_name[MAX_PATH + 1];
WCHAR file_name[MAX_PATH + 1];
HANDLE handle;
int fd;
FILE *fp;
path_len = GetTempPathW (MAX_PATH, path_name);
if (path_len <= 0 || path_len >= MAX_PATH)
return NULL;
if (GetTempFileNameW (path_name, L"ps_", 0, file_name) == 0)
return NULL;
handle = CreateFileW (file_name,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE,
NULL);
if (handle == INVALID_HANDLE_VALUE) {
DeleteFileW (file_name);
return NULL;
}
fd = _open_osfhandle((intptr_t) handle, 0);
if (fd < 0) {
CloseHandle (handle);
return NULL;
}
fp = fdopen(fd, "w+b");
if (fp == NULL) {
_close(fd);
return NULL;
}
return fp;
}

View file

@ -33,6 +33,11 @@
#ifndef CAIRO_XLIB_XRENDER_PRIVATE_H
#define CAIRO_XLIB_XRENDER_PRIVATE_H
#include "cairo-features.h"
#include "cairo-compiler-private.h"
#include <X11/Xlib.h>
#if CAIRO_HAS_XLIB_XRENDER_SURFACE
#include "cairo-xlib-xrender.h"
@ -52,7 +57,7 @@
* take a pointer as first argument */
__attribute__((__unused__)) static void _void_consume (void *p, ...) { }
__attribute__((__unused__)) static void * _voidp_consume (void *p, ...) { return NULL; }
__attribute__((__unused__)) static void * _voidp_consume (void *p, ...) { return (void *)0; }
__attribute__((__unused__)) static int _int_consume (void *p, ...) { return 0; }
__attribute__((__unused__)) static void _void_consume_free (Display *p, XID n) { }

View file

@ -75,6 +75,14 @@
#include "cairo-compiler-private.h"
#if defined(CAIRO_HAS_PS_SURFACE) || defined(CAIRO_HAS_PDF_SURFACE) || defined(CAIRO_HAS_SVG_SURFACE)
#define CAIRO_HAS_FONT_SUBSET 1
#endif
#if defined(CAIRO_HAS_PS_SURFACE) || defined(CAIRO_HAS_PDF_SURFACE)
#define CAIRO_HAS_PDF_OPERATORS 1
#endif
CAIRO_BEGIN_DECLS
#ifdef _WIN32
@ -316,8 +324,6 @@ _cairo_user_data_array_set_data (cairo_user_data_array_t *array,
cairo_private unsigned long
_cairo_hash_string (const char *c);
typedef struct _cairo_unscaled_font_backend cairo_unscaled_font_backend_t;
/*
* A #cairo_unscaled_font_t is just an opaque handle we use in the
* glyph cache.
@ -504,8 +510,6 @@ extern const cairo_private struct _cairo_scaled_font_backend _cairo_quartz_scale
#endif
typedef struct _cairo_solid_pattern cairo_solid_pattern_t;
struct _cairo_surface_backend {
cairo_surface_type_t type;
@ -972,8 +976,6 @@ typedef struct _cairo_traps {
#define CAIRO_SURFACE_RESOLUTION_DEFAULT 72.0
#define CAIRO_SURFACE_FALLBACK_RESOLUTION_DEFAULT 300.0
typedef struct _cairo_gstate cairo_gstate_t;
typedef struct _cairo_stroke_face {
cairo_point_t ccw;
cairo_point_t point;

View file

@ -17,7 +17,7 @@ echo Checking documentation for incorrect syntax
# Note: this test is also run from doc/public/ to check the SGML files
if test "x$SGML_DOCS" = x; then
FILES=$cairo_all_source_files
FILES=$all_cairo_files
if test "x$FILES" = x; then
FILES=`find "$srcdir" -name '*.h' -or -name '*.c' -or -name '*.cpp'`
fi

1
test/.gitignore vendored
View file

@ -1,4 +1,5 @@
TAGS
tags
.deps
.libs
Makefile

View file

@ -914,6 +914,9 @@ CLEANFILES = \
index.html \
ref.hash \
png-test.png \
svg-surface-source.svg \
pdf-surface-source.pdf \
ps-surface-source.ps \
$(EXTRA_LTLIBRARIES) \
$(EXTRA_PROGRAMS)

View file

@ -1 +1,3 @@
TAGS
tags
perceptualdiff

69
util/README Normal file
View file

@ -0,0 +1,69 @@
Cairo Utilities
===============
There are a varieties of utilities we use with cairo.
backtrace-symbols
-----------------
This is a small shared library designed to be preloaded by the
linker and its purpose is to make the backtrace_symbols() function
of glibc produce more useful source reference information.
Build by:
make backtrace-symbols.so
and use by:
LD_PRELOAD=$PWD/backtrace-symbols.so app-to-run
This code should be contributed back to glibc at some point.
malloc-stats
------------
This is a small shared library designed to be preloaded by the
linker and its purpose is to make the malloc_stats() function
of glibc produce more useful information.
Build by:
make malloc-stats.so
and use by:
LD_PRELOAD=$PWD/malloc-stats.so app-to-run
This works best when backtrace-symbols is in use. That is:
LD_PRELOAD="$PWD/backtrace-symbols.so $PWD/malloc-stats.so" app-to-run
cairo-trace
-----------
This tool can be used to trace all the cairo function calls made by an
applications. This is useful for either extracting a test case triggering
a bug from an application, or simply to get a general idea of how an
application is using cairo.
This tool lives outside the cairo source distribution right now and can
be found in a git repository at:
http://cgit.freedesktop.org/~ickle/cairo-trace/
There are plans to move it to this directory in the future, and possibly
install it on the system.
cairo-api-update and xr2cairo
-----------------------------
These two scripts were used to convert source code written for pre-1.0
cairo to newer API. See $(top_srcdir)/PORTING_GUIDE for more information.
These files are obsolete now and may be removed in a future version.