### cairo.m4 -- extra macros for configuring R for cairo -*- Autoconf -*- ### ### Copyright (C) 2008-2021 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" ## These tests are useful for existence of features but ## because cairo is built as a single library they ## currently make no difference to CPPFLAGS nor LIBS 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" r_cairo_xlib=yes else xmodlist="${modlist}" fi CAIRO_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${modlist}` CAIROX11_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${xmodlist}` ## Static builds may currently be impossible as harfbuzz ## requires graphite2 and that does not support static building. if test "x$use_static_cairo" = xyes; then AC_MSG_NOTICE([using static pangocairo]) CAIRO_LIBS=`"${PKG_CONFIG}" --static --libs ${modlist}` CAIROX11_LIBS=`"${PKG_CONFIG}" --static --libs ${xmodlist}` else CAIRO_LIBS=`"${PKG_CONFIG}" --libs ${modlist}` CAIROX11_LIBS=`"${PKG_CONFIG}" --libs ${xmodlist}` fi 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 #include //#include #include #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 : ## 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" r_cairo_xlib=yes else xmodlist="${modlist}" fi CAIRO_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${modlist}` CAIROX11_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${xmodlist}` if test "x$use_static_cairo" = xyes; then AC_MSG_NOTICE([using static cairo]) CAIRO_LIBS=`"${PKG_CONFIG}" --static --libs ${modlist}` CAIROX11_LIBS=`"${PKG_CONFIG}" --static --libs ${xmodlist}` else CAIRO_LIBS=`"${PKG_CONFIG}" --libs ${modlist}` CAIROX11_LIBS=`"${PKG_CONFIG}" --libs ${xmodlist}` fi CPPFLAGS="${CPPFLAGS} ${CAIRO_CPPFLAGS} ${CAIROX11_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 //#include #include #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); 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= CAIROX11_LIBS= CAIROX11_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.]) if test "x${r_cairo_xlib}" = xyes; then AC_DEFINE(HAVE_WORKING_X11_CAIRO, 1, [Define to 1 if you have cairo including Xlib.]) fi 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) ])