Initialize Tizen 2.3
[framework/graphics/cairo.git] / configure.ac
1 AC_PREREQ([2.63])
2 CAIRO_PARSE_VERSION
3 AC_INIT([cairo],
4         [cairo_version_major.cairo_version_minor.cairo_version_micro],
5         [http://bugs.freedesktop.org/enter_bug.cgi?product=cairo],
6         [cairo],
7         [http://cairographics.org/])
8 AC_CONFIG_AUX_DIR(build)
9 AC_CONFIG_MACRO_DIR(build)
10 AC_USE_SYSTEM_EXTENSIONS
11 AC_CONFIG_SRCDIR(src/cairo.h)
12 AC_CONFIG_HEADERS(config.h)
13
14 AM_INIT_AUTOMAKE([1.11 foreign -Wall no-define no-dist-gzip dist-xz])
15 AM_SILENT_RULES([yes])
16
17 # Initialize libtool
18 LT_PREREQ([2.2])
19 LT_INIT([win32-dll])
20
21 # Api documentation
22 GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
23
24 AC_SYS_LARGEFILE
25
26 dnl ===========================================================================
27 dnl
28 dnl The order of the includes here is rather important
29 dnl
30 m4_include(build/configure.ac.version)  dnl macros setting up various version declares
31 m4_include(build/configure.ac.tools)    dnl checks for tools we use
32 m4_include(build/configure.ac.features) dnl macros for backend/feature handling
33 m4_include(build/configure.ac.warnings) dnl checks for compiler warning
34 m4_include(build/configure.ac.system)   dnl checks for system functions, headers, libs
35 m4_include(build/configure.ac.analysis) dnl checks for analysis tools (lcov, etc)
36 m4_include(build/configure.ac.noversion) dnl disable builtin libtool versioning
37 m4_include(build/configure.ac.openmp) dnl checks for openmp
38 m4_include(build/configure.ac.pthread)  dnl checks for pthreads
39 m4_include(build/configure.ac.tls)  dnl checks for thread-local storage
40 AC_CACHE_SAVE
41
42 dnl ===========================================================================
43
44 AC_CHECK_LIB(z, compress,
45          [AC_CHECK_HEADER(zlib.h, [
46           have_libz=yes
47           AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if you have zlib available])
48          ],
49          [have_libz="no (requires zlib http://www.gzip.org/zlib/)"])],
50          [have_libz="no (requires zlib http://www.gzip.org/zlib/)"])
51
52 save_LIBS="$LIBS"
53 AC_CHECK_LIB(lzo2, lzo2a_decompress,
54          [AC_CHECK_HEADER(lzo/lzo2a.h, [
55           have_lzo=yes
56           AC_DEFINE(HAVE_LZO, 1, [Define to 1 if you have lzo available])
57           lzo_LIBS="-llzo2"
58          ],
59          [have_lzo="no (requires lzpo http://www.oberhumer.com/opensource/lzo/)"])],
60          [have_lzo="no (requires lzpo http://www.oberhumer.com/opensource/lzo/)"])
61 AC_SUBST(lzo_LIBS)
62 LIBS="$save_LIBS"
63
64 AC_CHECK_LIB(dl, dlsym,
65              [have_dlsym=yes; have_dl=yes],
66              [have_dlsym=no; have_dl=no])
67 if test "x$have_dlsym" = "xno"; then
68    AC_CHECK_FUNC(dlsym, [have_dlsym=yes], [have_dlsym=no])
69 fi
70 AC_CHECK_HEADERS(dlfcn.h, [have_dlsym=yes], [have_dlsym=no])
71 AM_CONDITIONAL(CAIRO_HAS_DL, test "x$have_dl" = "xyes")
72 if test "x$have_dlsym" = "xyes"; then
73   AC_DEFINE([CAIRO_HAS_DLSYM], 1, [Define to 1 if dlsym is available])
74 fi
75 AM_CONDITIONAL(CAIRO_HAS_DLSYM, test "x$have_dlsym" = "xyes")
76
77 dnl ===========================================================================
78 dnl Check support for TLS
79 have_tls=no
80 CAIRO_ENABLE(tls, tls, no, [CAIRO_CONFIGURE_TLS])
81 AM_CONDITIONAL(HAVE_TLS, test "x$use_tls" = "xyes")
82 AC_SUBST(tls_CFLAGS)
83 AC_SUBST(tls_LIBS)
84
85 dnl ===========================================================================
86 dnl Check support for pthread_setspecific
87 have_pthread_setspecific=no
88 CAIRO_ENABLE(pthread_setspecific, pthread_setspecific, no, [CAIRO_CONFIGURE_PTHREAD_SETSPECIFIC])
89 AM_CONDITIONAL(HAVE_PTHREAD_SETSPECIFIC, test "x$use_pthread_setspecific" = "xyes")
90 AC_SUBST(pthread_setspecific_CFLAGS)
91 AC_SUBST(pthread_setspecific_LIBS)
92
93 dnl ===========================================================================
94
95 CAIRO_ENABLE_SURFACE_BACKEND(xlib, Xlib, auto, [
96   xlib_REQUIRES="x11 xext"
97   PKG_CHECK_MODULES(xlib, $xlib_REQUIRES, ,
98                     [xlib_REQUIRES=""
99                      AC_PATH_XTRA
100                      if test "x$no_x" = xyes; then
101                        use_xlib="no (requires X development libraries)"
102                      else
103                        xlib_NONPKGCONFIG_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
104                        xlib_NONPKGCONFIG_CFLAGS=$X_CFLAGS
105                      fi])
106
107   AC_CHECK_HEADER(sys/ipc.h)
108   AC_CHECK_HEADER(sys/shm.h)
109
110   if test "$ac_cv_header_sys_ipc_h" = "yes" -a "$ac_cv_header_sys_shm_h" = "yes"; then
111       AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
112       AC_TRY_RUN([
113                   #include <sys/types.h>
114                   #include <sys/ipc.h>
115                   #include <sys/shm.h>
116                   int main()
117                   {
118                       char *shmaddr;
119                       int id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0600);
120                       if (id == -1) return 2;
121                       shmaddr = shmat (id, 0, 0);
122                       shmctl (id, IPC_RMID, 0);
123                       if ((char*) shmat (id, 0, 0) == (char*) -1) {
124                           shmdt (shmaddr);
125                           return 1;
126                       }
127                       shmdt (shmaddr);
128                       shmdt (shmaddr);
129                       return 0;
130                   }
131                   ],
132                   AC_DEFINE(IPC_RMID_DEFERRED_RELEASE, 1,
133                             [Define to 1 if shared memory segments are released deferred.])
134                   AC_MSG_RESULT(yes),
135                   AC_MSG_RESULT(no),
136                   AC_MSG_RESULT(assuming no))
137       fi
138
139       AC_CHECK_HEADERS([X11/extensions/XShm.h X11/extensions/shmproto.h X11/extensions/shmstr.h], [], [],
140                        [#include <X11/Xlibint.h>
141                         #include <X11/Xproto.h>])
142 ])
143
144 CAIRO_ENABLE_SURFACE_BACKEND(xlib_xrender, Xlib Xrender, auto, [
145   if test "x$use_xlib" != "xyes"; then
146     use_xlib_xrender="no (requires --enable-xlib)"
147   else
148     dnl Check for Xrender header files if the Xrender package is not installed:
149     xlib_xrender_BASE=cairo-xlib
150     xlib_xrender_REQUIRES="xrender >= 0.6"
151     PKG_CHECK_MODULES(xlib_xrender, $xlib_xrender_REQUIRES, ,
152                       [xlib_xrender_REQUIRES=""
153                        old_CPPFLAGS=$CPPFLAGS
154                        CPPFLAGS="$CPPFLAGS $xlib_CFLAGS $xlib_NONPKGCONFIG_CFLAGS"
155                        AC_CHECK_HEADER(X11/extensions/Xrender.h,
156                                        [xlib_xrender_NONPKGCONFIG_LIBS="-lXrender"],
157                                        [use_xlib_xrender="no (requires $xlib_xrender_REQUIRES http://freedesktop.org/Software/xlibs)"],
158                                        [#include <X11/X.h>])
159                        CPPFLAGS=$old_CPPFLAGS
160                       ])
161
162     old_CFLAGS=$CFLAGS
163     old_LIBS=$LIBS
164     CFLAGS="$CFLAGS $xlib_CFLAGS $xlib_NONPKGCONFIG_CFLAGS $xlib_xrender_CFLAGS $xlib_xrender_NONPKGCONFIG_CFLAGS"
165     LIBS="$LIBS $xlib_LIBS $xlib_NONPKGCONFIG_LIBS $xlib_xrender_LIBS $xlib_xrender_NONPKGCONFIG_LIBS"
166     AC_CHECK_FUNCS([XRenderCreateLinearGradient XRenderCreateRadialGradient XRenderCreateConicalGradient])
167     CFLAGS=$old_CFLAGS
168     LIBS=$old_LIBS
169
170   fi
171 ])
172
173 dnl ===========================================================================
174
175 CAIRO_ENABLE_SURFACE_BACKEND(xcb, XCB, auto, [
176   xcb_REQUIRES="xcb >= 1.6 xcb-render >= 1.6"
177   PKG_CHECK_MODULES(xcb, $xcb_REQUIRES, ,
178                     [use_xcb="no (requires $xcb_REQUIRES http://xcb.freedesktop.org)"])
179 ])
180
181 CAIRO_ENABLE_FUNCTIONS(xlib_xcb, Xlib/XCB, no, [
182   if test "x$use_xcb" = "xyes" -a "x$use_xlib" = "xyes"; then
183     xlib_xcb_REQUIRES="x11-xcb"
184     PKG_CHECK_MODULES(xlib_xcb, $xlib_xcb_REQUIRES, ,
185                       [use_xlib_xcb="no (requires $xlib_xcb_REQUIRES http://xcb.freedesktop.org)"])
186   else
187     use_xlib_xcb="no (requires both --enable-xlib and --enable-xcb)"
188   fi
189 ])
190
191 CAIRO_ENABLE_FUNCTIONS(xcb_shm, XCB/SHM, auto, [
192   if test "x$use_xcb" = "xyes"; then
193       xcb_shm_REQUIRES="xcb-shm"
194       PKG_CHECK_MODULES(xcb_shm, $xcb_shm_REQUIRES, ,
195                         [use_xcb_shm="no (requires $xcb_shm http://xcb.freedesktop.org)"])
196   else
197     use_xcb_shm="no (requires --enable-xcb)"
198   fi
199 ])
200
201 dnl ===========================================================================
202
203 CAIRO_ENABLE_SURFACE_BACKEND(qt, Qt, no, [
204   qt_REQUIRES="QtGui >= 4.4.0"
205   PKG_CHECK_MODULES(qt, $qt_REQUIRES, ,
206                     [qt_REQUIRES=""
207                      use_qt="no (requires Qt4 development libraries)"
208                      ])
209 ])
210
211 dnl ===========================================================================
212
213 CAIRO_ENABLE_SURFACE_BACKEND(quartz, Quartz, auto, [
214   dnl There is no pkgconfig for quartz; lets do a header check
215   AC_CHECK_HEADERS([ApplicationServices/ApplicationServices.h Accelerate/Accelerate.h], , [use_quartz="no (requires ApplicationServices framework)"])
216   if test "x$use_quartz" != "xyes" ; then
217     dnl check for CoreGraphics as a separate framework
218     AC_CHECK_HEADERS([CoreGraphics/CoreGraphics.h Accelerate/Accelerate.h], , [use_quartz="no (requires CoreGraphics framework)"])
219     quartz_LIBS="-Xlinker -framework -Xlinker CoreGraphics -Xlinker -framework -Xlinker Accelerate"
220   else
221     quartz_LIBS="-Xlinker -framework -Xlinker ApplicationServices -Xlinker -framework -Xlinker Accelerate"
222   fi
223 ])
224
225 CAIRO_ENABLE_FONT_BACKEND(quartz_font, Quartz, auto, [
226   use_quartz_font=$use_quartz
227 ])
228
229 CAIRO_ENABLE_SURFACE_BACKEND(quartz_image, Quartz Image, no, [
230   use_quartz_image=$use_quartz
231 ])
232
233 dnl ===========================================================================
234
235 CAIRO_ENABLE_SURFACE_BACKEND(win32, Microsoft Windows, auto, [
236   if test "x$have_windows" != xyes; then
237     use_win32="no (requires a Win32 platform)"
238   fi
239   win32_LIBS="-lgdi32 -lmsimg32"
240 ])
241
242 CAIRO_ENABLE_FONT_BACKEND(win32_font, Microsoft Windows, auto, [
243   use_win32_font=$use_win32
244 ])
245
246 test_win32_printing=no
247 if test "x$use_win32" = "xyes"; then
248   AC_CHECK_PROG(GS, gs, gs)
249   if test "$GS"; then
250     AC_DEFINE([CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE], 1, [Define to 1 if the Win32 Printing backend can be tested (needs ghostscript)])
251     test_win32_printing="yes"
252   else
253     AC_MSG_WARN([Win32 Printing backend will not be tested since ghostscript is not available])
254     test_win32_printing="no (requires ghostscript)"
255   fi
256 fi
257
258 AM_CONDITIONAL(CAIRO_CAN_TEST_WIN32_PRINTING_SURFACE, test "x$test_win32_printing" = "xyes")
259
260 dnl ===========================================================================
261
262 CAIRO_ENABLE_SURFACE_BACKEND(skia, Skia, no, [
263   AC_ARG_WITH([skia],
264               [AS_HELP_STRING([--with-skia=/path/to/skia],
265                               [directory to find compiled skia sources])],
266               [skia_DIR="$withval"],
267               [skia_DIR="`pwd`/../skia"])
268   AC_ARG_WITH([skia-bulid],
269               [AS_HELP_STRING([--with-skia-build=(Release|Debug)]
270                               [build of skia to link with, default is Release])],
271               [skia_BUILD="$withval"],
272               [skia_BUILD="Release"])
273   skia_NONPKGCONFIG_CFLAGS="-I$skia_DIR/include/config -I$skia_DIR/include/core -I$skia_DIR/include/effects"
274   if test "x$skia_BUILD" = x"Release"; then
275         skia_NONPKGCONFIG_CFLAGS="-DSK_RELEASE -DSK_CAN_USE_FLOAT $skia_NONPKGCONFIG_CFLAGS"
276   fi
277   skia_NONPKGCONFIG_LIBS="--start-group $skia_DIR/out/$skia_BUILD/obj.target/gyp/libeffects.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libimages.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libutils.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libopts.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libcore.a -end-group"
278   AC_SUBST(skia_DIR)
279 ])
280
281 dnl ===========================================================================
282
283 CAIRO_ENABLE_SURFACE_BACKEND(os2, OS/2, no, [
284   case "$host" in
285     *-*-os2*)
286       :
287       ;;
288     *)
289       use_os2="no (requires an OS/2 platform)"
290       ;;
291   esac
292 ])
293
294 dnl ===========================================================================
295
296 CAIRO_ENABLE_SURFACE_BACKEND(beos, BeOS/Zeta, no, [
297   case "$host" in
298     *-*-beos)
299       beos_LIBS=""
300       dnl Add libbe and libzeta if available
301       AC_CHECK_LIB(be,main,beos_LIBS="$beos_LIBS -lbe")
302       AC_CHECK_LIB(zeta,main,beos_LIBS="$beos_LIBS -lzeta")
303       ;;
304     *)
305       use_beos="no (requires a BeOS platform)"
306       ;;
307   esac
308 ])
309
310 dnl ===========================================================================
311
312 CAIRO_ENABLE_SURFACE_BACKEND(drm, DRM, no, [
313   drm_REQUIRES="libudev >= 136"
314   PKG_CHECK_MODULES(drm, $drm_REQUIRES, ,
315    [use_drm="no (requires $drm_REQUIRES, udev is available from git://git.kernel.org/pub/scm/linux/hotplug/udev.git)"])
316 ])
317
318 CAIRO_ENABLE_SURFACE_BACKEND(gallium, Gallium3D, no, [
319   if test "x$use_drm" = "xyes"; then
320       AC_ARG_WITH([gallium],
321                   [AS_HELP_STRING([--with-gallium=/path/to/mesa],
322                                   [directory to find gallium enabled mesa])],
323                   [mesa_DIR="$withval"],
324                   [mesa_DIR="`pwd`/../mesa"])
325       gallium_DIR="$mesa_DIR/src/gallium"
326       gallium_NONPKGCONFIG_CFLAGS="-I$mesa_DIR/include -I$mesa_DIR/src/mesa -I$gallium_DIR/include -I$gallium_DIR/auxiliary"
327       gallium_NONPKGCONFIG_LIBS="-lGL"
328       AC_SUBST(mesa_DIR)
329       AC_SUBST(gallium_DIR)
330   else
331     use_gallium="no (requires --enable-drm)"
332   fi
333 ])
334
335 dnl ===========================================================================
336
337 CAIRO_ENABLE_FUNCTIONS(png, PNG, yes, [
338   use_png=no
339   AC_ARG_VAR([png_REQUIRES], [module name for libpng to search for using pkg-config])
340   if test "x$png_REQUIRES" = x; then
341     # libpng13 is GnuWin32's libpng-1.2.8 :-(
342     for l in libpng libpng14 libpng12 libpng13 libpng10; do
343       if $PKG_CONFIG --exists $l ; then
344         png_REQUIRES=$l
345         use_png=yes
346         break
347       fi
348     done
349   else
350     use_png=yes
351   fi
352
353   if test "x$use_png" = "xyes" ; then 
354     PKG_CHECK_MODULES(png, $png_REQUIRES, , : )
355   else
356     AC_MSG_WARN([Could not find libpng in the pkg-config search path])
357   fi    
358 ])
359
360 dnl ===========================================================================
361 CAIRO_ENABLE_SURFACE_BACKEND(gl, OpenGL, no, [
362   gl_REQUIRES="gl"
363   PKG_CHECK_MODULES(gl, $gl_REQUIRES,, [
364           dnl Fallback to searching for headers
365           AC_CHECK_HEADER(GL/gl.h,, [use_gl="no (gl.pc nor OpenGL headers not found)"])
366           if test "x$use_gl" = "xyes"; then
367               gl_NONPKGCONFIG_CFLAGS=
368               gl_NONPKGCONFIG_LIBS="-lGL"
369           fi])
370
371   if test "x$have_dl" = "xyes" -a "x$have_dlsym" = "xyes"; then
372     gl_LIBS="$gl_LIBS -ldl"
373   fi
374
375   need_glx_functions=yes
376   need_wgl_functions=yes
377   need_egl_functions=yes
378 ])
379
380 dnl ===========================================================================
381 CAIRO_ENABLE_SURFACE_BACKEND(glesv2, OpenGLESv2, no, [
382   glesv2_REQUIRES="gles20"
383   PKG_CHECK_MODULES(glesv2, $glesv2_REQUIRES,, [
384           dnl Fallback to searching for headers
385           AC_CHECK_HEADER(GLES2/gl2.h,, [use_glesv2="no (glesv2.pc nor OpenGL ES 2.0 headers not found)"])
386           if test "x$use_glesv2" = "xyes"; then
387               glesv2_NONPKGCONFIG_CFLAGS=
388               glesv2_NONPKGCONFIG_LIBS="-lGLESv2"
389           fi])
390
391   if test "x$have_dl" = "xyes" -a "x$have_dlsym" = "xyes"; then
392     glesv2_LIBS="$glesv2_LIBS -ldl"
393   fi
394
395   need_egl_functions=yes
396 ])
397
398 dnl ===========================================================================
399 CAIRO_ENABLE_SURFACE_BACKEND(glesv3, OpenGLESv3, no, [
400   glesv3_REQUIRES="glesv2"
401   PKG_CHECK_MODULES(glesv3, $glesv3_REQUIRES,, [
402           dnl Fallback to searching for headers
403           AC_CHECK_HEADER(GLES3/gl3.h,, [use_glesv3="no (glesv2.pc nor OpenGL ES 3.0 headers not found)"])
404           if test "x$use_glesv3" = "xyes"; then
405               glesv3_NONPKGCONFIG_CFLAGS=
406               glesv3_NONPKGCONFIG_LIBS="-lGLESv2"
407           fi])
408
409   if test "x$have_dl" = "xyes" -a "x$have_dlsym" = "xyes"; then
410     glesv3_LIBS="$glesv3_LIBS -ldl"
411   fi
412
413   need_egl_functions=yes
414 ])
415
416 dnl ===========================================================================
417 CAIRO_ENABLE_SURFACE_BACKEND(cogl, Cogl, no, [
418   cogl_REQUIRES="cogl-2.0-experimental"
419   PKG_CHECK_MODULES(cogl, $cogl_REQUIRES,, [use_cogl="no"])
420 ])
421
422 dnl ===========================================================================
423
424 CAIRO_ENABLE_SURFACE_BACKEND(directfb, directfb, no, [
425   directfb_REQUIRES=directfb
426   PKG_CHECK_MODULES(directfb, $directfb_REQUIRES, ,
427                     [use_directfb="no (requires $directfb_REQUIRES http://www.directfb.org)"])
428 ])
429
430 dnl ===========================================================================
431
432 CAIRO_ENABLE_SURFACE_BACKEND(tg, TG, no, [
433   if test "x$use_tls" != "xyes" -a \
434           "x$use_pthread_setspecific" != "xyes"; then
435     use_tg="no (requires tls or pthread_setspecific)"
436     tg_REQUIRES="tls or pthread setspecific"
437   fi])
438
439 dnl ===========================================================================
440
441 CAIRO_ENABLE_SURFACE_BACKEND(vg, OpenVG, no, [
442   dnl There is no pkgconfig for OpenVG; lets do a header check
443   AC_CHECK_HEADER(VG/openvg.h,, [use_vg="no (OpenVG headers not found)"])
444   if test "x$use_vg" = "xyes"; then
445       vg_NONPKGCONFIG_CFLAGS=
446       vg_NONPKGCONFIG_LIBS="-lOpenVG"
447       need_egl_functions=yes
448       need_glx_functions=yes
449   fi
450 ])
451
452 CAIRO_ENABLE_FUNCTIONS(egl, EGL, auto, [
453   if test "x$need_egl_functions" = "xyes"; then
454       egl_REQUIRES="egl"
455       PKG_CHECK_MODULES(egl, $egl_REQUIRES, ,
456                     [egl_REQUIRES=""
457                      AC_CHECK_HEADER(EGL/egl.h,, [use_egl="no (EGL headers not found)"])
458                      if test "x$use_egl" = "xyes"; then
459                          egl_NONPKGCONFIG_CFLAGS=
460                          egl_NONPKGCONFIG_LIBS=
461                          save_LIBS="$LIBS"
462                          other_egl_LIBS=""
463                          # Temporary workaround for missing link from egl13
464                          AC_CHECK_LIB(csi, csi_stream_attachresource, other_egl_LIBS="-lcsi")
465                          LIBS="$other_egl_LIBS $LIBS"
466                          for egl_lib in EGL egl13 egl12 egl11; do
467                              if test -z "$egl_NONPKGCONFIG_LIBS"; then
468                                  AC_CHECK_LIB($egl_lib, eglGetError, egl_NONPKGCONFIG_LIBS="-l$egl_lib")
469                              fi
470                          done
471                          if test -z "$egl_NONPKGCONFIG_LIBS"; then
472                              use_egl="no (EGL library not found)"
473                          else
474                              egl_NONPKGCONFIG_LIBS="$egl_NONPKGCONFIG_LIBS $other_egl_LIBS"
475                          fi
476                          LIBS="$save_LIBS"
477                      fi
478         ])
479   else
480       use_egl="no (not required by any backend)"
481   fi
482 ])
483
484 CAIRO_ENABLE_FUNCTIONS(glx, GLX, auto, [
485   if test "x$need_glx_functions" = "xyes"; then
486     save_CFLAGS="$CFLAGS"
487     CFLAGS="$CFLAGS $gl_CFLAGS $gl_NONPKGCONFIG_CFLAGS"
488     AC_CHECK_HEADER(GL/glx.h,, [use_glx="no (GLX headers not found)"])
489     glx_NONPKGCONFIG_CFLAGS=
490     glx_NONPKGCONFIG_LIBS="-lGL"
491     CFLAGS="$save_CFLAGS"
492   else
493       use_glx="no (not required by any backend)"
494   fi
495 ])
496
497 CAIRO_ENABLE_FUNCTIONS(wgl, WGL, auto, [
498   if test "x$need_wgl_functions" = "xyes"; then
499     AC_CHECK_HEADER(windows.h,, [use_wgl="no (WGL headers not found)"])
500   else
501       use_wgl="no (not required by any backend)"
502   fi
503 ])
504
505 dnl ===========================================================================
506
507 any2ppm_cs=no
508 CAIRO_ENABLE_SURFACE_BACKEND(script, script, yes, [
509   any2ppm_cs=yes
510 ])
511
512 dnl ===========================================================================
513
514 # We use pkg-config to look for freetype2, but fall back to
515 # freetype-config if it fails.  We prefer pkg-config, since we can
516 # then just put freetype2 >= $FREETYPE_MIN_VERSION in
517 # Requires.private, but at least up to 2003-06-07, there was no
518 # freetype2.pc in the release.
519 #
520 # FreeType versions come in three forms:
521 #   release (such as 2.1.9)
522 #   libtool (such as 9.7.3) (returned by freetype-config and pkg-config)
523 #   platform-specific/soname (such as 6.3.4)
524 # and they recommend you never use the platform-specific version
525 # (see docs/VERSION.DLL in freetype2 sources)
526 #
527 # Set these as appropriate:
528
529 # release number - for information only
530 FREETYPE_MIN_RELEASE=2.1.9
531 # libtool-specific version - this is what is checked
532 FREETYPE_MIN_VERSION=9.7.3
533
534 CAIRO_ENABLE_FONT_BACKEND(ft, FreeType, auto, [
535
536     PKG_CHECK_MODULES(FREETYPE, freetype2 >= $FREETYPE_MIN_VERSION,
537                       [freetype_pkgconfig=yes],
538                       [freetype_pkgconfig=no])
539   
540     if test "x$freetype_pkgconfig" = "xyes"; then
541       ft_REQUIRES="freetype2 >= $FREETYPE_MIN_VERSION $ft_REQUIRES"
542     else
543   
544       if test -z "$FREETYPE_CONFIG"; then
545         AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
546       fi
547       if test "x$FREETYPE_CONFIG" = "xno" ; then
548         use_ft='no (freetype-config not found in path or $FREETYPE_CONFIG)'
549       else
550         AC_MSG_CHECKING(freetype2 libtool version)
551
552         FREETYPE_VERSION=`$FREETYPE_CONFIG --version`
553         AX_COMPARE_VERSION([$FREETYPE_VERSION], [gt], [$FREETYPE_MIN_VERSION],
554                            [AC_MSG_RESULT($FREETYPE_VERSION - OK)
555                            ft_NONPKGCONFIG_CFLAGS=`$FREETYPE_CONFIG --cflags`
556                            ft_NONPKGCONFIG_LIBS=`$FREETYPE_CONFIG --libs`],
557                            [AC_MSG_RESULT($FREETYPE_VERSION - Too old)
558                            use_ft="no ($FREETYPE_VERSION found; version $FREETYPE_MIN_VERSION from release $FREETYPE_MIN_RELEASE required)"])
559       fi
560     fi
561
562   ft_CFLAGS="$FREETYPE_CFLAGS"
563   ft_LIBS="$FREETYPE_LIBS"
564 ])
565
566 FONTCONFIG_MIN_VERSION=2.2.95
567 CAIRO_ENABLE_FONT_BACKEND(fc, Fontconfig, auto, [
568   use_fc=$use_ft
569   if test "x$use_fc" = "xyes"; then
570     fc_REQUIRES="fontconfig >= $FONTCONFIG_MIN_VERSION"
571     PKG_CHECK_MODULES(FONTCONFIG, $fc_REQUIRES,,
572                       [use_fc="no (requires $fc_REQUIRES)"])
573   fi
574   fc_CFLAGS="$FONTCONFIG_CFLAGS"
575   fc_LIBS="$FONTCONFIG_LIBS"
576 ])
577
578 if test "x$use_ft" = "xyes"; then
579   _save_libs="$LIBS"
580   _save_cflags="$CFLAGS"
581   LIBS="$LIBS $ft_LIBS"
582   CFLAGS="$CFLAGS $ft_CFLAGS"
583
584   AC_CHECK_FUNCS(FT_Get_X11_Font_Format FT_GlyphSlot_Embolden FT_GlyphSlot_Oblique FT_Load_Sfnt_Table FT_Library_SetLcdFilter)
585
586   LIBS="$_save_libs"
587   CFLAGS="$_save_cflags"
588 fi
589
590 if test "x$use_fc" = "xyes"; then
591   CAIRO_CHECK_FUNCS_WITH_FLAGS(FcInit FcFini, [$FONTCONFIG_CFLAGS], [$FONTCONFIG_LIBS])
592 fi
593
594 dnl ===========================================================================
595
596 CAIRO_ENABLE_SURFACE_BACKEND(ps, PostScript, yes, [
597     # The ps backend requires zlib.
598     use_ps=$have_libz
599     ps_NONPKGCONFIG_LIBS=-lz
600 ])
601
602 dnl ===========================================================================
603
604 SPECTRE_VERSION_REQUIRED=0.2.0
605 test_ps=no
606 any2ppm_ps=no
607 if test "x$use_ps" = "xyes"; then
608   AC_CHECK_PROG(GS, gs, gs)
609   if test "$GS"; then
610     AC_DEFINE([CAIRO_CAN_TEST_PS_SURFACE], 1, [Define to 1 if the PS backend can be tested (needs ghostscript)])
611     test_ps="yes"
612   else
613     AC_MSG_WARN([PS backend will not be tested since ghostscript is not available])
614     test_ps="no (requires ghostscript)"
615   fi
616
617   libspectre_DEPENDENCY="libspectre >= $SPECTRE_VERSION_REQUIRED"
618   PKG_CHECK_MODULES(LIBSPECTRE, $libspectre_DEPENDENCY,
619                     [any2ppm_ps=yes],
620                     [test_ps="no (requires libspectre)"])
621 fi
622
623 AM_CONDITIONAL(CAIRO_CAN_TEST_PS_SURFACE, test "x$test_ps" = "xyes")
624 AM_CONDITIONAL(CAIRO_HAS_SPECTRE, test "x$any2ppm_ps" = "xyes")
625 if test "x$any2ppm_ps" = "xyes"; then
626     AC_DEFINE([CAIRO_HAS_SPECTRE], 1, [Define to 1 if libspectre is available])
627 fi
628 AC_SUBST(LIBSPECTRE_CFLAGS)
629 AC_SUBST(LIBSPECTRE_LIBS)
630
631 dnl ===========================================================================
632
633 CAIRO_ENABLE_SURFACE_BACKEND(pdf, PDF, yes, [
634     # The pdf backend requires zlib.
635     use_pdf=$have_libz
636     pdf_NONPKGCONFIG_LIBS=-lz
637 ])
638
639 dnl ===========================================================================
640
641 # poppler-0.17.4 fixes text-pattern and text-transform
642 POPPLER_VERSION_REQUIRED=0.17.4
643 test_pdf=no
644 any2ppm_pdf=no
645 if test "x$use_pdf" = "xyes"; then
646   poppler_DEPENDENCY="poppler-glib >= $POPPLER_VERSION_REQUIRED"
647   PKG_CHECK_MODULES(POPPLER, $poppler_DEPENDENCY,
648                     [CAIRO_CHECK_FUNCS_WITH_FLAGS(poppler_page_render, [$POPPLER_CFLAGS], [$POPPLER_LIBS],
649                     [test_pdf=yes; any2ppm_pdf=yes],
650                     [test_pdf="no (requires $poppler_DEPENDENCY)"])],
651                     [test_pdf="no (requires $poppler_DEPENDENCY)"])
652   if test "x$test_pdf" = "xyes"; then
653     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)])
654   else
655     AC_MSG_WARN([PDF backend will not be tested since poppler >= $POPPLER_VERSION_REQUIRED is not available])
656   fi
657 fi
658
659 AM_CONDITIONAL(CAIRO_CAN_TEST_PDF_SURFACE, test "x$test_pdf" = "xyes")
660 AC_SUBST(POPPLER_CFLAGS)
661 AC_SUBST(POPPLER_LIBS)
662
663 AM_CONDITIONAL(CAIRO_HAS_MULTI_PAGE_SURFACES, test "x$use_ps" = "xyes" -o "x$use_pdf" = "xyes")
664
665 dnl ===========================================================================
666
667 CAIRO_ENABLE_SURFACE_BACKEND(svg, SVG, yes, [
668   if test "x$use_png" != "xyes"; then
669     use_svg="no (requires --enable-png)"
670   fi
671 ])
672
673 LIBRSVG_VERSION_REQUIRED=2.15.0
674 test_svg=no
675 any2ppm_svg=no
676 if test "x$use_svg" = "xyes"; then
677   librsvg_DEPENDENCY="librsvg-2.0 >= $LIBRSVG_VERSION_REQUIRED"
678   PKG_CHECK_MODULES(LIBRSVG, $librsvg_DEPENDENCY gdk-2.0,
679                     [CAIRO_CHECK_FUNCS_WITH_FLAGS(rsvg_pixbuf_from_file, [$LIBRSVG_CFLAGS], [$LIBRSVG_LIBS],
680                     [test_svg=yes; any2ppm_svg=yes],
681                     [test_svg="no (requires $librsvg_DEPENDENCY)"])],
682                     [test_svg="no (requires $librsvg_DEPENDENCY)"])
683   if test "x$test_svg" = "xyes"; then
684     AC_DEFINE([CAIRO_CAN_TEST_SVG_SURFACE], 1, [Define to 1 if the SVG backend can be tested])
685   else
686     AC_MSG_WARN([SVG backend will not be tested since librsvg >= $LIBRSVG_VERSION_REQUIRED is not available])
687   fi
688 fi
689
690 AM_CONDITIONAL(CAIRO_CAN_TEST_SVG_SURFACE, test "x$test_svg" = "xyes")
691 AC_SUBST(LIBRSVG_CFLAGS)
692 AC_SUBST(LIBRSVG_LIBS)
693
694 dnl ===========================================================================
695
696 dnl XXX make this a private feature?
697 CAIRO_ENABLE(test_surfaces, test surfaces, no)
698
699 dnl ===========================================================================
700
701 CAIRO_ENABLE_SURFACE_BACKEND(image, image, always, [
702   pixman_REQUIRES="pixman-1 >= 0.22.0"
703   PKG_CHECK_MODULES(pixman, $pixman_REQUIRES, ,
704     [use_image="no (requires $pixman_REQUIRES http://cairographics.org/releases/)"])
705   image_REQUIRES=$pixman_REQUIRES
706   image_CFLAGS=$pixman_CFLAGS
707   image_LIBS=$pixman_LIBS
708 ])
709
710 if pkg-config --exists 'pixman-1 >= 0.27.1'; then
711     AC_DEFINE([HAS_PIXMAN_GLYPHS], 1, [Enable pixman glyph cache])
712 fi
713
714
715 dnl ===========================================================================
716
717 CAIRO_ENABLE_SURFACE_BACKEND(mime, mime, always)
718 CAIRO_ENABLE_SURFACE_BACKEND(recording, recording, always)
719 CAIRO_ENABLE_SURFACE_BACKEND(observer, observer, always)
720 CAIRO_ENABLE_SURFACE_BACKEND(tee, tee, no)
721 CAIRO_ENABLE_SURFACE_BACKEND(xml, xml, no, [
722     use_xml=$have_libz
723     xml_NONPKGCONFIG_LIBS=-lz
724 ])
725
726 dnl ===========================================================================
727
728 CAIRO_ENABLE_FONT_BACKEND(user, user, always)
729
730 dnl ===========================================================================
731 dnl Check support for openmp
732 have_openmp=no
733 CAIRO_ENABLE(openmp, openmp, no, [CAIRO_CONFIGURE_OPENMP])
734 AM_CONDITIONAL(HAVE_OPENMP, test "x$use_openmp" = "xyes")
735 AC_SUBST(openmp_CFLAGS)
736 AC_SUBST(openmp_LIBS)
737
738 dnl ===========================================================================
739 dnl
740 dnl This needs to be last on our list of features so that the pthread libs and flags
741 dnl gets prefixed in front of everything else in CAIRO_{CFLAGS,LIBS}.
742 dnl
743 have_real_pthread=no
744 have_pthread=no
745 CAIRO_ENABLE(pthread, pthread, auto, [CAIRO_CONFIGURE_PTHREAD])
746 AM_CONDITIONAL(HAVE_REAL_PTHREAD, test "x$use_pthread" = "xyes" -a "x$have_real_pthread" = "xyes")
747 AM_CONDITIONAL(HAVE_PTHREAD, test "x$use_pthread" = "xyes")
748 AC_SUBST(pthread_CFLAGS)
749 AC_SUBST(pthread_LIBS)
750 AC_SUBST(real_pthread_CFLAGS)
751 AC_SUBST(real_pthread_LIBS)
752
753
754 dnl ===========================================================================
755 dnl Build gobject integration library
756
757 CAIRO_ENABLE_FUNCTIONS(gobject, gobject, auto, [
758   gobject_REQUIRES="gobject-2.0 glib-2.0"
759   PKG_CHECK_MODULES(GOBJECT, $gobject_REQUIRES, ,
760     [use_gobject="no (requires $gobject_REQUIRES http://download.gnome.org/pub/GNOME/sources/glib/)"])
761   gobject_NONPKGCONFIG_EXTRA_LIBS="-L\${libdir} -lcairo-gobject"
762 ])
763 dnl I'm too lazy to fix the caching properly
764 if test "x$use_gobject" = "xyes"; then
765   PKG_CHECK_MODULES(GOBJECT, $gobject_REQUIRES, : )
766 fi
767
768 dnl ===========================================================================
769 dnl Default to quick testing during development, but force a full test before
770 dnl release
771
772 AC_ARG_ENABLE(full-testing,
773   AS_HELP_STRING([--enable-full-testing],
774                  [Sets the test suite to perform full testing by default, which
775                   will dramatically slow down make check, but is a
776                   *requirement* before release.]), [
777 if test "x$enableval" = "xyes"; then
778     CAIRO_TEST_MODE=full
779     AC_SUBST(CAIRO_TEST_MODE)
780 fi
781 ])
782
783 dnl ===========================================================================
784 dnl Build the external converter if we have any of the test backends
785 AM_CONDITIONAL(BUILD_ANY2PPM,
786                test "x$any2ppm_svg" = "xyes" \
787                  -o "x$any2ppm_pdf" = "xyes" \
788                  -o "x$any2ppm_ps"  = "xyes" \
789                  -o "x$any2ppm_cs"  = "xyes")
790
791 dnl ===========================================================================
792 dnl Some utilities need to dlopen the shared libraries, so they need to
793 dnl know how libtools will name them
794
795 case $host in
796 *-*-darwin*)
797         SHLIB_EXT="dylib"
798         ;;
799 *)
800         SHLIB_EXT="so"
801         ;;
802 esac
803 AC_DEFINE_UNQUOTED(SHARED_LIB_EXT, "${SHLIB_EXT}", [Shared library file extension])
804 AC_SUBST(SHLIB_EXT)
805
806 dnl ===========================================================================
807 dnl The tracing utility requires LD_PRELOAD, so only build it for systems
808 dnl that are known to work.
809
810 case $host in
811 *-linux*|*-*bsd*|*-solaris*|*-*-darwin*|*-dragonfly*|*-*-gnu*)
812         have_ld_preload="yes"
813         ;;
814 *)
815         have_ld_preload="no"
816         ;;
817 esac
818
819 CAIRO_ENABLE(trace, cairo-trace, auto, [
820         if test "x$have_ld_preload" != "xyes" -o \
821                 "x$have_libz" != "xyes" -o \
822                 "x$have_real_pthread" != "xyes" -o \
823                 "x$have_dlsym" != "xyes"; then
824                 use_trace="no (requires dynamic linker and zlib and real pthreads)"
825         fi
826 ])
827
828 CAIRO_ENABLE(interpreter, cairo-script-interpreter, yes, [
829         if test "x$have_libz" != "xyes"; then
830                 use_interpreter="no (requires zlib)"
831         fi
832 ])
833
834 AC_CHECK_LIB(bfd, bfd_openr,
835          [AC_CHECK_HEADER(bfd.h, [have_bfd=yes],
836          [have_bfd=no])], [have_bfd=no])
837 AC_CHECK_HEADER(libiberty.h,, [have_bfd=no])
838 if test "x$have_bfd" = "xyes"; then
839     AC_DEFINE([HAVE_BFD], [1], [Define to 1 if you have the binutils development files installed])
840     BFD_LIBS=-lbfd
841     AC_SUBST(BFD_LIBS)
842 fi
843
844 CAIRO_ENABLE(symbol_lookup, symbol-lookup, auto, [
845         if test "x$have_bfd" != "xyes"; then
846                 use_symbol_lookup="no (requires bfd)"
847         fi
848 ])
849
850 PKG_CHECK_MODULES(glib, glib-2.0, have_glib=yes, have_glib=no)
851 AC_SUBST(glib_CFLAGS)
852 AC_SUBST(glib_LIBS)
853 AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes")
854
855 save_LIBS="$LIBS"
856 AC_CHECK_LIB(rt, shm_open, shm_LIBS="-lrt")
857 AC_SUBST(shm_LIBS)
858 LIBS="$save_LIBS"
859
860 dnl ===========================================================================
861
862 AC_ARG_ENABLE(some-floating-point,
863   AS_HELP_STRING([--disable-some-floating-point],
864                  [Disable certain code paths that rely heavily on double precision
865                   floating-point calculation. This option can improve
866                   performance on systems without a double precision floating-point
867                   unit, but might degrade performance on those that do.]), [
868 if test "x$enableval" = "xno"; then
869   # A value of 'no' for $enableval means that they want to disable, which
870   # means 'yes' for $disable_some_floating_point.
871   disable_some_floating_point=yes
872 fi
873 ], [disable_some_floating_point=no])
874
875 AM_CONDITIONAL(DISABLE_SOME_FLOATING_POINT,
876                test "x$disable_some_floating_point" = "xyes")
877 if test "x$disable_some_floating_point" = "xyes"; then
878   AC_DEFINE(DISABLE_SOME_FLOATING_POINT, 1,
879             [Define to 1 to disable certain code paths that rely heavily on
880              double precision floating-point calculation])
881 fi
882
883 dnl ===========================================================================
884
885 dnl Extra stuff we need to do when building C++ code
886 need_cxx="no"
887 AS_IF([test "x$use_skia" = "xyes"], [need_cxx="yes"])
888 AS_IF([test "x$use_qt" = "xyes"], [need_cxx="yes"])
889 AS_IF([test "x$use_beos" = "xyes"], [need_cxx="yes"])
890
891 AM_CONDITIONAL(BUILD_CXX, test "x$need_cxx" = "xyes")
892
893 dnl ===========================================================================
894
895 # We use GTK+ for some utility/debugging tools
896 PKG_CHECK_MODULES(gtk, "gtk+-2.0",have_gtk=yes, have_gtk=no)
897 AM_CONDITIONAL(HAVE_GTK, test "x$have_gtk" = "xyes")
898
899 AC_CONFIG_FILES([
900 Makefile
901 boilerplate/Makefile
902 src/Makefile
903 test/Makefile
904 test/pdiff/Makefile
905 perf/Makefile
906 perf/micro/Makefile
907 util/Makefile
908 util/cairo-fdr/Makefile
909 util/cairo-gobject/Makefile
910 util/cairo-missing/Makefile
911 util/cairo-script/Makefile
912 util/cairo-script/examples/Makefile
913 util/cairo-sphinx/Makefile
914 util/cairo-trace/Makefile
915 util/cairo-trace/cairo-trace
916 doc/Makefile
917 doc/public/Makefile
918 ])
919
920 AC_OUTPUT
921 CAIRO_REPORT