| ### 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) |
| ]) |