xref: /php-src/ext/gd/config.m4 (revision b12ccb31)
1dnl
2dnl Configure options
3dnl
4PHP_ARG_ENABLE([gd],
5  [for GD support],
6  [AS_HELP_STRING([--enable-gd],
7    [Include GD support])])
8
9PHP_ARG_WITH([external-gd],
10  [for external libgd],
11  [AS_HELP_STRING([--with-external-gd],
12    [Use external libgd])],
13  [no],
14  [no])
15
16if test -z "$PHP_AVIF"; then
17  PHP_ARG_WITH([avif],
18    [for libavif],
19    [AS_HELP_STRING([--with-avif],
20      [GD: Enable AVIF support (only for bundled libgd)])],
21    [no],
22    [no])
23fi
24
25if test -z "$PHP_WEBP"; then
26  PHP_ARG_WITH([webp],
27    [for libwebp],
28    [AS_HELP_STRING([--with-webp],
29      [GD: Enable WEBP support (only for bundled libgd)])],
30    [no],
31    [no])
32fi
33
34if test -z "$PHP_JPEG"; then
35  PHP_ARG_WITH([jpeg],
36    [for libjpeg],
37    [AS_HELP_STRING([--with-jpeg],
38      [GD: Enable JPEG support (only for bundled libgd)])],
39    [no],
40    [no])
41fi
42
43PHP_ARG_WITH([xpm],
44  [for libXpm],
45  [AS_HELP_STRING([--with-xpm],
46    [GD: Enable XPM support  (only for bundled libgd)])],
47  [no],
48  [no])
49
50PHP_ARG_WITH([freetype],
51  [for FreeType 2],
52  [AS_HELP_STRING([--with-freetype],
53    [GD: Enable FreeType 2 support (only for bundled libgd)])],
54  [no],
55  [no])
56
57PHP_ARG_ENABLE([gd-jis-conv],
58  [whether to enable JIS-mapped Japanese font support in GD],
59  [AS_HELP_STRING([--enable-gd-jis-conv],
60    [GD: Enable JIS-mapped Japanese font support (only for bundled libgd)])],
61  [no],
62  [no])
63
64dnl
65dnl Checks for the configure options
66dnl
67
68dnl libpng is always required
69AC_DEFUN([PHP_GD_PNG],[
70  PKG_CHECK_MODULES([PNG], [libpng])
71  PHP_EVAL_LIBLINE($PNG_LIBS, GD_SHARED_LIBADD)
72  PHP_EVAL_INCLINE($PNG_CFLAGS)
73  AC_DEFINE(HAVE_LIBPNG, 1, [ ])
74])
75
76AC_DEFUN([PHP_GD_AVIF],[
77  if test "$PHP_AVIF" != "no"; then
78    PKG_CHECK_MODULES([AVIF], [libavif >= 0.8.2])
79    PHP_EVAL_LIBLINE($AVIF_LIBS, GD_SHARED_LIBADD)
80    PHP_EVAL_INCLINE($AVIF_CFLAGS)
81    AC_DEFINE(HAVE_LIBAVIF, 1, [ ])
82    AC_DEFINE(HAVE_GD_AVIF, 1, [ ])
83  fi
84])
85
86AC_DEFUN([PHP_GD_WEBP],[
87  if test "$PHP_WEBP" != "no"; then
88    PKG_CHECK_MODULES([WEBP], [libwebp >= 0.2.0])
89    PHP_EVAL_LIBLINE($WEBP_LIBS, GD_SHARED_LIBADD)
90    PHP_EVAL_INCLINE($WEBP_CFLAGS)
91    AC_DEFINE(HAVE_LIBWEBP, 1, [ ])
92    AC_DEFINE(HAVE_GD_WEBP, 1, [ ])
93  fi
94])
95
96AC_DEFUN([PHP_GD_JPEG],[
97  if test "$PHP_JPEG" != "no"; then
98    PKG_CHECK_MODULES([JPEG], [libjpeg])
99    PHP_EVAL_LIBLINE($JPEG_LIBS, GD_SHARED_LIBADD)
100    PHP_EVAL_INCLINE($JPEG_CFLAGS)
101    AC_DEFINE(HAVE_LIBJPEG, 1, [ ])
102    AC_DEFINE(HAVE_GD_JPG, 1, [ ])
103  fi
104])
105
106AC_DEFUN([PHP_GD_XPM],[
107  if test "$PHP_XPM" != "no"; then
108    PKG_CHECK_MODULES([XPM], [xpm])
109    PHP_EVAL_LIBLINE($XPM_LIBS, GD_SHARED_LIBADD)
110    PHP_EVAL_INCLINE($XPM_CFLAGS)
111    AC_DEFINE(HAVE_XPM, 1, [ ])
112    AC_DEFINE(HAVE_GD_XPM, 1, [ ])
113  fi
114])
115
116AC_DEFUN([PHP_GD_FREETYPE2],[
117  if test "$PHP_FREETYPE" != "no"; then
118    PKG_CHECK_MODULES([FREETYPE2], [freetype2], [FREETYPE2_FOUND=true])
119
120    PHP_EVAL_INCLINE($FREETYPE2_CFLAGS)
121    PHP_EVAL_LIBLINE($FREETYPE2_LIBS, GD_SHARED_LIBADD)
122    AC_DEFINE(HAVE_LIBFREETYPE, 1, [ ])
123    AC_DEFINE(HAVE_GD_FREETYPE, 1, [ ])
124  fi
125])
126
127AC_DEFUN([PHP_GD_JISX0208],[
128  if test "$PHP_GD_JIS_CONV" = "yes"; then
129    AC_DEFINE(USE_GD_JISX0208, 1, [ ])
130    AC_DEFINE(JISX0208, 1, [ ])
131  fi
132])
133
134dnl Build and run a program to determine if GD has support for the given
135dnl format. The first argument is the proper-noun-capitalized name of the
136dnl format -- basically the word Foo in gdImageCreateFromFoo -- such as
137dnl Png. If support for format Foo exists, the second argument (the name
138dnl of a constant) will be defined to 1. The reason for this charade is
139dnl that gd defines "junk" versions of each gdImageCreateFromFoo function
140dnl even when it does not support the Foo format. Those junk functions
141dnl display a warning but eventually return normally, making a simple link
142dnl or run test insufficient.
143AC_DEFUN([PHP_GD_CHECK_FORMAT],
144[AS_VAR_PUSHDEF([php_var], [php_cv_lib_gd_gdImageCreateFrom$1])
145old_LIBS="${LIBS}"
146LIBS="${LIBS} ${GD_SHARED_LIBADD}"
147old_CFLAGS="${CFLAGS}"
148CFLAGS="${CFLAGS} ${GDLIB_CFLAGS}"
149AC_LANG_PUSH([C])
150AC_CACHE_CHECK([for working gdImageCreateFrom$1 in libgd], [php_var],
151  [AC_RUN_IFELSE([AC_LANG_SOURCE([
152#include <stdio.h>
153#include <unistd.h>
154#include <gd.h>
155
156/* A custom gdErrorMethod */
157void exit1(int priority, const char *format, va_list args) {
158  _exit(1);
159}
160
161/* Override the default gd_error_method with one that
162   actually causes the program to return an error. */
163int main(int argc, char** argv) {
164  m4_if([$1],[Xpm],
165  [char* f = "test.xpm"],
166  [FILE* f = NULL]);
167  gdSetErrorMethod(exit1);
168  gdImagePtr p = gdImageCreateFrom$1(f);
169  return 0;
170}])],
171  [AS_VAR_SET([php_var], [yes])],
172  [AS_VAR_SET([php_var], [no])],
173  [AS_VAR_SET([php_var], [no])])])
174AS_VAR_IF([php_var], [yes],
175  [AC_DEFINE_UNQUOTED([$2], [1],
176    [Define to 1 if GD library has 'gdImageCreateFrom$1'.])])
177AC_LANG_POP([C])
178CFLAGS="${old_CFLAGS}"
179LIBS="${old_LIBS}"
180AS_VAR_POPDEF([php_var])
181])
182
183AC_DEFUN([PHP_GD_CHECK_VERSION],[
184  PHP_GD_CHECK_FORMAT([Png],  [HAVE_GD_PNG])
185  PHP_GD_CHECK_FORMAT([Avif], [HAVE_GD_AVIF])
186  PHP_GD_CHECK_FORMAT([Webp], [HAVE_GD_WEBP])
187  PHP_GD_CHECK_FORMAT([Jpeg], [HAVE_GD_JPG])
188  PHP_GD_CHECK_FORMAT([Xpm],  [HAVE_GD_XPM])
189  PHP_GD_CHECK_FORMAT([Bmp],  [HAVE_GD_BMP])
190  PHP_GD_CHECK_FORMAT([Tga],  [HAVE_GD_TGA])
191  PHP_CHECK_LIBRARY(gd, gdFontCacheShutdown,           [AC_DEFINE(HAVE_GD_FREETYPE,          1, [ ])], [], [ $GD_SHARED_LIBADD ])
192  PHP_CHECK_LIBRARY(gd, gdVersionString,               [AC_DEFINE(HAVE_GD_LIBVERSION,        1, [ ])], [], [ $GD_SHARED_LIBADD ])
193  PHP_CHECK_LIBRARY(gd, gdImageGetInterpolationMethod, [AC_DEFINE(HAVE_GD_GET_INTERPOLATION, 1, [ ])], [], [ $GD_SHARED_LIBADD ])
194])
195
196dnl
197dnl Main GD configure
198dnl
199
200if test "$PHP_GD" != "no"; then
201
202  if test "$PHP_EXTERNAL_GD" = "no"; then
203    extra_sources="libgd/gd.c libgd/gd_gd.c libgd/gd_gd2.c libgd/gd_io.c libgd/gd_io_dp.c \
204                  libgd/gd_io_file.c libgd/gd_ss.c libgd/gd_io_ss.c libgd/gd_webp.c libgd/gd_avif.c \
205                  libgd/gd_png.c libgd/gd_jpeg.c libgd/gdxpm.c libgd/gdfontt.c libgd/gdfonts.c \
206                  libgd/gdfontmb.c libgd/gdfontl.c libgd/gdfontg.c libgd/gdtables.c libgd/gdft.c \
207                  libgd/gdcache.c libgd/gdkanji.c libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c \
208                  libgd/gd_topal.c libgd/gd_gif_in.c libgd/gd_xbm.c libgd/gd_gif_out.c libgd/gd_security.c \
209                  libgd/gd_filter.c libgd/gd_pixelate.c libgd/gd_rotate.c libgd/gd_color_match.c \
210                  libgd/gd_transform.c libgd/gd_crop.c libgd/gd_interpolation.c libgd/gd_matrix.c \
211                  libgd/gd_bmp.c libgd/gd_tga.c"
212
213dnl These are always available with bundled library
214    AC_DEFINE(HAVE_GD_BUNDLED,          1, [ ])
215    AC_DEFINE(HAVE_GD_PNG,              1, [ ])
216    AC_DEFINE(HAVE_GD_BMP,              1, [ ])
217    AC_DEFINE(HAVE_GD_TGA,              1, [ ])
218
219dnl Various checks for GD features
220    PHP_SETUP_ZLIB([GD_SHARED_LIBADD])
221    PHP_GD_PNG
222    PHP_GD_AVIF
223    PHP_GD_WEBP
224    PHP_GD_JPEG
225    PHP_GD_XPM
226    PHP_GD_FREETYPE2
227    PHP_GD_JISX0208
228
229    PHP_NEW_EXTENSION(gd, gd.c $extra_sources, $ext_shared,, \\$(GD_CFLAGS))
230    PHP_ADD_BUILD_DIR($ext_builddir/libgd)
231    GD_CFLAGS="-Wno-strict-prototypes -I$ext_srcdir/libgd $GD_CFLAGS"
232    PHP_INSTALL_HEADERS([ext/gd], [php_gd.h libgd/])
233
234    PHP_TEST_BUILD(foobar, [], [
235      AC_MSG_ERROR([GD build test failed. Please check the config.log for details.])
236    ], [ $GD_SHARED_LIBADD ], [char foobar(void) { return '\0'; }])
237
238  else
239    extra_sources="gd_compat.c"
240    PKG_CHECK_MODULES([GDLIB], [gdlib >= 2.1.0])
241    PHP_EVAL_LIBLINE($GDLIB_LIBS, GD_SHARED_LIBADD)
242    PHP_EVAL_INCLINE($GDLIB_CFLAGS)
243    AC_DEFINE(HAVE_LIBGD, 1, [ ])
244    PHP_GD_CHECK_VERSION
245
246    PHP_NEW_EXTENSION(gd, gd.c $extra_sources, $ext_shared)
247    PHP_INSTALL_HEADERS([ext/gd], [php_gd.h])
248    PHP_CHECK_LIBRARY(gd, gdImageCreate, [], [
249      AC_MSG_ERROR([GD build test failed. Please check the config.log for details.])
250    ], [ $GD_SHARED_LIBADD ])
251  fi
252
253  PHP_SUBST(GD_CFLAGS)
254  PHP_SUBST(GDLIB_CFLAGS)
255  PHP_SUBST(GDLIB_LIBS)
256  PHP_SUBST(GD_SHARED_LIBADD)
257fi
258