mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-21 12:08:10 +02:00
We'd been wanting some of the warnings in -Wextra for a long time, but we had failed in tryingto squelch some of the undesired warnings. We finally figured out how to do this correctly by simply ordering the warnings correctly.
866 lines
29 KiB
Text
866 lines
29 KiB
Text
AC_PREREQ(2.54)
|
|
|
|
# cairo package version number, (as distinct from shared library version)
|
|
# An odd micro number indicates in-progress development, (eg. from git/cvs)
|
|
# An even micro number indicates a released version.
|
|
m4_define(cairo_version_major, 1)
|
|
m4_define(cairo_version_minor, 2)
|
|
m4_define(cairo_version_micro, 5)
|
|
|
|
AC_INIT([cairo],
|
|
cairo_version_major.cairo_version_minor.cairo_version_micro,
|
|
[http://bugs.freedesktop.org/enter_bug.cgi?product=cairo])
|
|
AC_CONFIG_SRCDIR(src/cairo.h)
|
|
AC_CONFIG_HEADERS(config.h)
|
|
AM_INIT_AUTOMAKE([1.7])
|
|
|
|
dnl ===========================================================================
|
|
|
|
# libtool shared library version
|
|
|
|
# Increment if the interface has additions, changes, removals.
|
|
LT_CURRENT=11
|
|
|
|
# Increment any time the source changes; set to
|
|
# 0 if you increment CURRENT
|
|
LT_REVISION=2
|
|
|
|
# Increment if any interfaces have been added; set to 0
|
|
# if any interfaces have been removed. removal has
|
|
# precedence over adding, so set to 0 if both happened.
|
|
LT_AGE=9
|
|
|
|
dnl ===========================================================================
|
|
|
|
VERSION_INFO="$LT_CURRENT:$LT_REVISION:$LT_AGE"
|
|
AC_SUBST(VERSION_INFO)
|
|
|
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
|
AC_SUBST(LT_CURRENT_MINUS_AGE)
|
|
|
|
CAIRO_VERSION_MAJOR=cairo_version_major()
|
|
CAIRO_VERSION_MINOR=cairo_version_minor()
|
|
CAIRO_VERSION_MICRO=cairo_version_micro()
|
|
AC_SUBST(CAIRO_VERSION_MAJOR)
|
|
AC_SUBST(CAIRO_VERSION_MINOR)
|
|
AC_SUBST(CAIRO_VERSION_MICRO)
|
|
|
|
AM_MAINTAINER_MODE
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_CPP
|
|
AM_PROG_LIBTOOL
|
|
AC_STDC_HEADERS
|
|
AC_C_BIGENDIAN
|
|
|
|
dnl ===========================================================================
|
|
dnl === Local macros
|
|
dnl ===========================================================================
|
|
|
|
# _CHECK_FUNCS_WITH_FLAGS(FUNCTION..., CFLAGS, LIBS
|
|
# [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
|
|
# Like AC_CHECK_FUNCS but with additional CFLAGS and LIBS
|
|
# --------------------------------------------------------------------
|
|
AC_DEFUN([_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 ===========================================================================
|
|
|
|
AC_CHECK_FUNCS(vasnprintf)
|
|
|
|
AC_CHECK_LIBM
|
|
LIBS="$LIBS $LIBM"
|
|
|
|
AC_CHECK_LIB(z, compress,
|
|
[AC_CHECK_HEADER(zlib.h, [have_libz=yes],
|
|
[have_libz="no (requires zlib http://www.gzip.org/zlib/)"])],
|
|
[have_libz="no (requires zlib http://www.gzip.org/zlib/)"])
|
|
|
|
dnl ===========================================================================
|
|
|
|
PKG_PROG_PKG_CONFIG
|
|
|
|
dnl ===========================================================================
|
|
dnl
|
|
dnl cairo_cache_version should be increased every time that the backend
|
|
dnl detection stuff changes in a way that removing the config.cache file may be
|
|
dnl needed for correct operation.
|
|
dnl
|
|
m4_define(cairo_cache_version, 4)
|
|
|
|
dnl ===========================================================================
|
|
dnl
|
|
dnl Define a macro to enable backends.
|
|
dnl - Macro: CAIRO_BACKEND_ENABLE (NAMESPACE, NAME, ARG, FEATURE_NAME, DEFAULT, COMMANDS)
|
|
dnl
|
|
dnl where:
|
|
dnl
|
|
dnl NAMESPACE is the sub-namespace in function names, eg. "ft" for cairo_ft_...
|
|
dnl NAME is the human-readable name of the backend, eg. "FreeType font"
|
|
dnl ARG is what enables the backend, eg. "freetype" for --enable-freetype
|
|
dnl FEATURE_NAME is what's used in cairo-features.h, eg. FT_FONT for CAIRO_HAS_FT_FONT
|
|
dnl DEFAULT is the default state of the backend:
|
|
dnl "no" for experimental backends, eg. your favorite new backend
|
|
dnl "yes" for mandatory backends, eg. png
|
|
dnl "auto" for other supported backends, eg. xlib
|
|
dnl COMMANDS are run to check whether the backend can be enabled. Their
|
|
dnl result may be cached, so user should not count on them being run.
|
|
dnl They should set use_$(NAMESPACE) to something other than yes if the
|
|
dnl backend cannot be built, eg. "no (requires SomeThing)". It then
|
|
dnl should also set $(NAMESPACE)_REQUIRES/CFLAGS/LIBS/...
|
|
dnl appropriately. Look at the macro definition for more details,
|
|
dnl or ask if in doubt.
|
|
dnl
|
|
AC_DEFUN([CAIRO_BACKEND_ENABLE],
|
|
[AC_ARG_ENABLE([$3],
|
|
AS_HELP_STRING([--enable-$3=@<:@no/auto/yes@:>@],
|
|
[Enable cairo's $2 backend @<:@default=$5@:>@]),
|
|
enable_$1=$enableval, enable_$1=$5)
|
|
if test "x$enable_$1" = xno; then
|
|
use_$1="no (disabled, use --enable-$3 to enable)"
|
|
else
|
|
if test "x$cairo_cv_backend_[]$1[]_cache_version" != "x[]cairo_cache_version"; then
|
|
# cached results for this backend (if any) are stale. force rechecking.
|
|
unset cairo_cv_backend_[]$1[]_use
|
|
fi
|
|
AC_CACHE_CHECK([for cairo's $2 backend], cairo_cv_backend_[]$1[]_use,
|
|
[echo
|
|
use_[]$1=yes
|
|
$1[]_REQUIRES=$ac_env_[]$1[]_REQUIRES_value
|
|
$1[]_CFLAGS=$ac_env_[]$1[]_CFLAGS_value
|
|
$1[]_LIBS=$ac_env_[]$1[]_LIBS_value
|
|
$1[]_NONPKGCONFIG_CFLAGS=$ac_env_[]$1[]_NONPKGCONFIG_CFLAGS_value
|
|
$1[]_NONPKGCONFIG_LIBS=$ac_env_[]$1[]_NONPKGCONFIG_LIBS_value
|
|
$1[]_BASE=cairo
|
|
$6
|
|
cairo_cv_backend_[]$1[]_use=$use_[]$1
|
|
cairo_cv_backend_[]$1[]_cache_version=cairo_cache_version
|
|
cairo_cv_backend_[]$1[]_requires=$[]$1[]_REQUIRES
|
|
cairo_cv_backend_[]$1[]_cflags=$[]$1[]_CFLAGS
|
|
cairo_cv_backend_[]$1[]_libs=$[]$1[]_LIBS
|
|
cairo_cv_backend_[]$1[]_nonpkgconfig_cflags=$[]$1[]_NONPKGCONFIG_CFLAGS
|
|
cairo_cv_backend_[]$1[]_nonpkgconfig_libs=$[]$1[]_NONPKGCONFIG_LIBS
|
|
cairo_cv_backend_[]$1[]_base=$[]$1[]_BASE
|
|
AC_MSG_CHECKING([whether cairo's $2 backend could be enabled])])
|
|
|
|
use_[]$1=$cairo_cv_backend_[]$1[]_use
|
|
$1[]_BASE=$cairo_cv_backend_[]$1[]_base
|
|
|
|
$1[]_REQUIRES="$cairo_cv_backend_[]$1[]_requires "
|
|
$1[]_CFLAGS="$cairo_cv_backend_[]$1[]_cflags "
|
|
$1[]_LIBS="$cairo_cv_backend_[]$1[]_libs "
|
|
$1[]_NONPKGCONFIG_CFLAGS="$cairo_cv_backend_[]$1[]_nonpkgconfig_cflags "
|
|
$1[]_NONPKGCONFIG_LIBS="$cairo_cv_backend_[]$1[]_nonpkgconfig_libs "
|
|
|
|
# null the ones that only have space
|
|
test "x$$1[]_REQUIRES" = "x " && $1[]_REQUIRES=""
|
|
test "x$$1[]_CFLAGS" = "x " && $1[]_CFLAGS=""
|
|
test "x$$1[]_LIBS" = "x " && $1[]_LIBS=""
|
|
test "x$$1[]_NONPKGCONFIG_CFLAGS" = "x " && $1[]_NONPKGCONFIG_CFLAGS=""
|
|
test "x$$1[]_NONPKGCONFIG_LIBS" = "x " && $1[]_NONPKGCONFIG_LIBS=""
|
|
|
|
case $enable_[]$1 in
|
|
yes)
|
|
AS_IF([test "x$use_[]$1" = xyes],,[
|
|
AC_MSG_ERROR([requested $2 backend could not be enabled])
|
|
])
|
|
;;
|
|
auto)
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([invalid argument passed to --enable-$3: $use_$1, should be one of @<:@no/auto/yes@:>@])
|
|
;;
|
|
esac
|
|
if test "x$use_[]$1" = xyes; then
|
|
CAIRO_FEATURES="$4 $CAIRO_FEATURES"
|
|
CAIRO_REQUIRES="$$1_REQUIRES$CAIRO_REQUIRES"
|
|
CAIRO_CFLAGS="$$1_NONPKGCONFIG_CFLAGS$$1_CFLAGS$CAIRO_CFLAGS"
|
|
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"
|
|
outfile=`echo src/cairo-$1.pc | sed -e s/_/-/g`
|
|
AC_MSG_NOTICE([creating $outfile])
|
|
mkdir -p src
|
|
AS_IF([sed \
|
|
-e "s,@backend_name@,$1,g" \
|
|
-e "s,@Backend_Name@,$2,g" \
|
|
-e "s,@BACKEND_BASE@,$$1_BASE,g" \
|
|
-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 > $outfile],,[
|
|
rm -f "$outfile"
|
|
AC_MSG_ERROR([failed creating $outfile])
|
|
])
|
|
fi
|
|
fi
|
|
AM_CONDITIONAL(CAIRO_HAS_$4, test "x$use_$1" = xyes)
|
|
])
|
|
|
|
CAIRO_FEATURES=""
|
|
CAIRO_REQUIRES=""
|
|
CAIRO_NONPKGCONFIG_CFLAGS=""
|
|
CAIRO_NONPKGCONFIG_LIBS="$LIBM"
|
|
CAIRO_CFLAGS=$CAIRO_NONPKGCONFIG_CFLAGS
|
|
CAIRO_LIBS=$CAIRO_NONPKGCONFIG_LIBS
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(xlib, Xlib, xlib, XLIB_SURFACE, auto, [
|
|
xlib_REQUIRES="x11"
|
|
PKG_CHECK_MODULES(xlib, $xlib_REQUIRES, ,
|
|
[xlib_REQUIRES=""
|
|
AC_PATH_XTRA
|
|
if test "x$no_x" = xyes; then
|
|
use_xlib="no (requires X development libraries)"
|
|
else
|
|
xlib_NONPKGCONFIG_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
|
|
xlib_NONPKGCONFIG_CFLAGS=$X_CFLAGS
|
|
fi])
|
|
])
|
|
|
|
if test "x$use_xlib" = xyes; then
|
|
_CHECK_FUNCS_WITH_FLAGS(XrmFinalize, $xlib_CFLAGS, $xlib_LIBS)
|
|
fi
|
|
|
|
CAIRO_BACKEND_ENABLE(xlib_xrender, Xlib Xrender, xlib-xrender, XLIB_XRENDER_SURFACE, auto, [
|
|
if test "x$use_xlib" != "xyes"; then
|
|
use_xlib_xrender="no (requires --enable-xlib)"
|
|
else
|
|
dnl Check for Xrender header files if the Xrender package is not installed:
|
|
xlib_xrender_BASE=cairo-xlib
|
|
xlib_xrender_REQUIRES="xrender >= 0.6"
|
|
PKG_CHECK_MODULES(xlib_xrender, $xlib_xrender_REQUIRES, ,
|
|
[xlib_xrender_REQUIRES=""
|
|
AC_CHECK_HEADER(X11/extensions/Xrender.h,
|
|
[xlib_xrender_NONPKGCONFIG_LIBS="-lXrender"],
|
|
[use_xlib_xrender="no (requires Xrender http://freedesktop.org/Software/xlibs)"])])
|
|
fi
|
|
])
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(quartz, Quartz, quartz, QUARTZ_SURFACE, no, [
|
|
dnl There is no pkgconfig for quartz; lets do a header check
|
|
AC_CHECK_HEADER(Carbon/Carbon.h, , [use_quartz="no (Carbon headers not found)"])
|
|
quartz_LIBS="-Xlinker -framework -Xlinker Carbon"
|
|
])
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(xcb, XCB, xcb, XCB_SURFACE, no, [
|
|
xcb_REQUIRES="xcb xcb-render xcb-renderutil"
|
|
PKG_CHECK_MODULES(xcb, $xcb_REQUIRES, , [
|
|
use_xcb="no (requires XCB http://xcb.freedesktop.org)"])
|
|
])
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(win32, Microsoft Windows, win32, WIN32_SURFACE, auto, [
|
|
case "$host" in
|
|
*-*-mingw*|*-*-cygwin*)
|
|
:
|
|
;;
|
|
*)
|
|
use_win32="no (requires a Win32 platform)"
|
|
;;
|
|
esac
|
|
win32_LIBS="-lgdi32 -lmsimg32"
|
|
])
|
|
|
|
CAIRO_BACKEND_ENABLE(win32_font, Microsoft Windows font, win32-font, WIN32_FONT, auto, [
|
|
use_win32_font=$use_win32
|
|
])
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(beos, BeOS/Zeta, beos, BEOS_SURFACE, no, [
|
|
case "$host" in
|
|
*-*-beos)
|
|
dnl Add libbe and libzeta if available
|
|
AC_CHECK_LIB(be,main,beos_LIBS="$beos_LIBS -lbe")
|
|
AC_CHECK_LIB(zeta,main,beos_LIBS="$beos_LIBS -lzeta")
|
|
;;
|
|
*)
|
|
use_beos="no (requires a BeOS platform)"
|
|
;;
|
|
esac
|
|
])
|
|
|
|
if test "x$use_beos" = "xyes"; then
|
|
AC_PROG_CXX
|
|
fi
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(png, PNG, png, PNG_FUNCTIONS, yes, [
|
|
use_png=no
|
|
AC_ARG_VAR([png_REQUIRES], [module name for libpng to search for using pkg-config])
|
|
if test "x$png_REQUIRES" = x; then
|
|
# libpng13 is GnuWin32's libpng-1.2.8 :-(
|
|
for l in libpng12 libpng13 libpng10 ; do
|
|
if $PKG_CONFIG --exists $l ; then
|
|
png_REQUIRES=$l
|
|
use_png=yes
|
|
break
|
|
fi
|
|
done
|
|
else
|
|
use_png=yes
|
|
fi
|
|
|
|
if test "x$use_png" = "xyes" ; then
|
|
PKG_CHECK_MODULES(png, $png_REQUIRES)
|
|
else
|
|
AC_MSG_WARN([Could not find libpng in the pkg-config search path])
|
|
fi
|
|
])
|
|
|
|
if test "x$use_png" = "xyes"; then
|
|
:
|
|
else
|
|
AC_MSG_WARN([*** To run the tests, cairo must be built with png support ***])
|
|
fi
|
|
|
|
dnl ===========================================================================
|
|
|
|
GLITZ_MIN_VERSION=0.5.1
|
|
CAIRO_BACKEND_ENABLE(glitz, glitz, glitz, GLITZ_SURFACE, no, [
|
|
glitz_REQUIRES="glitz >= $GLITZ_MIN_VERSION"
|
|
PKG_CHECK_MODULES(glitz, $glitz_REQUIRES, , [
|
|
use_glitz="no (requires glitz http://freedesktop.org/Software/glitz)"])
|
|
])
|
|
|
|
if test "x$use_glitz" = "xyes";then
|
|
PKG_CHECK_MODULES(GLITZ_AGL, glitz-agl >= $GLITZ_MIN_VERSION,
|
|
[have_glitz_agl=yes], [have_glitz_agl=no; echo $MYSTUFF_PKG_ERRORS])
|
|
PKG_CHECK_MODULES(GLITZ_EGL, glitz-egl >= $GLITZ_MIN_VERSION,
|
|
[have_glitz_egl=yes], [have_glitz_egl=no; echo $MYSTUFF_PKG_ERRORS])
|
|
PKG_CHECK_MODULES(GLITZ_GLX, glitz-glx >= $GLITZ_MIN_VERSION,
|
|
[have_glitz_glx=yes], [have_glitz_glx=no; echo $MYSTUFF_PKG_ERRORS])
|
|
PKG_CHECK_MODULES(GLITZ_WGL, glitz-wgl >= $GLITZ_MIN_VERSION,
|
|
[have_glitz_wgl=yes], [have_glitz_wgl=no; echo $MYSTUFF_PKG_ERRORS])
|
|
|
|
if test "x$have_glitz_agl" = "xyes";then
|
|
AC_DEFINE(CAIRO_CAN_TEST_GLITZ_AGL_SURFACE, 1, [define if glitz backend can be tested against agl])
|
|
fi
|
|
if test "x$have_glitz_egl" = "xyes";then
|
|
AC_DEFINE(CAIRO_CAN_TEST_GLITZ_EGL_SURFACE, 1, [define if glitz backend can be tested against egl])
|
|
fi
|
|
if test "x$have_glitz_glx" = "xyes";then
|
|
AC_DEFINE(CAIRO_CAN_TEST_GLITZ_GLX_SURFACE, 1, [define if glitz backend can be tested against glx])
|
|
fi
|
|
if test "x$have_glitz_wgl" = "xyes";then
|
|
AC_DEFINE(CAIRO_CAN_TEST_GLITZ_WGL_SURFACE, 1, [define if glitz backend can be tested against wgl])
|
|
fi
|
|
fi
|
|
|
|
AM_CONDITIONAL(CAIRO_CAN_TEST_GLITZ_AGL_SURFACE, test "x$have_glitz_agl" = "xyes")
|
|
AM_CONDITIONAL(CAIRO_CAN_TEST_GLITZ_EGL_SURFACE, test "x$have_glitz_egl" = "xyes")
|
|
AM_CONDITIONAL(CAIRO_CAN_TEST_GLITZ_GLX_SURFACE, test "x$have_glitz_glx" = "xyes")
|
|
AM_CONDITIONAL(CAIRO_CAN_TEST_GLITZ_WGL_SURFACE, test "x$have_glitz_wgl" = "xyes")
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(directfb, directfb, directfb, DIRECTFB_SURFACE, no, [
|
|
directfb_REQUIRES=directfb
|
|
PKG_CHECK_MODULES(directfb, $directfb_REQUIRES, ,
|
|
[use_directfb="no (requires directfb http://www.directfb.org)"])
|
|
])
|
|
|
|
dnl ===========================================================================
|
|
|
|
# We use pkg-config to look for freetype2, but fall back to
|
|
# freetype-config if it fails. We prefer pkg-config, since we can
|
|
# then just put freetype2 >= $FREETYPE_MIN_VERSION in
|
|
# Requires.private, but at least up to 2003-06-07, there was no
|
|
# freetype2.pc in the release.
|
|
#
|
|
# FreeType versions come in three forms:
|
|
# release (such as 2.1.5)
|
|
# libtool (such as 9.4.3) (returned by freetype-config and pkg-config)
|
|
# platform-specific/soname (such as 6.3.4)
|
|
# and they recommend you never use the platform-specific version
|
|
# (see docs/VERSION.DLL in freetype2 sources)
|
|
#
|
|
# Set these as appropriate:
|
|
|
|
# release number - for information only
|
|
FREETYPE_MIN_RELEASE=2.1.0
|
|
# libtool-specific version - this is what is checked
|
|
FREETYPE_MIN_VERSION=8.0.2
|
|
|
|
CAIRO_BACKEND_ENABLE(ft, FreeType font, freetype, FT_FONT, auto, [
|
|
ft_REQUIRES="fontconfig"
|
|
PKG_CHECK_MODULES(FONTCONFIG, $ft_REQUIRES,
|
|
[_CHECK_FUNCS_WITH_FLAGS(FcFini, $ft_CFLAGS, $ft_LIBS)],
|
|
[use_ft="no (requires fontconfig"])
|
|
|
|
if test "x$use_ft" = "xyes"; then
|
|
PKG_CHECK_MODULES(FREETYPE, freetype2 >= $FREETYPE_MIN_VERSION,
|
|
[freetype_pkgconfig=yes], [freetype_pkgconfig=no])
|
|
|
|
if test "x$freetype_pkgconfig" = "xyes"; then
|
|
ft_REQUIRES="freetype2 >= $FREETYPE_MIN_VERSION $ft_REQUIRES"
|
|
else
|
|
|
|
if test -z "$FREETYPE_CONFIG"; then
|
|
AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
|
|
fi
|
|
if test "x$FREETYPE_CONFIG" = "xno" ; then
|
|
use_ft='no (freetype-config not found in path or $FREETYPE_CONFIG)'
|
|
else
|
|
AC_MSG_CHECKING(freetype2 libtool version)
|
|
|
|
FREETYPE_VERSION=`$FREETYPE_CONFIG --version`
|
|
|
|
VERSION_DEC=`echo $FREETYPE_VERSION | awk -F. '{printf("%d\n", 10000*$1 + 100*$2 + $3)};'`
|
|
MIN_VERSION_DEC=`echo $FREETYPE_MIN_VERSION | awk -F. '{printf("%d\n", 10000*$1 + 100*$2 + $3)};'`
|
|
if test $VERSION_DEC -lt $MIN_VERSION_DEC; then
|
|
AC_MSG_RESULT($FREETYPE_VERSION - Too old)
|
|
use_ft="no ($FREETYPE_VERSION found; version $FREETYPE_MIN_VERSION from release $FREETYPE_MIN_RELEASE required)"
|
|
else
|
|
AC_MSG_RESULT($FREETYPE_VERSION - OK)
|
|
|
|
ft_NONPKGCONFIG_CFLAGS=`$FREETYPE_CONFIG --cflags`
|
|
ft_NONPKGCONFIG_LIBS=`$FREETYPE_CONFIG --libs`
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
ft_CFLAGS="$FREETYPE_CFLAGS $FONTCONFIG_CFLAGS"
|
|
ft_LIBS="$FREETYPE_LIBS $FONTCONFIG_LIBS"
|
|
])
|
|
|
|
if test "x$use_ft" = "xyes"; then
|
|
temp_save_libs="$LIBS"
|
|
temp_save_cflags="$CFLAGS"
|
|
LIBS="$LIBS $ft_LIBS"
|
|
CFLAGS="$CFLAGS $ft_CFLAGS"
|
|
AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
|
|
HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
|
|
HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
|
|
[#include <ft2build.h>
|
|
#include FT_FREETYPE_H])
|
|
AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
|
|
[FT_Bitmap_Size structure includes y_ppem field])
|
|
|
|
AC_CHECK_FUNCS(FT_GlyphSlot_Embolden FT_Load_Sfnt_Table)
|
|
|
|
LIBS="$temp_save_libs"
|
|
CFLAGS="$temp_save_cflags"
|
|
fi
|
|
|
|
dnl ===========================================================================
|
|
|
|
AC_CHECK_HEADERS([pthread.h], have_pthread=yes, have_pthread=no)
|
|
AM_CONDITIONAL(HAVE_PTHREAD, test "x$have_pthread" = "xyes")
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(ps, PostScript, ps, PS_SURFACE, auto, [
|
|
# The postscript backend requires zlib.
|
|
use_ps=$have_libz
|
|
ps_NONPKGCONFIG_LIBS=-lz
|
|
])
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(pdf, PDF, pdf, PDF_SURFACE, auto, [
|
|
# The pdf backend requires zlib.
|
|
use_pdf=$have_libz
|
|
pdf_NONPKGCONFIG_LIBS=-lz
|
|
])
|
|
|
|
test_pdf=no
|
|
if test "x$use_pdf" = "xyes"; then
|
|
PKG_CHECK_MODULES(POPPLER, poppler-glib >= 0.4.1 pango gtk+-2.0, [test_pdf=yes], [test_pdf=no])
|
|
if test "x$test_pdf" = "xyes"; then
|
|
AC_DEFINE([CAIRO_CAN_TEST_PDF_SURFACE], 1, [Define to 1 if the PDF backend can be tested (need poppler and other dependencies for pdf2png)])
|
|
else
|
|
AC_MSG_WARN([PDF backend will not be tested since poppler is not available])
|
|
fi
|
|
fi
|
|
|
|
AM_CONDITIONAL(CAIRO_CAN_TEST_PDF_SURFACE, test "x$test_pdf" = "xyes")
|
|
AC_SUBST(POPPLER_CFLAGS)
|
|
AC_SUBST(POPPLER_LIBS)
|
|
|
|
AM_CONDITIONAL(CAIRO_HAS_MULTI_PAGE_SURFACES, test "x$use_ps" = "xyes" -o "x$use_pdf" = "xyes")
|
|
|
|
dnl ===========================================================================
|
|
|
|
CAIRO_BACKEND_ENABLE(svg, SVG, svg, SVG_SURFACE, auto, [
|
|
if test "x$use_png" != "xyes"; then
|
|
use_svg="no (requires --enable-png)"
|
|
fi
|
|
])
|
|
|
|
if test "x$use_svg" = "xyes"; then
|
|
PKG_CHECK_MODULES(LIBRSVG, librsvg-2.0 gdk-2.0, [test_svg=yes], [test_svg=no])
|
|
if test "x$test_svg" = "xyes"; then
|
|
AC_DEFINE([CAIRO_CAN_TEST_SVG_SURFACE], 1, [Define to 1 if the SVG backend can be tested (need librsvg)])
|
|
else
|
|
AC_MSG_WARN([SVG backend will not be tested since a librsvg is not available])
|
|
fi
|
|
fi
|
|
|
|
AM_CONDITIONAL(CAIRO_CAN_TEST_SVG_SURFACE, test "x$test_svg" = "xyes")
|
|
AC_SUBST(LIBRSVG_CFLAGS)
|
|
AC_SUBST(LIBRSVG_LIBS)
|
|
|
|
dnl ===========================================================================
|
|
|
|
dnl This check should default to 'auto' once we have code to actually
|
|
dnl check for the atsui font backend.
|
|
|
|
CAIRO_BACKEND_ENABLE(atsui, ATSUI font, atsui, ATSUI_FONT, no, [
|
|
dnl There is no pkgconfig for atsui; lets do a header check
|
|
AC_CHECK_HEADER(Carbon/Carbon.h, , [use_atsui="no (Carbon not found)"])
|
|
])
|
|
|
|
dnl ===========================================================================
|
|
dnl dump backend checking results
|
|
AC_CACHE_SAVE
|
|
|
|
dnl ===========================================================================
|
|
dnl Checks for precise integer types
|
|
AC_CHECK_HEADERS([stdint.h signal.h inttypes.h sys/int_types.h])
|
|
AC_CHECK_TYPES([uint64_t, uint128_t])
|
|
|
|
AC_DEFUN([CAIRO_CC_TRY_FLAG], [
|
|
AC_MSG_CHECKING([whether $CC supports $1])
|
|
|
|
cairo_save_CFLAGS="$CFLAGS"
|
|
CFLAGS="$CFLAGS $1"
|
|
|
|
AC_COMPILE_IFELSE([ ], [cairo_cc_flag=yes], [cairo_cc_flag=no])
|
|
CFLAGS="$cairo_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 Use lots of warning flags with with gcc and compatible compilers
|
|
AC_CACHE_CHECK([for supported warning flags], cairo_cv_warn_cflags, [
|
|
echo
|
|
WARN_CFLAGS=""
|
|
|
|
# Some warning options are not supported by all versions of
|
|
# gcc, so test all desired options against the current
|
|
# compiler.
|
|
#
|
|
# Note that there are some order dependencies
|
|
# here. Specifically, an option that disables a warning will
|
|
# have no net effect if a later option then enables that
|
|
# warnings, (perhaps implicitly). So we put some grouped
|
|
# options (-Wall and -Wextra) up front and the -Wno options
|
|
# last.
|
|
|
|
MAYBE_WARN="-Wall -Wextra \
|
|
-Wsign-compare -Werror-implicit-function-declaration \
|
|
-Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
|
|
-Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
|
|
-Wpacked -Wswitch-enum -Wmissing-format-attribute \
|
|
-Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations \
|
|
-Wdeclaration-after-statement -Wold-style-definition \
|
|
-Wno-missing-field-initializers -Wno-unused-parameter"
|
|
|
|
for W in $MAYBE_WARN; do
|
|
CAIRO_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
|
|
done
|
|
|
|
cairo_cv_warn_cflags=$WARN_CFLAGS
|
|
|
|
AC_MSG_CHECKING([which warning flags were supported])])
|
|
WARN_CFLAGS=$cairo_cv_warn_cflags
|
|
AC_SUBST(WARN_CFLAGS)
|
|
CAIRO_CFLAGS="$CAIRO_CFLAGS $WARN_CFLAGS"
|
|
|
|
CAIRO_CC_TRY_FLAG([-fno-strict-aliasing], [CAIRO_CFLAGS="$CAIRO_CFLAGS -fno-strict-aliasing"])
|
|
|
|
AC_SUBST(CAIRO_REQUIRES)
|
|
AC_SUBST(CAIRO_NONPKGCONFIG_CFLAGS)
|
|
AC_SUBST(CAIRO_NONPKGCONFIG_LIBS)
|
|
AC_SUBST(CAIRO_CFLAGS)
|
|
AC_SUBST(CAIRO_LIBS)
|
|
|
|
dnl ===========================================================================
|
|
dnl Check for gtk-doc and docbook
|
|
|
|
GTK_DOC_CHECK([1.6])
|
|
|
|
dnl ===========================================================================
|
|
dnl Check for recent pkg-config which supports Requires.private
|
|
|
|
case `$PKG_CONFIG --version` in
|
|
[0.?|0.?.?|0.1[0-7]|0.1[0-7].?]) PKGCONFIG_REQUIRES="Requires"; ;;
|
|
*) PKGCONFIG_REQUIRES="Requires.private"; ;;
|
|
esac
|
|
|
|
AC_SUBST(PKGCONFIG_REQUIRES)
|
|
|
|
dnl ===========================================================================
|
|
dnl Check for MMX
|
|
|
|
MMX_CFLAGS="-mmmx -Winline --param inline-unit-growth=10000 --param large-function-growth=10000"
|
|
|
|
have_mmx_intrinsics=no
|
|
AC_MSG_CHECKING(for MMX/SSE intrinsics in the compiler)
|
|
xserver_save_CFLAGS=$CFLAGS
|
|
CFLAGS="$CFLAGS $MMX_CFLAGS"
|
|
AC_COMPILE_IFELSE([
|
|
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
|
|
#error "Need GCC >= 3.4 for MMX intrinsics"
|
|
#endif
|
|
#include <mmintrin.h>
|
|
int main () {
|
|
__m64 v = _mm_cvtsi32_si64 (1);
|
|
__m64 w = _mm_slli_si64 (v, 1);
|
|
v = _mm_or_si64 (v, w);
|
|
return _mm_cvtsi64_si32 (v);
|
|
}], have_mmx_intrinsics=yes)
|
|
CFLAGS=$xserver_save_CFLAGS
|
|
AC_MSG_RESULT($have_mmx_intrinsics)
|
|
|
|
if test $have_mmx_intrinsics = yes ; then
|
|
AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
|
|
else
|
|
MMX_CFLAGS=
|
|
fi
|
|
AC_SUBST(MMX_CFLAGS)
|
|
|
|
AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
|
|
|
|
dnl ===========================================================================
|
|
|
|
AC_ARG_ENABLE(gcov,
|
|
AS_HELP_STRING([--enable-gcov],
|
|
[Enable gcov]),
|
|
[use_gcov=$enableval], [use_gcov=no])
|
|
|
|
if test "x$use_gcov" = "xyes"; then
|
|
dnl we need gcc:
|
|
if test "$GCC" != "yes"; then
|
|
AC_MSG_ERROR([GCC is required for --enable-gcov])
|
|
fi
|
|
|
|
dnl Check if ccache is being used
|
|
case `shtool path $CC` in
|
|
*ccache*[)] gcc_ccache=yes;;
|
|
*[)] gcc_ccache=no;;
|
|
esac
|
|
|
|
if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
|
|
AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
|
|
fi
|
|
|
|
ltp_version_list="1.4"
|
|
AC_CHECK_PROG(LTP, lcov, lcov)
|
|
AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
|
|
|
|
if test "$LTP"; then
|
|
AC_CACHE_CHECK([for ltp version], cairo_cv_ltp_version, [
|
|
cairo_cv_ltp_version=invalid
|
|
ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'`
|
|
for ltp_check_version in $ltp_version_list; do
|
|
if test "$ltp_version" = "$ltp_check_version"; then
|
|
cairo_cv_ltp_version="$ltp_check_version (ok)"
|
|
fi
|
|
done
|
|
])
|
|
else
|
|
ltp_msg="To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list"
|
|
AC_MSG_ERROR([$ltp_msg])
|
|
fi
|
|
|
|
case $cairo_cv_ltp_version in
|
|
""|invalid[)]
|
|
ltp_msg="You must have one of the following versions of LTP: $ltp_version_list (found: $ltp_version)."
|
|
AC_MSG_ERROR([$ltp_msg])
|
|
LTP="exit 0;"
|
|
;;
|
|
esac
|
|
|
|
if test -z "$LTP_GENHTML"; then
|
|
AC_MSG_ERROR([Could not find genhtml from the LTP package])
|
|
fi
|
|
|
|
AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
|
|
dnl PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Makefile.gcov, $abs_srcdir)
|
|
|
|
dnl Remove all optimization flags from CFLAGS
|
|
changequote({,})
|
|
CAIRO_CFLAGS=`echo "$CAIRO_CFLAGS" | $SED -e 's/-O[0-9]*//g'`
|
|
changequote([,])
|
|
|
|
dnl Add the special gcc flags
|
|
CAIRO_CFLAGS="$CAIRO_CFLAGS -O0 -fprofile-arcs -ftest-coverage"
|
|
fi
|
|
|
|
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_CONFIG_COMMANDS([src/cairo-features.h],
|
|
[
|
|
featuresfile=src/cairo-features.h
|
|
outfile=$featuresfile.tmp
|
|
AC_MSG_NOTICE([creating $featuresfile])
|
|
cat > $outfile <<_EOF
|
|
/* Generated by configure. Do not edit */
|
|
#ifndef CAIRO_FEATURES_H
|
|
#define CAIRO_FEATURES_H
|
|
|
|
#ifdef __cplusplus
|
|
# define CAIRO_BEGIN_DECLS extern "C" {
|
|
# define CAIRO_END_DECLS }
|
|
#else
|
|
# define CAIRO_BEGIN_DECLS
|
|
# define CAIRO_END_DECLS
|
|
#endif
|
|
|
|
#ifndef cairo_public
|
|
# define cairo_public
|
|
#endif
|
|
|
|
#define CAIRO_VERSION_MAJOR $CAIRO_VERSION_MAJOR
|
|
#define CAIRO_VERSION_MINOR $CAIRO_VERSION_MINOR
|
|
#define CAIRO_VERSION_MICRO $CAIRO_VERSION_MICRO
|
|
|
|
#define CAIRO_VERSION_STRING "$CAIRO_VERSION_MAJOR.$CAIRO_VERSION_MINOR.$CAIRO_VERSION_MICRO"
|
|
|
|
_EOF
|
|
for FEATURE in $CAIRO_FEATURES; do
|
|
echo "#define CAIRO_HAS_$FEATURE 1" >> $outfile
|
|
done
|
|
|
|
echo '' >> $outfile
|
|
echo '#endif' >> $outfile
|
|
|
|
if cmp -s $outfile $featuresfile; then
|
|
AC_MSG_NOTICE([$featuresfile is unchanged])
|
|
rm -f $outfile
|
|
else
|
|
mv $outfile $featuresfile
|
|
fi
|
|
],[
|
|
CAIRO_FEATURES='$CAIRO_FEATURES'
|
|
CAIRO_VERSION_MAJOR=$CAIRO_VERSION_MAJOR
|
|
CAIRO_VERSION_MINOR=$CAIRO_VERSION_MINOR
|
|
CAIRO_VERSION_MICRO=$CAIRO_VERSION_MICRO
|
|
])
|
|
AC_CONFIG_FILES([
|
|
Makefile
|
|
pixman/Makefile
|
|
pixman/src/Makefile
|
|
src/Makefile
|
|
test/Makefile
|
|
doc/Makefile
|
|
doc/public/Makefile
|
|
doc/public/version.xml
|
|
src/cairo.pc
|
|
])
|
|
|
|
AC_OUTPUT
|
|
|
|
dnl ===========================================================================
|
|
|
|
echo ""
|
|
echo "cairo will be compiled with the following surface backends:"
|
|
echo " image: yes (always builtin)"
|
|
echo " Xlib: $use_xlib"
|
|
echo " Xlib Xrender: $use_xlib_xrender"
|
|
echo " Quartz: $use_quartz"
|
|
echo " XCB: $use_xcb"
|
|
echo " Win32: $use_win32"
|
|
echo " PostScript: $use_ps"
|
|
echo " PDF: $use_pdf"
|
|
echo " SVG: $use_svg"
|
|
echo " glitz: $use_glitz"
|
|
echo " BeOS: $use_beos"
|
|
echo " DirectFB: $use_directfb"
|
|
echo ""
|
|
echo "the following font backends:"
|
|
echo " FreeType: $use_ft"
|
|
echo " Win32: $use_win32_font"
|
|
echo " ATSUI: $use_atsui"
|
|
echo ""
|
|
echo "the following features:"
|
|
echo " PNG functions: $use_png"
|
|
echo ""
|
|
echo "and the following debug options:"
|
|
echo " gcov support: $use_gcov"
|
|
echo " test surfaces: $use_test_surfaces"
|
|
echo ""
|
|
echo "using CFLAGS:"
|
|
echo $CAIRO_CFLAGS
|
|
echo ""
|
|
|
|
if test x"$use_ft" != "xyes" && \
|
|
test x"$use_win32_font" != "xyes" && \
|
|
test x"$use_atsui" != "xyes" ; then
|
|
|
|
AC_MSG_ERROR([Cairo requires at least one font backend.
|
|
Please install freetype and fontconfig, then try again:
|
|
http://freetype.org/ http://fontconfig.org/
|
|
])
|
|
fi
|
|
|
|
WARNING_MESSAGE='
|
|
*** The @BACKEND@ backend is still under active development and
|
|
*** is included in this release only as a preview. It does not
|
|
*** fully work yet and incompatible changes may yet be made
|
|
*** to @BACKEND@-backend specific API.
|
|
'
|
|
|
|
if test x"$use_glitz" = "xyes" ; then
|
|
echo "$WARNING_MESSAGE" | sed 's/@BACKEND@/Glitz/'
|
|
fi
|
|
|
|
if test x"$use_xcb" = "xyes" ; then
|
|
echo "$WARNING_MESSAGE" | sed 's/@BACKEND@/XCB/'
|
|
fi
|
|
|
|
if test x"$use_quartz" = "xyes" ; then
|
|
echo "$WARNING_MESSAGE" | sed 's/@BACKEND@/Quartz/'
|
|
fi
|
|
|
|
if test x"$use_quartz" = "xyes" ; then
|
|
echo "$WARNING_MESSAGE" | sed 's/@BACKEND@/ATSUI/'
|
|
fi
|
|
|
|
if test x"$use_beos" = "xyes" ; then
|
|
echo "$WARNING_MESSAGE" | sed 's/@BACKEND@/BeOS/'
|
|
fi
|
|
|
|
if test x"$use_directfb" = "xyes" ; then
|
|
echo "$WARNING_MESSAGE" | sed 's/@BACKEND@/DirectFB/'
|
|
fi
|