blob: 96fc8fd1a612acff90ff4794d9a1a4b91275b99d [file] [log] [blame]
### cairo.m4 -- extra macros for configuring R for cairo -*- Autoconf -*-
###
### Copyright (C) 2008 R Core Team
###
### This file is part of R.
###
### R 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.
###
### R 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 R; if not, a copy is available at
### https://www.r-project.org/Licenses/
AC_DEFUN([R_PANGO_CAIRO], [
if test "x${PKG_CONFIG}" = "x"; then
AC_MSG_NOTICE([not checking for cairo as pkg-config is not present])
else
save_CPPFLAGS=${CPPFLAGS}
save_LIBS=${LIBS}
AC_CACHE_CHECK([whether pkg-config knows about cairo and pango],
[r_cv_has_pangocairo],
[if "${PKG_CONFIG}" --exists pangocairo; then
r_cv_has_pangocairo="yes"
else
r_cv_has_pangocairo="no"
fi
])
if test "x${r_cv_has_pangocairo}" = "xyes"; then
modlist="pangocairo"
for module in cairo-png; do
if "${PKG_CONFIG}" --exists ${module}; then
modlist="${modlist} ${module}"
fi
done
if "${PKG_CONFIG}" --exists cairo-pdf; then
modlist="${modlist} cairo-pdf"
r_cairo_pdf=yes
fi
if "${PKG_CONFIG}" --exists cairo-ps; then
modlist="${modlist} cairo-ps"
r_cairo_ps=yes
fi
if "${PKG_CONFIG}" --exists cairo-svg; then
modlist="${modlist} cairo-svg"
r_cairo_svg=yes
fi
if "${PKG_CONFIG}" --exists cairo-xlib; then
xmodlist="${modlist} cairo-xlib"
else
xmodlist="${modlist}"
fi
CAIRO_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${modlist}`
CAIROX11_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${xmodlist}`
CAIRO_LIBS=`"${PKG_CONFIG}" --libs ${modlist}`
CAIROX11_LIBS=`"${PKG_CONFIG}" --libs ${xmodlist}`
CPPFLAGS="${CPPFLAGS} ${CAIRO_CPPFLAGS}"
LIBS="${LIBS} ${CAIRO_LIBS}"
AC_CACHE_CHECK([whether cairo including pango is >= 1.2 and works],
[r_cv_cairo_works],
[AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <pango/pango.h>
#include <pango/pangocairo.h>
#include <cairo-xlib.h>
#if CAIRO_VERSION < 10200
#error cairo version >= 1.2 required
#endif
int main(void) {
cairo_t *CC = NULL; // silence picky compilers
cairo_arc(CC, 0.0, 0.0, 1.0, 0.0, 6.28);
pango_cairo_create_layout(CC);
pango_font_description_new();
return 0;
}
]])],[r_cv_cairo_works=yes],[r_cv_cairo_works=no
CAIRO_LIBS=
CAIRO_CFLAGS=
])])
CPPFLAGS=${save_CPPFLAGS}
LIBS=${save_LIBS}
else ## no pangocairo, check for just cairo
AC_CACHE_CHECK([whether pkg-config knows about cairo], [r_cv_has_cairo],
[if "${PKG_CONFIG}" --exists cairo; then
r_cv_has_cairo="yes"
else
r_cv_has_cairo="no"
fi
])
if test "x${r_cv_has_cairo}" = "xyes"; then
modlist="cairo"
## on Linux, cairo-ft brings in header paths <cairo-ft.h>:
## the code which needs this is currently conditionalized
for module in cairo-png cairo-ft; do
if "${PKG_CONFIG}" --exists ${module}; then
modlist="${modlist} ${module}"
fi
done
if "${PKG_CONFIG}" --exists cairo-pdf; then
modlist="${modlist} cairo-pdf"
r_cairo_pdf=yes
fi
if "${PKG_CONFIG}" --exists cairo-ps; then
modlist="${modlist} cairo-ps"
r_cairo_ps=yes
fi
if "${PKG_CONFIG}" --exists cairo-svg; then
modlist="${modlist} cairo-svg"
r_cairo_svg=yes
fi
if "${PKG_CONFIG}" --exists cairo-xlib; then
xmodlist="${modlist} cairo-xlib"
else
xmodlist="${modlist}"
fi
CAIRO_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${modlist}`
CAIROX11_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${xmodlist}`
case "${host_os}" in
darwin*)
## This is for static macOS build
## FIXME: doing that unconditionally is really not a good idea
CAIRO_LIBS=`"${PKG_CONFIG}" --static --libs ${modlist}`
CAIROX11_LIBS=`"${PKG_CONFIG}" --static --libs ${xmodlist}`
;;
*)
CAIRO_LIBS=`"${PKG_CONFIG}" --libs ${modlist}`
CAIROX11_LIBS=`"${PKG_CONFIG}" --libs ${xmodlist}`
;;
esac
CPPFLAGS="${CPPFLAGS} ${CAIRO_CPPFLAGS}"
LIBS="${LIBS} ${CAIRO_LIBS}"
AC_CACHE_CHECK([whether cairo is >= 1.2 and works],
[r_cv_cairo_works],
[AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <cairo.h>
#include <cairo-xlib.h>
#if CAIRO_VERSION < 10200
#error cairo version >= 1.2 required
#endif
int main(void) {
cairo_t *CC;
cairo_arc(CC, 0.0, 0.0, 1.0, 0.0, 6.28);
cairo_select_font_face (CC, "Helvetica", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
return 0;
}
]])],[r_cv_cairo_works=yes],[r_cv_cairo_works=no
CAIRO_LIBS=
CAIRO_CFLAGS=
])])
CPPFLAGS=${save_CPPFLAGS}
LIBS=${save_LIBS}
fi
fi
fi
if test "x${r_cv_has_pangocairo}" = xyes; then
AC_DEFINE(HAVE_PANGOCAIRO, 1, [Define to 1 if you have pangocairo.])
fi
if test "x${r_cv_cairo_works}" = xyes; then
AC_DEFINE(HAVE_WORKING_CAIRO, 1, [Define to 1 if you have cairo.])
fi
if test "x${r_cairo_pdf}" = xyes; then
AC_DEFINE(HAVE_CAIRO_PDF, 1, [Define to 1 if you have cairo-ps.])
fi
if test "x${r_cairo_ps}" = xyes; then
AC_DEFINE(HAVE_CAIRO_PS, 1, [Define to 1 if you have cairo-pdf.])
fi
if test "x${r_cairo_svg}" = xyes; then
AC_DEFINE(HAVE_CAIRO_SVG, 1, [Define to 1 if you have cairo-svg.])
fi
AC_SUBST(CAIRO_CPPFLAGS)
AC_SUBST(CAIROX11_CPPFLAGS)
AC_SUBST(CAIRO_LIBS)
AC_SUBST(CAIROX11_LIBS)
])