| 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, 7) |
| |
| 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=3 |
| |
| # 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(0.19) |
| |
| 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. (this is only for the backend detection |
| dnl changes; it doesn't have any effect on any other cached thing.) |
| 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 |
| ]) |
| |
| POPPLER_VERSION_REQUIRED=0.4.1 |
| test_pdf=no |
| if test "x$use_pdf" = "xyes"; then |
| poppler_DEPENDENCY="poppler-glib >= $POPPLER_VERSION_REQUIRED" |
| PKG_CHECK_MODULES(POPPLER, $poppler_DEPENDENCY pango gtk+-2.0, [test_pdf=yes], [test_pdf="no (requires $poppler_DEPENDENCY)"]) |
| 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 >= $POPPLER_VERSION_REQUIRED 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 |
| ]) |
| |
| LIBRSVG_VERSION_REQUIRED=2.14.0 |
| if test "x$use_svg" = "xyes"; then |
| librsvg_DEPENDENCY="librsvg-2.0 >= $LIBRSVG_VERSION_REQUIRED" |
| PKG_CHECK_MODULES(LIBRSVG, $librsvg_DEPENDENCY gdk-2.0, [test_svg=yes], [test_svg="no (requires $librsvg_DEPENDENCY)"]) |
| 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]) |
| else |
| AC_MSG_WARN([SVG backend will not be tested since librsvg >= $LIBRSVG_VERSION_REQUIRED 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 |
| |
| dnl Note: if you change the following variable, the cache is automatically |
| dnl skipped and all flags rechecked. So there's no need to do anything |
| dnl else. If for any reason you need to force a recheck, just change |
| dnl MAYBE_WARN in an ignorable way (like adding whitespace) |
| |
| 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" |
| |
| |
| # invalidate cached value if MAYBE_WARN has changed |
| if test "x$cairo_cv_warn_maybe" != "x$MAYBE_WARN"; then |
| unset cairo_cv_warn_cflags |
| fi |
| 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. |
| |
| for W in $MAYBE_WARN; do |
| CAIRO_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"]) |
| done |
| |
| cairo_cv_warn_cflags=$WARN_CFLAGS |
| cairo_cv_warn_maybe=$MAYBE_WARN |
| |
| 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 " pdf testing: $test_pdf" |
| echo " svg testing: $test_svg" |
| 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 |