[cairo-commit] 3 commits - acinclude.m4 autogen.sh build/aclocal.cairo.m4 build/aclocal.enable.m4 build/aclocal.float.m4 build/aclocal.gtk-doc.m4 build/aclocal.pkg.m4 build/configure.ac.enable build/configure.ac.system configure.ac doc/public Makefile.am src/cairo-output-stream-private.h

Behdad Esfahbod behdad at kemper.freedesktop.org
Thu Sep 11 01:23:59 PDT 2008


 Makefile.am                           |    2 
 acinclude.m4                          |  261 -------------------
 autogen.sh                            |   16 -
 build/aclocal.cairo.m4                |  159 ++++++++++++
 build/aclocal.enable.m4               |  439 +++++++++++++++++++++++++++++++++
 build/aclocal.float.m4                |   64 ++++
 build/aclocal.gtk-doc.m4              |   39 ++
 build/aclocal.pkg.m4                  |  155 +++++++++++
 build/configure.ac.enable             |  447 ----------------------------------
 build/configure.ac.system             |    2 
 configure.ac                          |   11 
 doc/public/tmpl/cairo-image.sgml      |    1 
 doc/public/tmpl/cairo-user-fonts.sgml |    1 
 src/cairo-output-stream-private.h     |    2 
 14 files changed, 863 insertions(+), 736 deletions(-)

New commits:
commit d1560bd68728c726b926d6460a466d073ed37285
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Sep 11 04:23:05 2008 -0400

    Mark private symbol so

diff --git a/src/cairo-output-stream-private.h b/src/cairo-output-stream-private.h
index 6c60f09..787d061 100644
--- a/src/cairo-output-stream-private.h
+++ b/src/cairo-output-stream-private.h
@@ -161,7 +161,7 @@ _cairo_memory_stream_copy (cairo_output_stream_t *base,
 cairo_private int
 _cairo_memory_stream_length (cairo_output_stream_t *stream);
 
-cairo_output_stream_t *
+cairo_private cairo_output_stream_t *
 _cairo_null_stream_create (void);
 
 /* cairo-base85-stream.c */
commit 2b4a26f0977f325df7d154e80030a152f340e000
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Sep 11 04:21:29 2008 -0400

    [configure.ac] Add CAIRO_BEGINEND_DECLS

diff --git a/build/aclocal.cairo.m4 b/build/aclocal.cairo.m4
index ce0c5a7..8229f93 100644
--- a/build/aclocal.cairo.m4
+++ b/build/aclocal.cairo.m4
@@ -144,3 +144,16 @@ AC_DEFUN([CAIRO_CHECK_ATOMIC_OP_NEEDS_MEMORY_BARRIER],
 	fi
 ])
 
+AC_DEFUN([CAIRO_BEGINEND_DECLS],
+[dnl
+AH_BOTTOM([
+#ifdef  __cplusplus
+# define CAIRO_BEGIN_DECLS  extern "C" {
+# define CAIRO_END_DECLS    }
+#else
+# define CAIRO_BEGIN_DECLS
+# define CAIRO_END_DECLS
+#endif
+])dnl
+])
+
diff --git a/build/configure.ac.system b/build/configure.ac.system
index 2102627..519991d 100644
--- a/build/configure.ac.system
+++ b/build/configure.ac.system
@@ -2,6 +2,8 @@ dnl
 dnl Non-failing checks for functions, headers, libraries, etc go here
 dnl
 
+CAIRO_BEGINEND_DECLS
+
 dnl ====================================================================
 dnl Feature checks
 dnl ====================================================================
diff --git a/configure.ac b/configure.ac
index 885ae0b..fbf52a5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -459,16 +459,6 @@ fi
 
 dnl ===========================================================================
 
