2 dnl fontconfig/configure.in
4 dnl Copyright © 2003 Keith Packard
6 dnl Permission to use, copy, modify, distribute, and sell this software and its
7 dnl documentation for any purpose is hereby granted without fee, provided that
8 dnl the above copyright notice appear in all copies and that both that
9 dnl copyright notice and this permission notice appear in supporting
10 dnl documentation, and that the name of the author(s) not be used in
11 dnl advertising or publicity pertaining to distribution of the software without
12 dnl specific, written prior permission. The authors make no
13 dnl representations about the suitability of this software for any purpose. It
14 dnl is provided "as is" without express or implied warranty.
16 dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17 dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18 dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19 dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20 dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21 dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22 dnl PERFORMANCE OF THIS SOFTWARE.
24 dnl Process this file with autoconf to create configure.
28 dnl ==========================================================================
30 dnl ==========================================================================
32 dnl This is the package version number, not the shared library
33 dnl version. This same version number must appear in fontconfig/fontconfig.h
34 dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
35 dnl not possible to extract the version number here from fontconfig.h
36 AC_INIT([fontconfig], [2.10.91], [https://bugs.freedesktop.org/enger_bug.cgi?product=fontconfig])
38 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
40 dnl libtool versioning
42 dnl bump revision when fixing bugs
43 dnl bump current and age, reset revision to zero when adding APIs
44 dnl bump current, leave age, reset revision to zero when changing/removing APIS
47 AC_SUBST(LIBT_CURRENT)
48 AC_SUBST(LIBT_REVISION)
51 LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
52 AC_SUBST(LIBT_VERSION_INFO)
54 LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
55 AC_SUBST(LIBT_CURRENT_MINUS_AGE)
57 dnl ==========================================================================
59 AC_CONFIG_HEADERS(config.h)
60 AC_CONFIG_MACRO_DIR([m4])
63 AC_USE_SYSTEM_EXTENSIONS
71 m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig))
73 AM_MISSING_PROG([GPERF], [gperf])
75 AC_MSG_CHECKING([for RM macro])
76 _predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
77 if test "x$_predefined_rm" = "x"; then
78 AC_MSG_RESULT([no predefined RM])
79 AC_CHECK_PROG(RM, rm, [rm -f])
81 AC_MSG_RESULT($_predefined_rm)
84 dnl ==========================================================================
93 AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
95 if test "$os_win32" = "yes"; then
96 AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
98 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
101 if test "x$GCC" = "xyes"; then
102 WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
103 -Wmissing-prototypes -Wmissing-declarations \
104 -Wnested-externs -fno-strict-aliasing"
105 AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
106 [Can use #warning in C files])
108 AC_SUBST(WARN_CFLAGS)
111 dnl ==========================================================================
114 AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
115 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
116 AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
118 dnl ==========================================================================
121 [AC_HELP_STRING([--with-arch=ARCH],
122 [Force architecture to ARCH])],
123 arch="$withval", arch=auto)
125 if test "x$arch" != xauto; then
126 AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
130 dnl ==========================================================================
132 # Checks for header files.
135 AC_CHECK_HEADERS([fcntl.h regex.h stdlib.h string.h unistd.h sys/vfs.h sys/statfs.h sys/param.h sys/mount.h])
136 AX_CREATE_STDINT_H([src/fcstdint.h])
138 # Checks for typedefs, structures, and compiler characteristics.
141 AC_C_FLEXIBLE_ARRAY_MEMBER
144 # Checks for library functions.
147 AC_CHECK_FUNCS([link mkstemp mkostemp _mktemp_s getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r regcomp regerror regexec regfree fstatvfs fstatfs lstat])
149 dnl AC_CHECK_FUNCS doesn't check for header files.
150 dnl posix_fadvise() may be not available in older libc.
151 fc_saved_CFLAGS="$CFLAGS"
152 CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
153 AC_MSG_CHECKING([for posix_fadvise])
154 AC_LINK_IFELSE([AC_LANG_SOURCE([[
157 return posix_fadvise(0, 0, 0, 0);
161 AC_DEFINE([HAVE_POSIX_FADVISE], [1], [Define to 1 if you have the 'posix_fadvise' function.])
162 ],[AC_MSG_RESULT([no])])
163 CFLAGS="$fc_saved_CFLAGS"
166 if test "x$ac_cv_func_fstatvfs" = "xyes"; then
167 AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,,
168 [#include <sys/statvfs.h>])
170 if test "x$ac_cv_func_fstatfs" = "xyes"; then
171 AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [
172 #ifdef HAVE_SYS_VFS_H
175 #ifdef HAVE_SYS_STATFS_H
176 #include <sys/statfs.h>
178 #ifdef HAVE_SYS_PARAM_H
179 #include <sys/param.h>
181 #ifdef HAVE_SYS_MOUNT_H
182 #include <sys/mount.h>
185 AC_CHECK_MEMBERS([struct dirent.d_type],,,
186 [#include <dirent.h>])
190 if test "x$ac_cv_func_regcomp" = "xyes" -a "x$ac_cv_func_regerror" = "xyes" -a "x$ac_cv_func_regexec" = "xyes" -a "x$ac_cv_func_regfree"; then
191 AC_DEFINE(USE_REGEX,,[Use regex])
198 [AC_HELP_STRING([--enable-iconv],
199 [Use iconv to support non-Unicode SFNT name])],
201 AC_ARG_WITH(libiconv,
202 [AC_HELP_STRING([--with-libiconv=DIR],
203 [Use libiconv in DIR])],
204 [if test "x$withval" = "xyes"; then
205 libiconv_prefix=$prefix
207 libiconv_prefix=$withval
209 [libiconv_prefix=auto])
210 AC_ARG_WITH(libiconv-includes,
211 [AC_HELP_STRING([--with-libiconv-includes=DIR],
212 [Use libiconv includes in DIR])],
213 [libiconv_includes=$withval],
214 [libiconv_includes=auto])
215 AC_ARG_WITH(libiconv-lib,
216 [AC_HELP_STRING([--with-libiconv-lib=DIR],
217 [Use libiconv library in DIR])],
218 [libiconv_lib=$withval],
221 # if no libiconv,libiconv-includes,libiconv-lib are specified,
222 # libc's iconv has a priority.
223 if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
224 libiconv_cflags="-I${libiconv_includes}"
225 elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
226 libiconv_cflags="-I${libiconv_prefix}/include"
231 if test "x$libiconv_cflags" != "x"; then
232 if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then
233 libiconv_libs="-L${libiconv_lib} -liconv"
234 elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then
235 libiconv_libs="-L${libiconv_prefix}/lib -liconv"
237 libiconv_libs="-liconv"
242 if test "x$enable_iconv" != "xno"; then
243 AC_MSG_CHECKING([for a usable iconv])
244 if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then
245 iconvsaved_CFLAGS="$CFLAGS"
246 iconvsaved_LIBS="$LIBS"
247 CFLAGS="$CFLAGS $libiconv_cflags"
248 LIBS="$LIBS $libiconv_libs"
250 AC_TRY_LINK([#include <iconv.h>],
251 [iconv_open ("from", "to");],
252 [iconv_type="libiconv"
256 CFLAGS="$iconvsaved_CFLAGS"
257 LIBS="$iconvsaved_LIBS"
258 ICONV_CFLAGS="$libiconv_cflags"
259 ICONV_LIBS="$libiconv_libs"
261 if test "x$use_iconv" = "x0"; then
262 AC_TRY_LINK([#include <iconv.h>],
263 [iconv_open ("from", "to");],
266 [iconv_type="not found"
270 AC_MSG_RESULT([$iconv_type])
271 AC_SUBST(ICONV_CFLAGS)
274 AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
276 # Checks for FreeType
278 PKG_CHECK_MODULES(FREETYPE, freetype2)
280 AC_SUBST(FREETYPE_LIBS)
281 AC_SUBST(FREETYPE_CFLAGS)
283 fontconfig_save_libs="$LIBS"
284 fontconfig_save_cflags="$CFLAGS"
285 LIBS="$LIBS $FREETYPE_LIBS"
286 CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
287 AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Select_Size)
288 AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
289 HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
290 HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
291 [#include <ft2build.h>
292 #include FT_FREETYPE_H])
293 AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
294 [FT_Bitmap_Size structure includes y_ppem field])
295 CFLAGS="$fontconfig_save_cflags"
296 LIBS="$fontconfig_save_libs"
299 # Check expat configuration
302 [AC_HELP_STRING([--with-expat=DIR],
303 [Use Expat in DIR])],
304 [expat_prefix=$withval],
306 AC_ARG_WITH(expat-includes,
307 [AC_HELP_STRING([--with-expat-includes=DIR],
308 [Use Expat includes in DIR])],
309 [expat_includes=$withval],
310 [expat_includes=auto])
311 AC_ARG_WITH(expat-lib,
312 [AC_HELP_STRING([--with-expat-lib=DIR])],
313 [expat_lib=$withval],
316 if test "$enable_libxml2" != "yes"; then
317 use_pkgconfig_for_expat=yes
318 if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
319 PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
321 use_pkgconfig_for_expat=no
323 if test "x$use_pkgconfig_for_expat" = "xno"; then
324 if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
325 EXPAT_CFLAGS="-I${expat_includes}"
326 elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
327 EXPAT_CFLAGS="-I${expat_prefix}/include"
331 if test "$expat_lib" != "auto"; then
332 EXPAT_LIBS="-L${expat_lib} -lexpat"
333 elif test "$expat_prefix" != "auto"; then
334 EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
340 expatsaved_CPPFLAGS="$CPPFLAGS"
341 expatsaved_LIBS="$LIBS"
342 CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
343 LIBS="$LIBS $EXPAT_LIBS"
345 AC_CHECK_HEADER(expat.h)
346 if test "$ac_cv_header_expat_h" = "no"; then
347 AC_CHECK_HEADER(xmlparse.h)
348 if test "$ac_cv_header_xmlparse_h" = "yes"; then
350 AC_SUBST(HAVE_XMLPARSE_H)
351 AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
352 [Use xmlparse.h instead of expat.h])
355 *** expat is required. or try to use --enable-libxml2])
358 AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
359 if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
361 *** expat is required. or try to use --enable-libxml2])
363 CPPFLAGS="$expatsaved_CPPFLAGS"
364 LIBS="$expatsaved_LIBS"
366 AC_SUBST(EXPAT_CFLAGS)
371 # Check libxml2 configuration
373 AC_ARG_ENABLE(libxml2,
374 [AC_HELP_STRING([--enable-libxml2],
375 [Use libxml2 instead of Expat])])
377 if test "$enable_libxml2" = "yes"; then
378 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
379 AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
381 AC_SUBST(LIBXML2_CFLAGS)
382 AC_SUBST(LIBXML2_LIBS)
384 fc_saved_CFLAGS="$CFLAGS"
385 CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
386 AC_MSG_CHECKING([SAX1 support in libxml2])
387 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
388 #include <libxml/xmlversion.h>
389 #if !defined(LIBXML_SAX1_ENABLED)
390 # include "error: No SAX1 support in libxml2"
392 ]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
393 *** SAX1 support in libxml2 is required. enable it or use expat instead.])])
394 CFLAGS="$fc_saved_CFLAGS"
398 # Set default font directory
401 AC_ARG_WITH(default-fonts,
402 [AC_HELP_STRING([--with-default-fonts=DIR],
403 [Use fonts from DIR when config is busted])],
404 default_fonts="$withval", default_fonts=yes)
406 case "$default_fonts" in
408 if test "$os_win32" = "yes"; then
409 FC_DEFAULT_FONTS="WINDOWSFONTDIR"
410 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR",
411 [Windows font directory])
413 FC_DEFAULT_FONTS="/usr/share/fonts"
414 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts",
415 [System font directory])
419 FC_DEFAULT_FONTS="$default_fonts"
420 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
421 [System font directory])
425 AC_SUBST(FC_DEFAULT_FONTS)
428 # Add more fonts if available. By default, add only the directories
429 # with outline fonts; those with bitmaps can be added as desired in
430 # local.conf or ~/.fonts.conf
432 AC_ARG_WITH(add-fonts,
433 [AC_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],
434 [Find additional fonts in DIR1,DIR2,... ])],
435 add_fonts="$withval", add_fonts=yes)
440 for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
441 case x"$FC_ADD_FONTS" in
444 if test -d "$sub"; then
445 case x$FC_ADD_FONTS in
450 FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
457 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
463 FC_ADD_FONTS="$add_fonts"
464 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
468 AC_SUBST(FC_ADD_FONTS)
472 case "$FC_ADD_FONTS" in
476 FC_FONTPATH=`echo $FC_ADD_FONTS |
477 sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
481 AC_SUBST(FC_FONTPATH)
484 # Set default cache directory path
486 AC_ARG_WITH(cache-dir,
487 [AC_HELP_STRING([--with-cache-dir=DIR],
488 [Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
489 fc_cachedir="$withval", fc_cachedir=yes)
493 if test "$os_win32" = "yes"; then
494 fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
496 fc_cachedir='${localstatedir}/cache/${PACKAGE}'
502 AC_SUBST(fc_cachedir)
503 FC_CACHEDIR=${fc_cachedir}
504 AC_SUBST(FC_CACHEDIR)
506 FC_FONTDATE=`LC_ALL=C date`
508 AC_SUBST(FC_FONTDATE)
511 # Set configuration paths
514 AC_ARG_WITH(templatedir,
515 [AC_HELP_STRING([--with-templatedir=DIR],
516 [Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
517 [templatedir="$withval"],
519 AC_ARG_WITH(baseconfigdir,
520 [AC_HELP_STRING([--with-baseconfigdir=DIR],
521 [Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
522 [baseconfigdir="$withval"],
524 AC_ARG_WITH(configdir,
525 [AC_HELP_STRING([--with-configdir=DIR],
526 [Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
527 [configdir="$withval"],
530 [AC_HELP_STRING([--with-xmldir=DIR],
531 [Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
535 case "$templatedir" in
537 templatedir='${datadir}'/fontconfig/conf.avail
542 case "$baseconfigdir" in
544 baseconfigdir='${sysconfdir}'/fonts
551 configdir='${baseconfigdir}'/conf.d
558 xmldir='${datadir}'/xml/fontconfig
564 TEMPLATEDIR=${templatedir}
565 BASECONFIGDIR=${baseconfigdir}
566 CONFIGDIR=${configdir}
568 AC_SUBST(templatedir)
569 AC_SUBST(TEMPLATEDIR)
570 AC_SUBST(baseconfigdir)
571 AC_SUBST(BASECONFIGDIR)
578 dnl ===========================================================================
581 # Thread-safety primitives
584 AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
585 fc_cv_have_intel_atomic_primitives=false
587 void memory_barrier (void) { __sync_synchronize (); }
588 int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
589 int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
590 void mutex_unlock (int *m) { __sync_lock_release (m); }
591 ], [], fc_cv_have_intel_atomic_primitives=true
594 if $fc_cv_have_intel_atomic_primitives; then
595 AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
598 AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
599 fc_cv_have_solaris_atomic_ops=false
602 /* This requires Solaris Studio 12.2 or newer: */
603 #include <mbarrier.h>
604 void memory_barrier (void) { __machine_rw_barrier (); }
605 int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
606 void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
607 ], [], fc_cv_have_solaris_atomic_ops=true
610 if $fc_cv_have_solaris_atomic_ops; then
611 AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
614 if test "$os_win32" = no && ! $have_pthread; then
615 AC_CHECK_HEADERS(sched.h)
616 AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
620 if test "$os_win32" = no; then
621 AX_PTHREAD([have_pthread=true])
623 if $have_pthread; then
624 LIBS="$PTHREAD_LIBS $LIBS"
625 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
627 AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
629 AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
632 dnl ===========================================================================
635 # Let people not build/install docs if they don't have docbook
638 AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
640 AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
644 # Check if docs exist or can be created
646 if test x$HASDOCBOOK = xno; then
647 if test -f $srcdir/doc/fonts-conf.5; then
655 [AC_HELP_STRING([--disable-docs],
656 [Don't build and install documentation])],
658 enable_docs=$default_docs)
660 AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
662 if test "x$enable_docs" = xyes; then
664 cat $srcdir/doc/*.fncs | awk '
665 /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
666 /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
667 /^@@/ { done = 0; }' > $tmp
668 DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
669 echo DOCMAN3 $DOCMAN3
677 dnl Figure out what cache format suffix to use for this architecture
679 AC_CHECK_SIZEOF([void *])
680 AC_CHECK_ALIGNOF([double])
682 dnl include the header file for workaround of miscalculating size on autoconf
683 dnl particularly for fat binaries
684 AH_BOTTOM([#include "config-fixups.h"])
690 fc-glyphname/Makefile