-AH_BOTTOM([
-#ifdef  __cplusplus
-# define CAIRO_BEGIN_DECLS  extern "C" {
-# define CAIRO_END_DECLS    }
-#else
-# define CAIRO_BEGIN_DECLS
-# define CAIRO_END_DECLS
-#endif
-])
-
 AC_CONFIG_FILES([
 Makefile
 boilerplate/Makefile
commit b7a838261bd2aace4466a725a8de08cdd4dccc9c
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Sep 11 04:17:43 2008 -0400

    Move m4 macros into build/aclocal.*.m4 files

diff --git a/Makefile.am b/Makefile.am
index 6b9b778..7b55262 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,5 @@
+ACLOCAL_AMFLAGS = -I build
+
 DIST_SUBDIRS = src boilerplate test perf doc util
 SUBDIRS = src doc
 # libpng is required for our test programs
diff --git a/acinclude.m4 b/acinclude.m4
index 806e88b..1cadb9c 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,266 +1,5 @@
 dnl -*- mode: autoconf -*-
 
-# serial 1
-
-dnl Usage:
-dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
-AC_DEFUN([GTK_DOC_CHECK],
-[
-  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
-  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
-  dnl for overriding the documentation installation directory
-  AC_ARG_WITH(html-dir,
-    AC_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
-    [with_html_dir='${datadir}/gtk-doc/html'])
-  HTML_DIR="$with_html_dir"
-  AC_SUBST(HTML_DIR)
-
-  dnl enable/disable documentation building
-  AC_ARG_ENABLE(gtk-doc,
-    AC_HELP_STRING([--enable-gtk-doc],
-                   [use gtk-doc to build documentation [default=no]]),,
-    enable_gtk_doc=no)
-
-  have_gtk_doc=no
-  if test x$enable_gtk_doc = xyes; then
-    if test -z "$PKG_CONFIG"; then
-      AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-    fi
-    if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
-      have_gtk_doc=yes
-    fi
-
-  dnl do we want to do a version check?
-ifelse([$1],[],,
-    [gtk_doc_min_version=$1
-    if test "$have_gtk_doc" = yes; then
-      AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version])
-      if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
-        AC_MSG_RESULT(yes)
-      else
-        AC_MSG_RESULT(no)
-        have_gtk_doc=no
-      fi
-    fi
-])
-    if test "$have_gtk_doc" != yes; then
-      enable_gtk_doc=no
-    fi
-  fi
-
-  AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
-  AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL")
-])
-
-# AX_C_FLOAT_WORDS_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE],
-#                             [ACTION-IF-UNKNOWN])
-#
-# Checks the ordering of words within a multi-word float. This check
-# is necessary because on some systems (e.g. certain ARM systems), the
-# float word ordering can be different from the byte ordering. In a
-# multi-word float context, "big-endian" implies that the word containing
-# the sign bit is found in the memory location with the lowest address.
-# This implemenation was inspired by the AC_C_BIGENDIAN macro in autoconf.
-# -------------------------------------------------------------------------
-AC_DEFUN([AX_C_FLOAT_WORDS_BIGENDIAN],
-  [AC_CACHE_CHECK(whether float word ordering is bigendian,
-                  ax_cv_c_float_words_bigendian, [
-
-# 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
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-
-double d = 90904234967036810337470478905505011476211692735615632014797120844053488865816695273723469097858056257517020191247487429516932130503560650002327564517570778480236724525140520121371739201496540132640109977779420565776568942592.0;
-
-]])], [
-
-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
-
-])])
-
-case $ax_cv_c_float_words_bigendian in
-  yes)
-    m4_default([$1],
-      [AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
-                 [Define to 1 if your system stores words within floats
-                  with the most significant word first])]) ;;
-  no)
-    $2 ;;
-  *)
-    m4_default([$3],
-      [AC_MSG_ERROR([
-
-Unknown float word ordering. You need to manually preset
-ax_cv_c_float_words_bigendian=no (or yes) according to your system.
-
-    ])]) ;;
-esac
-
-])# AX_C_FLOAT_WORDS_BIGENDIAN
-
-
-
-dnl ==========================================================================
-dnl
-dnl Cairo-specific macros
-dnl
-m4_pattern_forbid([CAIRO])
-m4_pattern_forbid([^cr_])
-
-dnl ==========================================================================
-
-dnl Usage:
-dnl   CAIRO_BIGENDIAN
-dnl
-AC_DEFUN([CAIRO_BIGENDIAN], [
-	case $host_os in
-		darwin*)
-	AH_VERBATIM([X_BYTE_ORDER],
-[
-/* 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
-])
-		;;
-		*) 
-	AC_C_BIGENDIAN
-	AX_C_FLOAT_WORDS_BIGENDIAN
-		;;
-	esac
-])
-
-dnl CAIRO_CHECK_FUNCS_WITH_FLAGS(FUNCTION..., CFLAGS, LIBS
-dnl                              [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
-dnl Like AC_CHECK_FUNCS but with additional CFLAGS and LIBS
-dnl --------------------------------------------------------------------
-AC_DEFUN([CAIRO_CHECK_FUNCS_WITH_FLAGS],
-[ 
-	_save_cflags="$CFLAGS"
-	_save_libs="$LIBS"
-	CFLAGS="$CFLAGS $2"
-	LIBS="$LIBS $3"
-	AC_CHECK_FUNCS($1, $4, $5)
-	CFLAGS="$_save_cflags"
-	LIBS="$_save_libs"
-])
-
-dnl CAIRO_CONFIG_COMMANDS is like AC_CONFIG_COMMANDS, except that:
-dnl
-dnl	1) It redirects the stdout of the command to the file.
-dnl	2) It does not recreate the file if contents didn't change.
-dnl
-AC_DEFUN([CAIRO_CONFIG_COMMANDS],
-[
-	AC_CONFIG_COMMANDS($1,
-	[
-		_config_file=$1
-		_tmp_file=cairoconf.tmp
-		AC_MSG_NOTICE([creating $_config_file])
-		{
-			$2
-		} >> "$_tmp_file" ||
-	        AC_MSG_ERROR([failed to write to $_tmp_file])
-
-		if cmp -s "$_tmp_file" "$_config_file"; then
-		  AC_MSG_NOTICE([$_config_file is unchanged])
-		  rm -f "$_tmp_file"
-		else
-		  mv "$_tmp_file" "$_config_file" ||
-	          AC_MSG_ERROR([failed to update $_config_file])
-		fi
-	], $3)
-])
-
-dnl check compiler flags
-AC_DEFUN([CAIRO_CC_TRY_FLAG],
-[
-	AC_MSG_CHECKING([whether $CC supports $1])
-
-	_save_cflags="$CFLAGS"
-	CFLAGS="$CFLAGS -Werror $1"
-	AC_COMPILE_IFELSE([ ], [cairo_cc_flag=yes], [cairo_cc_flag=no])
-	CFLAGS="$_save_cflags"
-
-	if test "x$cairo_cc_flag" = "xyes"; then
-		ifelse([$2], , :, [$2])
-	else
-		ifelse([$3], , :, [$3])
-	fi
-	AC_MSG_RESULT([$cairo_cc_flag])
-])
-
-dnl Usage:
-dnl   CAIRO_CHECK_NATIVE_ATOMIC_PRIMITIVES
-AC_DEFUN([CAIRO_CHECK_NATIVE_ATOMIC_PRIMITIVES],
-[
-	AC_CACHE_CHECK([for native atomic primitives], cairo_cv_atomic_primitives,
-	[
-		cairo_cv_atomic_primitives="none"
-
-		AC_TRY_LINK([int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); }], [],
-		  cairo_cv_atomic_primitives="Intel"
-		  )
-	])
-	if test "x$cairo_cv_atomic_primitives" = xIntel; then
-		AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1,
-			  [Enable if your compiler supports the Intel __sync_* atomic primitives])
-	fi
-])
-
-dnl Usage:
-dnl   CAIRO_CHECK_ATOMIC_OP_NEEDS_MEMORY_BARRIER
-AC_DEFUN([CAIRO_CHECK_ATOMIC_OP_NEEDS_MEMORY_BARRIER],
-[
-	AC_CACHE_CHECK([whether atomic ops require a memory barrier], cairo_cv_atomic_op_needs_memory_barrier,
-	[
-		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
-	])
-	if test "x$cairo_cv_atomic_op_needs_memory_barrier" = "xyes"; then
-	    AC_DEFINE_UNQUOTED(ATOMIC_OP_NEEDS_MEMORY_BARRIER, 1,
-			       [whether memory barriers are needed around atomic operations])
-	fi
-])
-
-dnl Parse Version.mk and declare m4 variables out of it
-m4_define([CAIRO_PARSE_VERSION],
-		m4_translit(
-		m4_bpatsubst(m4_include(cairo-version.h),
-			     [^.define \([a-zA-Z0-9_]*\)  *\([0-9][0-9]*\)],
-			     [[m4_define(\1, \[\2\])]]),
-			    [A-Z], [a-z])
-)
-
 dnl [m4_newline] didn't appear until autoconf 2.62
 m4_ifdef([m4_newline],,m4_define([m4_newline],[
 ]))
diff --git a/autogen.sh b/autogen.sh
index 7dd9016..cf00ce9 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -15,6 +15,7 @@ cd $srcdir
 PACKAGE=cairo
 
 LIBTOOLIZE_FLAGS="--copy --force --automake"
+ACLOCAL_FLAGS="-I build"
 AUTOHEADER=${AUTOHEADER-autoheader}
 AUTOMAKE_FLAGS="--add-missing --gnu -Wall"
 AUTOCONF=${AUTOCONF-autoconf}
@@ -143,21 +144,6 @@ 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 "$ACLOCAL" && test -z "$ACLOCAL_FLAGS"; then
-    acdir=`$ACLOCAL --print-ac-dir`
-    if [ ! -f $acdir/pkg.m4 ]; then
-	echo "$ARGV0: Error: Could not find pkg-config macros."
-	echo "        (Looked in $acdir/pkg.m4)"
-	echo "        If pkg.m4 is available in /another/directory, please set"
-	echo "        ACLOCAL_FLAGS=\"-I /another/directory\""
-	echo "        Otherwise, please install pkg-config."
-	echo ""
-	echo "pkg-config is available from:"
-	echo "http://www.freedesktop.org/software/pkgconfig/"
-	DIE=1
-    fi
-fi
-
 if test -n "$DIE"; then
   exit 1
 fi
diff --git a/build/aclocal.cairo.m4 b/build/aclocal.cairo.m4
new file mode 100644
index 0000000..ce0c5a7
--- /dev/null
+++ b/build/aclocal.cairo.m4
@@ -0,0 +1,146 @@
+
+dnl ==========================================================================
+dnl
+dnl Cairo-specific macros
+dnl
+m4_pattern_forbid([CAIRO])
+m4_pattern_forbid([^cr_])
+
+dnl ==========================================================================
+
+dnl Parse Version.mk and declare m4 variables out of it
+m4_define([CAIRO_PARSE_VERSION],dnl
+		m4_translit(dnl
+		m4_bpatsubst(m4_include(cairo-version.h),
+			     [^.define \([a-zA-Z0-9_]*\)  *\([0-9][0-9]*\)],
+			     [[m4_define(\1, \[\2\])]]),
+			    [A-Z], [a-z])dnl
+)dnl
+
+dnl ==========================================================================
+
+dnl Usage:
+dnl   CAIRO_BIGENDIAN
+dnl
+AC_DEFUN([CAIRO_BIGENDIAN],
+[dnl
+	case $host_os in
+		darwin*)
+	AH_VERBATIM([X_BYTE_ORDER],
+[
+/* 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
+])
+		;;
+		*) 
+	AC_C_BIGENDIAN
+	AX_C_FLOAT_WORDS_BIGENDIAN
+		;;
+	esac
+])
+
+dnl CAIRO_CHECK_FUNCS_WITH_FLAGS(FUNCTION..., CFLAGS, LIBS
+dnl                              [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Like AC_CHECK_FUNCS but with additional CFLAGS and LIBS
+dnl --------------------------------------------------------------------
+AC_DEFUN([CAIRO_CHECK_FUNCS_WITH_FLAGS],
+[dnl 
+	_save_cflags="$CFLAGS"
+	_save_libs="$LIBS"
+	CFLAGS="$CFLAGS $2"
+	LIBS="$LIBS $3"
+	AC_CHECK_FUNCS($1, $4, $5)
+	CFLAGS="$_save_cflags"
+	LIBS="$_save_libs"
+])
+
+dnl CAIRO_CONFIG_COMMANDS is like AC_CONFIG_COMMANDS, except that:
+dnl
+dnl	1) It redirects the stdout of the command to the file.
+dnl	2) It does not recreate the file if contents didn't change.
+dnl
+AC_DEFUN([CAIRO_CONFIG_COMMANDS],
+[dnl
+	AC_CONFIG_COMMANDS($1,
+	[
+		_config_file=$1
+		_tmp_file=cairoconf.tmp
+		AC_MSG_NOTICE([creating $_config_file])
+		{
+			$2
+		} >> "$_tmp_file" ||
+	        AC_MSG_ERROR([failed to write to $_tmp_file])
+
+		if cmp -s "$_tmp_file" "$_config_file"; then
+		  AC_MSG_NOTICE([$_config_file is unchanged])
+		  rm -f "$_tmp_file"
+		else
+		  mv "$_tmp_file" "$_config_file" ||
+	          AC_MSG_ERROR([failed to update $_config_file])
+		fi
+	], $3)
+])
+
+dnl check compiler flags
+AC_DEFUN([CAIRO_CC_TRY_FLAG],
+[dnl
+	AC_MSG_CHECKING([whether $CC supports $1])
+
+	_save_cflags="$CFLAGS"
+	CFLAGS="$CFLAGS -Werror $1"
+	AC_COMPILE_IFELSE([ ], [cairo_cc_flag=yes], [cairo_cc_flag=no])
+	CFLAGS="$_save_cflags"
+
+	if test "x$cairo_cc_flag" = "xyes"; then
+		ifelse([$2], , :, [$2])
+	else
+		ifelse([$3], , :, [$3])
+	fi
+	AC_MSG_RESULT([$cairo_cc_flag])
+])
+
+dnl Usage:
+dnl   CAIRO_CHECK_NATIVE_ATOMIC_PRIMITIVES
+AC_DEFUN([CAIRO_CHECK_NATIVE_ATOMIC_PRIMITIVES],
+[dnl
+	AC_CACHE_CHECK([for native atomic primitives], cairo_cv_atomic_primitives,
+	[
+		cairo_cv_atomic_primitives="none"
+
+		AC_TRY_LINK([int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); }], [],
+		  cairo_cv_atomic_primitives="Intel"
+		  )
+	])
+	if test "x$cairo_cv_atomic_primitives" = xIntel; then
+		AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1,
+			  [Enable if your compiler supports the Intel __sync_* atomic primitives])
+	fi
+])
+
+dnl Usage:
+dnl   CAIRO_CHECK_ATOMIC_OP_NEEDS_MEMORY_BARRIER
+AC_DEFUN([CAIRO_CHECK_ATOMIC_OP_NEEDS_MEMORY_BARRIER],
+[dnl
+	AC_CACHE_CHECK([whether atomic ops require a memory barrier], cairo_cv_atomic_op_needs_memory_barrier,
+	[
+		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
+	])
+	if test "x$cairo_cv_atomic_op_needs_memory_barrier" = "xyes"; then
+	    AC_DEFINE_UNQUOTED(ATOMIC_OP_NEEDS_MEMORY_BARRIER, 1,
+			       [whether memory barriers are needed around atomic operations])
+	fi
+])
+
diff --git a/build/aclocal.enable.m4 b/build/aclocal.enable.m4
new file mode 100644
index 0000000..b3a0d82
--- /dev/null
+++ b/build/aclocal.enable.m4
@@ -0,0 +1,439 @@
+dnl
+dnl These are the facilities for enable/disabling various features,
+dnl and for collecting CFLAGS/LIBS and generating per feature .pc
+dnl files, assembling list of source files to compile, creating
+dnl cairo-features.h and other generated files, etc...
+dnl
+
+dnl ===========================================================================
+
+dnl
+dnl Used to force cache invalidation
+dnl
+m4_define([cr_cache_version], [6])
+
+dnl
+dnl Define a macro to enable features
+dnl  - Macro: _CAIRO_ENABLE (ID, NAME, WHAT, DEFAULT, COMMANDS)
+dnl
+dnl where:
+dnl
+dnl	ID is the sub-namespace in function names, eg. "ft" for cairo_ft_...
+dnl	NAME is the human-readable name of the feature, eg. "FreeType font"
+dnl	WHAT is the type of feature:
+dnl		"surface" for surface backends
+dnl		"font" for font backends
+dnl		"functions" for set of functions
+dnl		"" for private configurations
+dnl	DEFAULT is the default state of the feature:
+dnl		"no" for experimental features, eg. your favorite new backend
+dnl		"yes" for recommended features, eg. png functions
+dnl		"auto" for other supported features, eg. xlib surface backend
+dnl		"always" for mandatory features (can't be disabled), eg. image surface backend
+dnl	COMMANDS are run to check whether the feature can be enabled.  Their
+dnl		result may be cached, so user should not count on them being run.
+dnl		They should set use_$(ID) to something other than yes if the
+dnl		feature cannot be built, eg. "no (requires SomeThing)".  It then
+dnl		should also set $(ID)_REQUIRES/CFLAGS/LIBS/...
+dnl		appropriately.  Look at the macro definition for more details,
+dnl		or ask if in doubt.
+dnl
+AC_DEFUN([_CAIRO_ENABLE],
+[dnl
+	dnl Sanity check ID
+	m4_if(
+		[$1],
+		m4_tolower(AS_TR_SH([$1])),
+		,
+		[m4_fatal([invalid feature name `$1'])]
+	)dnl
+	m4_pushdef([cr_feature], [$1])dnl
+	m4_pushdef([cr_feature_name], m4_normalize([$2]))dnl
+	m4_pushdef([cr_feature_what], m4_normalize([$3]))dnl
+	m4_pushdef([cr_feature_default], m4_normalize([$4]))dnl
+	m4_pushdef([cr_feature_commands], [$5])dnl
+	m4_pushdef([cr_feature_commands_len], m4_len([$5]))dnl
+	dnl
+	m4_pushdef([cr_feature_arg], m4_translit([$1],_,-))dnl
+	dnl
+	dnl Sanity check default
+	m4_case(
+		cr_feature_default,
+		[no],,
+		[yes],,
+		[auto],,
+		[always],,
+		[m4_fatal([Invalid default value `]cr_feature_default[' for feature `]cr_feature['])]
+	)dnl
+	dnl
+	m4_if(cr_feature_default, [always],
+	[dnl
+		enable_$1=yes
+	],[dnl
+		AC_ARG_ENABLE(cr_feature_arg,
+			      AS_HELP_STRING([--enable-]cr_feature_arg[=@<:@no/auto/yes@:>@],
+					     [Enable cairo's ]cr_feature_name[ feature @<:@default=]cr_feature_default[@:>@]),
+			      enable_$1=$enableval, enable_$1=cr_feature_default)
+	])dnl
+	dnl
+	AS_CASE([$enable_$1],
+	[no],[dnl
+		use_$1="no (disabled, use --enable-cr_feature_arg to enable)"
+	],dnl
+	[yes|auto],[dnl
+		dnl Cache invalidating:
+		dnl
+		dnl To be extremely user-friendly, we discard cache results if
+		dnl any of the following conditions happens:
+		dnl
+		dnl   - Global cache version changes
+		dnl     This is used to force a cache invalidation for these
+		dnl     macros
+		dnl
+		dnl   - Set of cached variables changes
+		dnl     (XXX should also do if the default value of such
+		dnl     variables changes.  Argh...)
+		dnl
+		dnl   - Length of the COMMANDS string changes!
+		dnl     (This is much more friendly to the cache than caching
+		dnl     the commands string itself.  Note that this still does
+		dnl     not catch all valid cases where we should be
+		dnl     invalidting.  For example if COMMANDS uses
+		dnl     variables/macros defined outside, we don't detect changes
+		dnl     in those variables.  Also doesn't detect in-place
+		dnl     modifications like bumping verson numbers.
+		dnl     Just modify COMMANDS in an obvious way to force recheck.
+		dnl     Hashing sounds a bit too harsh to do here...)
+		dnl
+		dnl  - If feature is requested and cached results for enabling
+		dnl    feature is no.  We are going to terminate with an error
+		dnl    if this happens anyway, so we can be more friendly by
+		dnl    assuming that user installed some missing pieces since
+		dnl    last time and so we recheck.  Although even in that
+		dnl    case other cached values probably get in the way...
+		dnl
+		AS_IF([test "x$cairo_cv_[]$1[]_cache_version" != "x[]cr_cache_version" -o \
+			    "x$cairo_cv_[]$1[]_cache_commands_len" != "x[]cr_feature_commands_len" -o \
+			    "x$cairo_cv_[]$1[]_cache_vars" != "x[]_CAIRO_FEATURE_VARS"],
+		      [unset cairo_cv_[]$1[]_use])
+		AS_IF([test "x$enable_$1" = xyes -a "x$cairo_cv_[]$1[]_use" != xyes],
+		      [unset cairo_cv_[]$1[]_use])
+
+		AC_CACHE_CHECK([for cairo's ]cr_feature_name[ feature], cairo_cv_[]$1[]_use,
+		[dnl
+			echo
+			use_[]$1=yes
+			CAIRO_FEATURE_VARS_FOREACH(cr_var, [cr_feature[_]cr_var[=]m4_do([cr_var_default_]cr_var[_value])]m4_newline)
+			cr_feature_commands
+			cairo_cv_[]$1[]_use=$use_[]$1
+			cairo_cv_[]$1[]_cache_vars="_CAIRO_FEATURE_VARS"
+			cairo_cv_[]$1[]_cache_commands_len="cr_feature_commands_len"
+			cairo_cv_[]$1[]_cache_version="cr_cache_version"
+			CAIRO_FEATURE_VARS_FOREACH([cr_var], [[cairo_cv_]cr_feature[_]cr_var[=$]cr_feature[_]cr_var]m4_newline)
+			AC_MSG_CHECKING([whether cairo's ]cr_feature_name[ feature could be enabled])
+		])dnl
+
+		use_[]$1=$cairo_cv_[]$1[]_use
+
+		AS_IF([test "x$enable_$1" = "xyes" -a "x$use_$1" != xyes],
+		[dnl
+			AC_MSG_ERROR(
+				m4_case(cr_feature_default,
+					[always],	[mandatory],
+					[yes],		[recommended],
+					,		[requested]
+				) cr_feature_name[ feature could not be enabled])
+		])dnl
+	],dnl
+	[dnl	
+		AC_MSG_ERROR([invalid argument passed to --enable-]cr_feature_arg[: `$use_$1', should be one of @<:@no/auto/yes@:>@])
+	])dnl
+
+	AS_IF([test "x$use_$1" = "xyes"],
+	[dnl
+		CAIRO_FEATURE_VARS_FOREACH([cr_var], [cr_feature[_]cr_var[=$cairo_cv_]cr_feature[_]cr_var]m4_newline)
+		CAIRO_ACCUMULATED_FEATURE_VARS_FOREACH([cr_var],
+		[dnl
+			CAIRO_ACCUMULATE_UNQUOTED_BEFORE(cr_var, [$]cr_feature[_]cr_var)
+		])dnl
+	],[dnl
+		dnl If not enabled, empty the vars so no one accidentally uses them.
+		CAIRO_FEATURE_VARS_FOREACH([cr_var], [cr_feature[_]cr_var[=$cairo_cv_]cr_feature[_]cr_var]m4_newline)
+	])dnl
+
+	_CAIRO_FEATURE_HOOKS(cr_feature, cr_feature_name, cr_feature_default, cr_feature_what)dnl
+
+	m4_popdef([cr_feature])dnl
+	m4_popdef([cr_feature_name])dnl
+	m4_popdef([cr_feature_what])dnl
+	m4_popdef([cr_feature_default])dnl
+	m4_popdef([cr_feature_commands])dnl
+	m4_popdef([cr_feature_commands_len])dnl
+	m4_popdef([cr_feature_arg])dnl
+])
+
+
+dnl ===========================================================================
+
+m4_define([_CAIRO_FEATURE_VARS])
+
+dnl
+dnl CAIRO_FEATURE_VARS_REGISTER(VARS, DEFAULT-VALUE=[])
+dnl
+dnl Registers variables to be collected from feature-enabling code segments.
+dnl VARS should be a whitespace-separate list of variable names.
+dnl
+dnl DEFAULT-VALUE is m4 macros to set default value of VARS
+dnl
+AC_DEFUN([CAIRO_FEATURE_VARS_REGISTER],
+[dnl
+	m4_foreach_w([cr_var], [$1],
+		     [m4_append_uniq([_CAIRO_FEATURE_VARS], cr_var, [ ],,
+				     [m4_fatal([Feature variable `]cr_var[' already registered])])])dnl
+	m4_foreach_w([cr_var], [$1],
+	[dnl
+		m4_define([cr_var_default_]cr_var[_value], m4_default([$2],[[$ac_env_[]]cr_feature[[]_]]cr_var[[_value]]))dnl
+	])dnl
+])
+
+dnl
+dnl CAIRO_FEATURE_VARS_FOREACH(VAR, COMMANDS)
+dnl 
+dnl Run COMMANDS for each registered feature variable.
+dnl Defines VAR to the variable being processed.
+dnl
+AC_DEFUN([CAIRO_FEATURE_VARS_FOREACH],
+[dnl
+	m4_foreach_w([$1], m4_defn([_CAIRO_FEATURE_VARS]), [$2])dnl
+])
+
+
+dnl ===========================================================================
+
+m4_define([_CAIRO_ACCUMULATORS])dnl
+
+m4_define([_CAIRO_ACCUMULATORS_REGISTER],
+[dnl
+	m4_foreach_w([cr_var], [$1],
+		     [m4_append_uniq([_CAIRO_ACCUMULATORS], cr_var, [ ],,
+				     [m4_fatal([Accumulator `]cr_var[' already registered])])])dnl
+	m4_foreach_w([cr_var], [$1], [m4_define([cr_acc_]cr_var[_sep], [$2])])dnl
+	m4_foreach_w([cr_var], [$1], [[CAIRO_]cr_var[=$3]]m4_newline)dnl
+	m4_foreach_w([cr_var], [$1], [m4_pattern_allow([CAIRO_]cr_var)])dnl
+])dnl
+
+dnl
+dnl CAIRO_ACCUMULATORS_REGISTER(VARS, SEPARATOR=[], INITIAL-VALUE=[])
+dnl
+dnl Registers accumulators.  An accumulator is a shell variable that can
+dnl be accumulated to.  The macros take care of adding a SEPARATOR between
+dnl accumulated values.
+dnl
+dnl VARS should be a whitespace-separate list of variable names.  The actual
+dnl shell variable resulting for each variable is prefixed with CAIRO_.
+dnl
+AC_DEFUN([CAIRO_ACCUMULATORS_REGISTER],
+[dnl
+	_CAIRO_ACCUMULATORS_REGISTER([$1],[$2],['$3'])dnl
+])dnl
+
+dnl
+dnl Like CAIRO_ACCUMULATORS_REGISTER but INITIAL-VALUE is left unquoted,
+dnl so it can reference other shell variables for example.
+dnl
+AC_DEFUN([CAIRO_ACCUMULATORS_REGISTER_UNQUOTED],
+[dnl
+	_CAIRO_ACCUMULATORS_REGISTER([$1],[$2],["$3"])dnl
+])dnl
+
+m4_define([_CAIRO_ACCUMULATOR_CHECK],
+[dnl
+        m4_ifdef([cr_acc_$1_sep],,[m4_fatal([Accumulator ]$1[ not defined.])])dnl
+])dnl
+
+m4_define([_CAIRO_ACCUMULATE],
+[dnl
+	_CAIRO_ACCUMULATOR_CHECK([$1])dnl
+	m4_ifval([$2], [$3]m4_newline)dnl
+])dnl
+
+dnl
+dnl CAIRO_ACCUMULATE(VAR, VALUE)
+dnl
+dnl Appends VALUE to accumulator VAR
+dnl
+AC_DEFUN([CAIRO_ACCUMULATE],
+[dnl
+	_CAIRO_ACCUMULATE([$1], [$2], [CAIRO_$1="${CAIRO_$1}]m4_do([cr_acc_$1_sep])["'$2'])dnl
+])dnl
+
+dnl
+dnl CAIRO_ACCUMULATE(VAR, VALUE)
+dnl
+dnl Prepends VALUE to accumulator VAR
+dnl
+AC_DEFUN([CAIRO_ACCUMULATE_BEFORE],
+[dnl
+	_CAIRO_ACCUMULATE([$1], [$2], [CAIRO_$1='$2'"]m4_do([cr_acc_$1_sep])[${CAIRO_$1}"])dnl
+])dnl
+
+m4_define([_CAIRO_ACCUMULATE_UNQUOTED],
+[dnl
+	_CAIRO_ACCUMULATOR_CHECK([$1])dnl
+	m4_ifval([$2], [m4_bmatch([$2],[[$]],[test -n "$2" &&]) $3]m4_newline)dnl
+])dnl
+
+dnl
+dnl CAIRO_ACCUMULATE_UNQUOTED(VAR, VALUE)
+dnl
+dnl Like CAIRO_ACCUMULATE but VALUE is left unquoted,
+dnl so it can reference other shell variables for example.
+dnl
+AC_DEFUN([CAIRO_ACCUMULATE_UNQUOTED],
+[dnl
+	_CAIRO_ACCUMULATE_UNQUOTED([$1], [$2], [CAIRO_$1="${CAIRO_$1}]m4_do([cr_acc_$1_sep])[$2"])dnl
+])dnl
+
+dnl
+dnl CAIRO_ACCUMULATE_UNQUOTED_BEFORE(VAR, VALUE)
+dnl
+dnl Like CAIRO_ACCUMULATE_BEFORE but VALUE is left unquoted,
+dnl so it can reference other shell variables for example.
+dnl
+AC_DEFUN([CAIRO_ACCUMULATE_UNQUOTED_BEFORE],
+[dnl
+	_CAIRO_ACCUMULATE_UNQUOTED([$1], [$2], [CAIRO_$1="$2]m4_do([cr_acc_$1_sep])[${CAIRO_$1}"])dnl
+])dnl
+
+dnl
+dnl CAIRO_ACCUMULATORS_FOREACH(VAR, COMMANDS)
+dnl 
+dnl Run COMMANDS for each registered accumulator.
+dnl Defines VAR to the accumulator being processed.
+dnl
+AC_DEFUN([CAIRO_ACCUMULATORS_FOREACH],
+[dnl
+	m4_foreach_w([$1], m4_defn([_CAIRO_ACCUMULATORS]), [$2])dnl
+])dnl
+
+
+dnl ===========================================================================
+
+m4_define([_CAIRO_ACCUMULATED_FEATURE_VARS])dnl
+
+dnl
+dnl CAIRO_ACCUMULATED_FEATURE_VARS_REGISTER(VARS, DEFAULT-VALUE=[], SEPARATOR=[], INITIAL-VALUE=[])
+dnl
+dnl Defines VARS as feature variables and accumulators.  Also accumulates
+dnl (prepending, not appending) feature values for VARS.
+dnl
+AC_DEFUN([CAIRO_ACCUMULATED_FEATURE_VARS_REGISTER],
+[dnl
+	m4_foreach_w([cr_var], [$1],
+		     [m4_append_uniq([_CAIRO_ACCUMULATED_FEATURE_VARS], cr_var, [ ],,
+				     [m4_fatal([Accumulated feature variable `]cr_var[' already registered])])])dnl
+	CAIRO_FEATURE_VARS_REGISTER([$1],[$2])dnl
+	CAIRO_ACCUMULATORS_REGISTER_UNQUOTED([$1],[$3],[$4])dnl
+])dnl
+
+dnl
+dnl CAIRO_ACCUMULATED_FEATURE_VARS_FOREACH(VAR, COMMANDS)
+dnl 
+dnl Run COMMANDS for each registered accumulated feature variable.
+dnl Defines VAR to the variable being processed.
+dnl
+AC_DEFUN([CAIRO_ACCUMULATED_FEATURE_VARS_FOREACH],
+[dnl
+	m4_foreach_w([$1], m4_defn([_CAIRO_ACCUMULATED_FEATURE_VARS]), [$2])dnl
+])dnl
+
+dnl ===========================================================================
+
+dnl
+dnl CAIRO_FEATURE_IF_ENABLED(FEATURE=cr_feature, COMMANDS)
+dnl
+dnl Run COMMANDS if FEATURE is enabled.
+dnl
+AC_DEFUN([CAIRO_FEATURE_IF_ENABLED],
+[dnl
+	AS_IF([test "x$use_]m4_default([$1], cr_feature)[" = xyes], [$2], [$3])dnl
+])dnl
+
+m4_define([_CAIRO_FEATURE_HOOK_MATCH_SH_BOOL],
+[dnl
+	m4_case([$1],
+		[*],	[$3],
+		[no],	[AS_IF([test "x$2" != xyes], [:m4_newline()$3])],
+		[yes],	[AS_IF([test "x$2" = xyes], [:m4_newline()$3])],
+			[m4_fatal([Invalid ENABLED value `]$1['])])dnl
+])dnl
+
+m4_define([_CAIRO_FEATURE_HOOK_MATCH_M4],
+[dnl
+	m4_case([$1],
+		[*],	[$3],
+		[$2],	[$3],
+		[!$2],	,
+			[m4_bmatch([$1], [^!], [$3])])dnl
+])dnl
+
+m4_define([_CAIRO_FEATURE_HOOKS])dnl
+
+dnl
+dnl CAIRO_FEATURE_HOOK_REGISTER(ENABLED, DEFAULT, WHAT, COMMANDS)
+dnl
+dnl	ENABLED is the feature enabledness to match
+dnl	DEFAULT is the default value of features to match
+dnl	WHAT is the type of features to match
+dnl	COMMANDS is commands to run for matched features.
+dnl
+dnl Runs COMMANDS for features matching ENABLED, DEFAULT, and WHAT.
+dnl Hooks are run for each feature in the order they are added.
+dnl
+dnl DEFAULT and WHAT are matched like this:
+dnl	[*]	matches all values
+dnl	[val]	matches [val]
+dnl	[!val]	matches anything other than [val]
+dnl
+dnl ENABLED is matched like this:
+dnl 	[yes]	matches enabled features
+dnl 	[no]	matches disabled features
+dnl 	[*]	matches all features
+dnl
+dnl The following macros can be used in COMMANDS:
+dnl
+dnl	cr_feature expands to the feature id, eg "ft"
+dnl	cr_feature_name	expands to the human-readable name of the feature, eg. "FreeType font"
+dnl	cr_feature_default expands to the default state of the feature:
+dnl		"no" for experimental features, eg. your favorite new backend
+dnl		"yes" for recommended features, eg. png functions
+dnl		"auto" for other supported features, eg. xlib surface backend
+dnl		"always" for mandatory features (can't be disabled), eg. image surface backend
+dnl	cr_what expands to the type of feature:
+dnl		"surface" for surface backends
+dnl		"font" for font backends
+dnl		"functions" for set of functions
+dnl		"" for private configurations
+dnl
+dnl These four values are also set as $1 to $4.  To know if feature was
+dnl enabled from within COMMANDS, use CAIRO_FEATURE_IF_ENABLED:
+dnl
+dnl	CAIRO_FEATURE_IF_ENABLED($1, [IF-ENABLED], [IF-DISABLED])
+dnl
+dnl or compare $use_$1 to string "yes".  As in:
+dnl
+dnl	AS_IF([test "x$use_$1" = "xyes"], [IF-ENABLED], [IF-DISABLED])
+dnl
+AC_DEFUN([CAIRO_FEATURE_HOOK_REGISTER],
+[dnl
+	m4_append([_CAIRO_FEATURE_HOOKS],
+	[dnl
+		_CAIRO_FEATURE_HOOK_MATCH_M4([$2], cr_feature_default,
+		[_CAIRO_FEATURE_HOOK_MATCH_M4([$3], cr_feature_what,
+		 [_CAIRO_FEATURE_HOOK_MATCH_SH_BOOL([$1], [$use_]cr_feature,
+		  [$4]
+		)])])dnl
+	], m4_newline)dnl
+])dnl
+
+
diff --git a/build/aclocal.float.m4 b/build/aclocal.float.m4
new file mode 100644
index 0000000..18ec316
--- /dev/null
+++ b/build/aclocal.float.m4
@@ -0,0 +1,64 @@
+# AX_C_FLOAT_WORDS_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE],
+#                             [ACTION-IF-UNKNOWN])
+#
+# Checks the ordering of words within a multi-word float. This check
+# is necessary because on some systems (e.g. certain ARM systems), the
+# float word ordering can be different from the byte ordering. In a
+# multi-word float context, "big-endian" implies that the word containing
+# the sign bit is found in the memory location with the lowest address.
+# This implemenation was inspired by the AC_C_BIGENDIAN macro in autoconf.
+# -------------------------------------------------------------------------
+AC_DEFUN([AX_C_FLOAT_WORDS_BIGENDIAN],
+  [AC_CACHE_CHECK(whether float word ordering is bigendian,
+                  ax_cv_c_float_words_bigendian, [
+
+# 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
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+
+double d = 90904234967036810337470478905505011476211692735615632014797120844053488865816695273723469097858056257517020191247487429516932130503560650002327564517570778480236724525140520121371739201496540132640109977779420565776568942592.0;
+
+]])], [
+
+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
+
+])])
+
+case $ax_cv_c_float_words_bigendian in
+  yes)
+    m4_default([$1],
+      [AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
+                 [Define to 1 if your system stores words within floats
+                  with the most significant word first])]) ;;
+  no)
+    $2 ;;
+  *)
+    m4_default([$3],
+      [AC_MSG_ERROR([
+
+Unknown float word ordering. You need to manually preset
+ax_cv_c_float_words_bigendian=no (or yes) according to your system.
+
+    ])]) ;;
+esac
+
+])# AX_C_FLOAT_WORDS_BIGENDIAN
diff --git a/build/aclocal.gtk-doc.m4 b/build/aclocal.gtk-doc.m4
new file mode 100644
index 0000000..bfdfa1d
--- /dev/null
+++ b/build/aclocal.gtk-doc.m4
@@ -0,0 +1,39 @@
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH([html-dir],
+    AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST([HTML_DIR])
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE([gtk-doc],
+    AS_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [[default=no]]]),,
+    [enable_gtk_doc=no])
+
+  if test x$enable_gtk_doc = xyes; then
+    ifelse([$1],[],
+      [PKG_CHECK_EXISTS([gtk-doc],,
+                        AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))],
+      [PKG_CHECK_EXISTS([gtk-doc >= $1],,
+                        AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build gtk-doc]))])
+  fi
+
+  AC_MSG_CHECKING([whether to build gtk-doc documentation])
+  AC_MSG_RESULT($enable_gtk_doc)
+
+  AC_PATH_PROGS(GTKDOC_CHECK,gtkdoc-check,)
+
+  AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+  AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+])
diff --git a/build/aclocal.pkg.m4 b/build/aclocal.pkg.m4
new file mode 100644
index 0000000..a0b9cd4
--- /dev/null
+++ b/build/aclocal.pkg.m4
@@ -0,0 +1,155 @@
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# This program 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.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+		
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+		     [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+		[AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+	ifelse([$4], , [AC_MSG_FAILURE(dnl
+[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.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+		[$4])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/build/configure.ac.enable b/build/configure.ac.enable
index afb797f..aa5d71d 100644
--- a/build/configure.ac.enable
+++ b/build/configure.ac.enable
@@ -1,450 +1,3 @@
-dnl
-dnl These are the facilities for enable/disabling various features,
-dnl and for collecting CFLAGS/LIBS and generating per feature .pc
-dnl files, assembling list of source files to compile, and creating
-dnl cairo-features.h and other generated files.
-dnl
-
-dnl ===========================================================================
-
-dnl
-dnl Used to force cache invalidation
-dnl
-m4_define([cr_cache_version], [6])
-
-dnl
-dnl Define a macro to enable features
-dnl  - Macro: _CAIRO_ENABLE (ID, NAME, WHAT, DEFAULT, COMMANDS)
-dnl
-dnl where:
-dnl
-dnl	ID is the sub-namespace in function names, eg. "ft" for cairo_ft_...
-dnl	NAME is the human-readable name of the feature, eg. "FreeType font"
-dnl	WHAT is the type of feature:
-dnl		"surface" for surface backends
-dnl		"font" for font backends
-dnl		"functions" for set of functions
-dnl		"" for private configurations
-dnl	DEFAULT is the default state of the feature:
-dnl		"no" for experimental features, eg. your favorite new backend
-dnl		"yes" for recommended features, eg. png functions
-dnl		"auto" for other supported features, eg. xlib surface backend
-dnl		"always" for mandatory features (can't be disabled), eg. image surface backend
-dnl	COMMANDS are run to check whether the feature can be enabled.  Their
-dnl		result may be cached, so user should not count on them being run.
-dnl		They should set use_$(ID) to something other than yes if the
-dnl		feature cannot be built, eg. "no (requires SomeThing)".  It then
-dnl		should also set $(ID)_REQUIRES/CFLAGS/LIBS/...
-dnl		appropriately.  Look at the macro definition for more details,
-dnl		or ask if in doubt.
-dnl
-AC_DEFUN([_CAIRO_ENABLE],
-[dnl
-	dnl Sanity check ID
-	m4_if(
-		[$1],
-		m4_tolower(AS_TR_SH([$1])),
-		,
-		[m4_fatal([invalid feature name `$1'])]
-	)dnl
-	m4_pushdef([cr_feature], [$1])dnl
-	m4_pushdef([cr_feature_name], m4_normalize([$2]))dnl
-	m4_pushdef([cr_feature_what], m4_normalize([$3]))dnl
-	m4_pushdef([cr_feature_default], m4_normalize([$4]))dnl
-	m4_pushdef([cr_feature_commands], [$5])dnl
-	m4_pushdef([cr_feature_commands_len], m4_len([$5]))dnl
-	dnl
-	m4_pushdef([cr_feature_arg], m4_translit([$1],_,-))dnl
-	dnl
-	dnl Sanity check default
-	m4_case(
-		cr_feature_default,
-		[no],,
-		[yes],,
-		[auto],,
-		[always],,
-		[m4_fatal([Invalid default value `]cr_feature_default[' for feature `]cr_feature['])]
-	)dnl
-	dnl
-	m4_if(cr_feature_default, [always],
-	[dnl
-		enable_$1=yes
-	],[dnl
-		AC_ARG_ENABLE(cr_feature_arg,
-			      AS_HELP_STRING([--enable-]cr_feature_arg[=@<:@no/auto/yes@:>@],
-					     [Enable cairo's ]cr_feature_name[ feature @<:@default=]cr_feature_default[@:>@]),
-			      enable_$1=$enableval, enable_$1=cr_feature_default)
-	])dnl
-	dnl
-	AS_CASE([$enable_$1],
-	[no],[dnl
-		use_$1="no (disabled, use --enable-cr_feature_arg to enable)"
-	],dnl
-	[yes|auto],[dnl
-		dnl Cache invalidating:
-		dnl
-		dnl To be extremely user-friendly, we discard cache results if
-		dnl any of the following conditions happens:
-		dnl
-		dnl   - Global cache version changes
-		dnl     This is used to force a cache invalidation for these
-		dnl     macros
-		dnl
-		dnl   - Set of cached variables changes
-		dnl     (XXX should also do if the default value of such
-		dnl     variables changes.  Argh...)
-		dnl
-		dnl   - Length of the COMMANDS string changes!
-		dnl     (This is much more friendly to the cache than caching
-		dnl     the commands string itself.  Note that this still does
-		dnl     not catch all valid cases where we should be
-		dnl     invalidting.  For example if COMMANDS uses
-		dnl     variables/macros defined outside, we don't detect changes
-		dnl     in those variables.  Also doesn't detect in-place
-		dnl     modifications like bumping verson numbers.
-		dnl     Just modify COMMANDS in an obvious way to force recheck.
-		dnl     Hashing sounds a bit too harsh to do here...)
-		dnl
-		dnl  - If feature is requested and cached results for enabling
-		dnl    feature is no.  We are going to terminate with an error
-		dnl    if this happens anyway, so we can be more friendly by
-		dnl    assuming that user installed some missing pieces since
-		dnl    last time and so we recheck.  Although even in that
-		dnl    case other cached values probably get in the way...
-		dnl
-		AS_IF([test "x$cairo_cv_[]$1[]_cache_version" != "x[]cr_cache_version" -o \
-			    "x$cairo_cv_[]$1[]_cache_commands_len" != "x[]cr_feature_commands_len" -o \
-			    "x$cairo_cv_[]$1[]_cache_vars" != "x[]_CAIRO_FEATURE_VARS"],
-		      [unset cairo_cv_[]$1[]_use])
-		AS_IF([test "x$enable_$1" = xyes -a "x$cairo_cv_[]$1[]_use" != xyes],
-		      [unset cairo_cv_[]$1[]_use])
-
-		AC_CACHE_CHECK([for cairo's ]cr_feature_name[ feature], cairo_cv_[]$1[]_use,
-		[dnl
-			echo
-			use_[]$1=yes
-			CAIRO_FEATURE_VARS_FOREACH(cr_var, [cr_feature[_]cr_var[=]m4_do([cr_var_default_]cr_var[_value])]m4_newline)
-			cr_feature_commands
-			cairo_cv_[]$1[]_use=$use_[]$1
-			cairo_cv_[]$1[]_cache_vars="_CAIRO_FEATURE_VARS"
-			cairo_cv_[]$1[]_cache_commands_len="cr_feature_commands_len"
-			cairo_cv_[]$1[]_cache_version="cr_cache_version"
-			CAIRO_FEATURE_VARS_FOREACH([cr_var], [[cairo_cv_]cr_feature[_]cr_var[=$]cr_feature[_]cr_var]m4_newline)
-			AC_MSG_CHECKING([whether cairo's ]cr_feature_name[ feature could be enabled])
-		])dnl
-
-		use_[]$1=$cairo_cv_[]$1[]_use
-
-		AS_IF([test "x$enable_$1" = "xyes" -a "x$use_$1" != xyes],
-		[dnl
-			AC_MSG_ERROR(
-				m4_case(cr_feature_default,
-					[always],	[mandatory],
-					[yes],		[recommended],
-					,		[requested]
-				) cr_feature_name[ feature could not be enabled])
-		])dnl
-	],dnl
-	[dnl	
-		AC_MSG_ERROR([invalid argument passed to --enable-]cr_feature_arg[: `$use_$1', should be one of @<:@no/auto/yes@:>@])
-	])dnl
-
-	AS_IF([test "x$use_$1" = "xyes"],
-	[dnl
-		CAIRO_FEATURE_VARS_FOREACH([cr_var], [cr_feature[_]cr_var[=$cairo_cv_]cr_feature[_]cr_var]m4_newline)
-		CAIRO_ACCUMULATED_FEATURE_VARS_FOREACH([cr_var],
-		[dnl
-			CAIRO_ACCUMULATE_UNQUOTED_BEFORE(cr_var, [$]cr_feature[_]cr_var)
-		])dnl
-	],[dnl
-		dnl If not enabled, empty the vars so no one accidentally uses them.
-		CAIRO_FEATURE_VARS_FOREACH([cr_var], [cr_feature[_]cr_var[=$cairo_cv_]cr_feature[_]cr_var]m4_newline)
-	])dnl
-
-	_CAIRO_FEATURE_HOOKS(cr_feature, cr_feature_name, cr_feature_default, cr_feature_what)dnl
-
-	m4_popdef([cr_feature])dnl
-	m4_popdef([cr_feature_name])dnl
-	m4_popdef([cr_feature_what])dnl
-	m4_popdef([cr_feature_default])dnl
-	m4_popdef([cr_feature_commands])dnl
-	m4_popdef([cr_feature_commands_len])dnl
-	m4_popdef([cr_feature_arg])dnl
-])
-
-
-dnl ===========================================================================
-
-m4_define([_CAIRO_FEATURE_VARS])
-
-dnl
-dnl CAIRO_FEATURE_VARS_REGISTER(VARS, DEFAULT-VALUE=[])
-dnl
-dnl Registers variables to be collected from feature-enabling code segments.
-dnl VARS should be a whitespace-separate list of variable names.
-dnl
-dnl DEFAULT-VALUE is m4 macros to set default value of VARS
-dnl
-AC_DEFUN([CAIRO_FEATURE_VARS_REGISTER],
-[dnl
-	m4_foreach_w([cr_var], [$1],
-		     [m4_append_uniq([_CAIRO_FEATURE_VARS], cr_var, [ ],,
-				     [m4_fatal([Feature variable `]cr_var[' already registered])])])dnl
-	m4_foreach_w([cr_var], [$1],
-	[dnl
-		m4_define([cr_var_default_]cr_var[_value], m4_default([$2],[[$ac_env_[]]cr_feature[[]_]]cr_var[[_value]]))dnl
-	])dnl
-])
-
-dnl
-dnl CAIRO_FEATURE_VARS_FOREACH(VAR, COMMANDS)
-dnl 
-dnl Run COMMANDS for each registered feature variable.
-dnl Defines VAR to the variable being processed.
-dnl
-AC_DEFUN([CAIRO_FEATURE_VARS_FOREACH],
-[dnl
-	m4_foreach_w([$1], m4_defn([_CAIRO_FEATURE_VARS]), [$2])dnl
-])
-
-
-dnl ===========================================================================
-
-m4_define([_CAIRO_ACCUMULATORS])dnl
-
-m4_define([_CAIRO_ACCUMULATORS_REGISTER],
-[dnl
-	m4_foreach_w([cr_var], [$1],
-		     [m4_append_uniq([_CAIRO_ACCUMULATORS], cr_var, [ ],,
-				     [m4_fatal([Accumulator `]cr_var[' already registered])])])dnl
-	m4_foreach_w([cr_var], [$1], [m4_define([cr_acc_]cr_var[_sep], [$2])])dnl
-	m4_foreach_w([cr_var], [$1], [[CAIRO_]cr_var[=$3]]m4_newline)dnl
-	m4_foreach_w([cr_var], [$1], [m4_pattern_allow([CAIRO_]cr_var)])dnl
-])dnl
-
-dnl
-dnl CAIRO_ACCUMULATORS_REGISTER(VARS, SEPARATOR=[], INITIAL-VALUE=[])
-dnl
-dnl Registers accumulators.  An accumulator is a shell variable that can
-dnl be accumulated to.  The macros take care of adding a SEPARATOR between
-dnl accumulated values.
-dnl
-dnl VARS should be a whitespace-separate list of variable names.  The actual
-dnl shell variable resulting for each variable is prefixed with CAIRO_.
-dnl
-AC_DEFUN([CAIRO_ACCUMULATORS_REGISTER],
-[dnl
-	_CAIRO_ACCUMULATORS_REGISTER([$1],[$2],['$3'])dnl
-])dnl
-
-dnl
-dnl Like CAIRO_ACCUMULATORS_REGISTER but INITIAL-VALUE is left unquoted,
-dnl so it can reference other shell variables for example.
-dnl
-AC_DEFUN([CAIRO_ACCUMULATORS_REGISTER_UNQUOTED],
-[dnl
-	_CAIRO_ACCUMULATORS_REGISTER([$1],[$2],["$3"])dnl
-])dnl
-
-m4_define([_CAIRO_ACCUMULATOR_CHECK],
-[dnl
-        m4_ifdef([cr_acc_$1_sep],,[m4_fatal([Accumulator ]$1[ not defined.])])dnl
-])dnl
-
-m4_define([_CAIRO_ACCUMULATE],
-[dnl
-	_CAIRO_ACCUMULATOR_CHECK([$1])dnl
-	m4_ifval([$2], [$3]m4_newline)dnl
-])dnl
-
-dnl
-dnl CAIRO_ACCUMULATE(VAR, VALUE)
-dnl
-dnl Appends VALUE to accumulator VAR
-dnl
-AC_DEFUN([CAIRO_ACCUMULATE],
-[dnl
-	_CAIRO_ACCUMULATE([$1], [$2], [CAIRO_$1="${CAIRO_$1}]m4_do([cr_acc_$1_sep])["'$2'])dnl
-])dnl
-
-dnl
-dnl CAIRO_ACCUMULATE(VAR, VALUE)
-dnl
-dnl Prepends VALUE to accumulator VAR
-dnl
-AC_DEFUN([CAIRO_ACCUMULATE_BEFORE],
-[dnl
-	_CAIRO_ACCUMULATE([$1], [$2], [CAIRO_$1='$2'"]m4_do([cr_acc_$1_sep])[${CAIRO_$1}"])dnl
-])dnl
-
-m4_define([_CAIRO_ACCUMULATE_UNQUOTED],
-[dnl
-	_CAIRO_ACCUMULATOR_CHECK([$1])dnl
-	m4_ifval([$2], [m4_bmatch([$2],[[$]],[test -n "$2" &&]) $3]m4_newline)dnl
-])dnl
-
-dnl
-dnl CAIRO_ACCUMULATE_UNQUOTED(VAR, VALUE)
-dnl
-dnl Like CAIRO_ACCUMULATE but VALUE is left unquoted,
-dnl so it can reference other shell variables for example.
-dnl
-AC_DEFUN([CAIRO_ACCUMULATE_UNQUOTED],
-[dnl
-	_CAIRO_ACCUMULATE_UNQUOTED([$1], [$2], [CAIRO_$1="${CAIRO_$1}]m4_do([cr_acc_$1_sep])[$2"])dnl
-])dnl
-
-dnl
-dnl CAIRO_ACCUMULATE_UNQUOTED_BEFORE(VAR, VALUE)
-dnl
-dnl Like CAIRO_ACCUMULATE_BEFORE but VALUE is left unquoted,
-dnl so it can reference other shell variables for example.
-dnl
-AC_DEFUN([CAIRO_ACCUMULATE_UNQUOTED_BEFORE],
-[dnl
-	_CAIRO_ACCUMULATE_UNQUOTED([$1], [$2], [CAIRO_$1="$2]m4_do([cr_acc_$1_sep])[${CAIRO_$1}"])dnl
-])dnl
-
-dnl
-dnl CAIRO_ACCUMULATORS_FOREACH(VAR, COMMANDS)
-dnl 
-dnl Run COMMANDS for each registered accumulator.
-dnl Defines VAR to the accumulator being processed.
-dnl
-AC_DEFUN([CAIRO_ACCUMULATORS_FOREACH],
-[dnl
-	m4_foreach_w([$1], m4_defn([_CAIRO_ACCUMULATORS]), [$2])dnl
-])dnl
-
-
-dnl ===========================================================================
-
-m4_define([_CAIRO_ACCUMULATED_FEATURE_VARS])dnl
-
-dnl
-dnl CAIRO_ACCUMULATED_FEATURE_VARS_REGISTER(VARS, DEFAULT-VALUE=[], SEPARATOR=[], INITIAL-VALUE=[])
-dnl
-dnl Defines VARS as feature variables and accumulators.  Also accumulates
-dnl (prepending, not appending) feature values for VARS.
-dnl
-AC_DEFUN([CAIRO_ACCUMULATED_FEATURE_VARS_REGISTER],
-[dnl
-	m4_foreach_w([cr_var], [$1],
-		     [m4_append_uniq([_CAIRO_ACCUMULATED_FEATURE_VARS], cr_var, [ ],,
-				     [m4_fatal([Accumulated feature variable `]cr_var[' already registered])])])dnl
-	CAIRO_FEATURE_VARS_REGISTER([$1],[$2])dnl
-	CAIRO_ACCUMULATORS_REGISTER_UNQUOTED([$1],[$3],[$4])dnl
-])dnl
-
-dnl
-dnl CAIRO_ACCUMULATED_FEATURE_VARS_FOREACH(VAR, COMMANDS)
-dnl 
-dnl Run COMMANDS for each registered accumulated feature variable.
-dnl Defines VAR to the variable being processed.
-dnl
-AC_DEFUN([CAIRO_ACCUMULATED_FEATURE_VARS_FOREACH],
-[dnl
-	m4_foreach_w([$1], m4_defn([_CAIRO_ACCUMULATED_FEATURE_VARS]), [$2])dnl
-])dnl
-
-dnl ===========================================================================
-
-dnl
-dnl CAIRO_FEATURE_IF_ENABLED(FEATURE=cr_feature, COMMANDS)
-dnl
-dnl Run COMMANDS if FEATURE is enabled.
-dnl
-AC_DEFUN([CAIRO_FEATURE_IF_ENABLED],
-[dnl
-	AS_IF([test "x$use_]m4_default([$1], cr_feature)[" = xyes], [$2], [$3])dnl
-])dnl
-
-m4_define([_CAIRO_FEATURE_HOOK_MATCH_SH_BOOL],
-[dnl
-	m4_case([$1],
-		[*],	[$3],
-		[no],	[AS_IF([test "x$2" != xyes], [:m4_newline()$3])],
-		[yes],	[AS_IF([test "x$2" = xyes], [:m4_newline()$3])],
-			[m4_fatal([Invalid ENABLED value `]$1['])])dnl
-])dnl
-
-m4_define([_CAIRO_FEATURE_HOOK_MATCH_M4],
-[dnl
-	m4_case([$1],
-		[*],	[$3],
-		[$2],	[$3],
-		[!$2],	,
-			[m4_bmatch([$1], [^!], [$3])])dnl
-])dnl
-
-m4_define([_CAIRO_FEATURE_HOOKS])dnl
-
-dnl
-dnl CAIRO_FEATURE_HOOK_REGISTER(ENABLED, DEFAULT, WHAT, COMMANDS)
-dnl
-dnl	ENABLED is the feature enabledness to match
-dnl	DEFAULT is the default value of features to match
-dnl	WHAT is the type of features to match
-dnl	COMMANDS is commands to run for matched features.
-dnl
-dnl Runs COMMANDS for features matching ENABLED, DEFAULT, and WHAT.
-dnl Hooks are run for each feature in the order they are added.
-dnl
-dnl DEFAULT and WHAT are matched like this:
-dnl	[*]	matches all values
-dnl	[val]	matches [val]
-dnl	[!val]	matches anything other than [val]
-dnl
-dnl ENABLED is matched like this:
-dnl 	[yes]	matches enabled features
-dnl 	[no]	matches disabled features
-dnl 	[*]	matches all features
-dnl
-dnl The following macros can be used in COMMANDS:
-dnl
-dnl	cr_feature expands to the feature id, eg "ft"
-dnl	cr_feature_name	expands to the human-readable name of the feature, eg. "FreeType font"
-dnl	cr_feature_default expands to the default state of the feature:
-dnl		"no" for experimental features, eg. your favorite new backend
-dnl		"yes" for recommended features, eg. png functions
-dnl		"auto" for other supported features, eg. xlib surface backend
-dnl		"always" for mandatory features (can't be disabled), eg. image surface backend
-dnl	cr_what expands to the type of feature:
-dnl		"surface" for surface backends
-dnl		"font" for font backends
-dnl		"functions" for set of functions
-dnl		"" for private configurations
-dnl
-dnl These four values are also set as $1 to $4.  To know if feature was
-dnl enabled from within COMMANDS, use CAIRO_FEATURE_IF_ENABLED:
-dnl
-dnl	CAIRO_FEATURE_IF_ENABLED($1, [IF-ENABLED], [IF-DISABLED])
-dnl
-dnl or compare $use_$1 to string "yes".  As in:
-dnl
-dnl	AS_IF([test "x$use_$1" = "xyes"], [IF-ENABLED], [IF-DISABLED])
-dnl
-AC_DEFUN([CAIRO_FEATURE_HOOK_REGISTER],
-[dnl
-	m4_append([_CAIRO_FEATURE_HOOKS],
-	[dnl
-		_CAIRO_FEATURE_HOOK_MATCH_M4([$2], cr_feature_default,
-		[_CAIRO_FEATURE_HOOK_MATCH_M4([$3], cr_feature_what,
-		 [_CAIRO_FEATURE_HOOK_MATCH_SH_BOOL([$1], [$use_]cr_feature,
-		  [$4]
-		)])])dnl
-	], m4_newline)dnl
-])dnl
-
-
-
-dnl ===========================================================================
-dnl
-dnl Cairo-specific configuration facilities
-dnl
-dnl ===========================================================================
-
-
 
 dnl
 dnl Define macros to enable various features.
diff --git a/configure.ac b/configure.ac
index ec4d3eb..885ae0b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,6 +6,7 @@ AC_INIT([cairo],
 AC_CONFIG_SRCDIR(src/cairo.h)
 AC_CONFIG_HEADERS(config.h)
 AC_CONFIG_AUX_DIR(build)
+AC_CONFIG_MACRO_DIR(build)
 AM_INIT_AUTOMAKE([1.8 gnu -Wall no-define])
 
 dnl ===========================================================================
diff --git a/doc/public/tmpl/cairo-image.sgml b/doc/public/tmpl/cairo-image.sgml
index 6ac615b..0cfcd87 100644
--- a/doc/public/tmpl/cairo-image.sgml
+++ b/doc/public/tmpl/cairo-image.sgml
@@ -31,7 +31,6 @@ This macro was added for completeness in cairo 1.8.
 @Since: 1.8
 
 
-
 <!-- ##### ENUM cairo_format_t ##### -->
 <para>
 
diff --git a/doc/public/tmpl/cairo-user-fonts.sgml b/doc/public/tmpl/cairo-user-fonts.sgml
index 14b3257..c8f3534 100644
--- a/doc/public/tmpl/cairo-user-fonts.sgml
+++ b/doc/public/tmpl/cairo-user-fonts.sgml
@@ -33,7 +33,6 @@ this feature (1.8 and later).
 @Since: 1.8
 
 
-
 <!-- ##### USER_FUNCTION cairo_user_scaled_font_init_func_t ##### -->
 <para>
 


More information about the cairo-commit mailing list