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.
29 dnl ==========================================================================
31 dnl ==========================================================================
33 dnl This is the package version number, not the shared library
34 dnl version. This same version number must appear in fontconfig/fontconfig.h
35 dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
36 dnl not possible to extract the version number here from fontconfig.h
37 AM_INIT_AUTOMAKE(fontconfig, 2.10.91)
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
72 AC_MSG_CHECKING([for RM macro])
73 _predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
74 if test "x$_predefined_rm" = "x"; then
75 AC_MSG_RESULT([no predefined RM])
76 AC_CHECK_PROG(RM, rm, [rm -f])
78 AC_MSG_RESULT($_predefined_rm)
81 dnl ==========================================================================
90 AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
92 if test "$os_win32" = "yes"; then
93 AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
95 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
98 if test "x$GCC" = "xyes"; then
99 WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
100 -Wmissing-prototypes -Wmissing-declarations \
101 -Wnested-externs -fno-strict-aliasing"
102 AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
103 [Can use #warning in C files])
105 AC_SUBST(WARN_CFLAGS)
108 dnl ==========================================================================
111 AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
112 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
113 AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
115 dnl ==========================================================================
118 [AC_HELP_STRING([--with-arch=ARCH],
119 [Force architecture to ARCH])],
120 arch="$withval", arch=auto)
122 if test "x$arch" != xauto; then
123 AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
127 dnl ==========================================================================
129 # Checks for header files.
132 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])
133 AX_CREATE_STDINT_H([src/fcstdint.h])
135 # Checks for typedefs, structures, and compiler characteristics.
138 AC_C_FLEXIBLE_ARRAY_MEMBER
141 # Checks for library functions.
144 AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp mkostemp _mktemp_s strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r regcomp regerror regexec regfree fstatvfs fstatfs lstat])
146 dnl AC_CHECK_FUNCS doesn't check for header files.
147 dnl posix_fadvise() may be not available in older libc.
148 fc_saved_CFLAGS="$CFLAGS"
149 CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
150 AC_MSG_CHECKING([for posix_fadvise])
151 AC_LINK_IFELSE([AC_LANG_SOURCE([[
154 return posix_fadvise(0, 0, 0, 0);
158 AC_DEFINE([HAVE_POSIX_FADVISE], [1], [Define to 1 if you have the 'posix_fadvise' function.])
159 ],[AC_MSG_RESULT([no])])
160 CFLAGS="$fc_saved_CFLAGS"
163 if test "x$ac_cv_func_fstatvfs" = "xyes"; then
164 AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,,
165 [#include <sys/statvfs.h>])
167 if test "x$ac_cv_func_fstatfs" = "xyes"; then
168 AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [
169 #ifdef HAVE_SYS_VFS_H
172 #ifdef HAVE_SYS_STATFS_H
173 #include <sys/statfs.h>
175 #ifdef HAVE_SYS_PARAM_H
176 #include <sys/param.h>
178 #ifdef HAVE_SYS_MOUNT_H
179 #include <sys/mount.h>
182 AC_CHECK_MEMBERS([struct dirent.d_type],,,
183 [#include <dirent.h>])
187 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
188 AC_DEFINE(USE_REGEX,,[Use regex])
195 [AC_HELP_STRING([--enable-iconv],
196 [Use iconv to support non-Unicode SFNT name])],
198 AC_ARG_WITH(libiconv,
199 [AC_HELP_STRING([--with-libiconv=DIR],
200 [Use libiconv in DIR])],
201 [if test "x$withval" = "xyes"; then
202 libiconv_prefix=$prefix
204 libiconv_prefix=$withval
206 [libiconv_prefix=auto])
207 AC_ARG_WITH(libiconv-includes,
208 [AC_HELP_STRING([--with-libiconv-includes=DIR],
209 [Use libiconv includes in DIR])],
210 [libiconv_includes=$withval],
211 [libiconv_includes=auto])
212 AC_ARG_WITH(libiconv-lib,
213 [AC_HELP_STRING([--with-libiconv-lib=DIR],
214 [Use libiconv library in DIR])],
215 [libiconv_lib=$withval],
218 # if no libiconv,libiconv-includes,libiconv-lib are specified,
219 # libc's iconv has a priority.
220 if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
221 libiconv_cflags="-I${libiconv_includes}"
222 elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
223 libiconv_cflags="-I${libiconv_prefix}/include"
228 if test "x$libiconv_cflags" != "x"; then
229 if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then
230 libiconv_libs="-L${libiconv_lib} -liconv"
231 elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then
232 libiconv_libs="-L${libiconv_prefix}/lib -liconv"
234 libiconv_libs="-liconv"
239 if test "x$enable_iconv" != "xno"; then
240 AC_MSG_CHECKING([for a usable iconv])
241 if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then
242 iconvsaved_CFLAGS="$CFLAGS"
243 iconvsaved_LIBS="$LIBS"
244 CFLAGS="$CFLAGS $libiconv_cflags"
245 LIBS="$LIBS $libiconv_libs"
247 AC_TRY_LINK([#include <iconv.h>],
248 [iconv_open ("from", "to");],
249 [iconv_type="libiconv"
253 CFLAGS="$iconvsaved_CFLAGS"
254 LIBS="$iconvsaved_LIBS"
255 ICONV_CFLAGS="$libiconv_cflags"
256 ICONV_LIBS="$libiconv_libs"
258 if test "x$use_iconv" = "x0"; then
259 AC_TRY_LINK([#include <iconv.h>],
260 [iconv_open ("from", "to");],
263 [iconv_type="not found"
267 AC_MSG_RESULT([$iconv_type])
268 AC_SUBST(ICONV_CFLAGS)
271 AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
273 # Checks for FreeType
275 PKG_CHECK_MODULES(FREETYPE, freetype2)
277 AC_SUBST(FREETYPE_LIBS)
278 AC_SUBST(FREETYPE_CFLAGS)
280 fontconfig_save_libs="$LIBS"
281 fontconfig_save_cflags="$CFLAGS"
282 LIBS="$LIBS $FREETYPE_LIBS"
283 CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
284 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)
285 AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
286 HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
287 HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
288 [#include <ft2build.h>
289 #include FT_FREETYPE_H])
290 AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
291 [FT_Bitmap_Size structure includes y_ppem field])
292 CFLAGS="$fontconfig_save_cflags"
293 LIBS="$fontconfig_save_libs"
296 # Check expat configuration
299 [AC_HELP_STRING([--with-expat=DIR],
300 [Use Expat in DIR])],
301 [expat_prefix=$withval],
303 AC_ARG_WITH(expat-includes,
304 [AC_HELP_STRING([--with-expat-includes=DIR],
305 [Use Expat includes in DIR])],
306 [expat_includes=$withval],
307 [expat_includes=auto])
308 AC_ARG_WITH(expat-lib,
309 [AC_HELP_STRING([--with-expat-lib=DIR])],
310 [expat_lib=$withval],
313 if test "$enable_libxml2" != "yes"; then
314 use_pkgconfig_for_expat=yes
315 if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
316 PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
318 use_pkgconfig_for_expat=no
320 if test "x$use_pkgconfig_for_expat" = "xno"; then
321 if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
322 EXPAT_CFLAGS="-I${expat_includes}"
323 elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
324 EXPAT_CFLAGS="-I${expat_prefix}/include"
328 if test "$expat_lib" != "auto"; then
329 EXPAT_LIBS="-L${expat_lib} -lexpat"
330 elif test "$expat_prefix" != "auto"; then
331 EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
337 expatsaved_CPPFLAGS="$CPPFLAGS"
338 expatsaved_LIBS="$LIBS"
339 CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
340 LIBS="$LIBS $EXPAT_LIBS"
342 AC_CHECK_HEADER(expat.h)
343 if test "$ac_cv_header_expat_h" = "no"; then
344 AC_CHECK_HEADER(xmlparse.h)
345 if test "$ac_cv_header_xmlparse_h" = "yes"; then
347 AC_SUBST(HAVE_XMLPARSE_H)
348 AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
349 [Use xmlparse.h instead of expat.h])
352 *** expat is required. or try to use --enable-libxml2])
355 AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
356 if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
358 *** expat is required. or try to use --enable-libxml2])
360 CPPFLAGS="$expatsaved_CPPFLAGS"
361 LIBS="$expatsaved_LIBS"
363 AC_SUBST(EXPAT_CFLAGS)
368 # Check libxml2 configuration
370 AC_ARG_ENABLE(libxml2,
371 [AC_HELP_STRING([--enable-libxml2],
372 [Use libxml2 instead of Expat])])
374 if test "$enable_libxml2" = "yes"; then
375 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
376 AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
378 AC_SUBST(LIBXML2_CFLAGS)
379 AC_SUBST(LIBXML2_LIBS)
381 fc_saved_CFLAGS="$CFLAGS"
382 CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
383 AC_MSG_CHECKING([SAX1 support in libxml2])
384 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
385 #include <libxml/xmlversion.h>
386 #if !defined(LIBXML_SAX1_ENABLED)
387 # include "error: No SAX1 support in libxml2"
389 ]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
390 *** SAX1 support in libxml2 is required. enable it or use expat instead.])])
391 CFLAGS="$fc_saved_CFLAGS"
395 # Set default font directory
398 AC_ARG_WITH(default-fonts,
399 [AC_HELP_STRING([--with-default-fonts=DIR],
400 [Use fonts from DIR when config is busted])],
401 default_fonts="$withval", default_fonts=yes)
403 case "$default_fonts" in
405 if test "$os_win32" = "yes"; then
406 FC_DEFAULT_FONTS="WINDOWSFONTDIR"
407 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR",
408 [Windows font directory])
410 FC_DEFAULT_FONTS="/usr/share/fonts"
411 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts",
412 [System font directory])
416 FC_DEFAULT_FONTS="$default_fonts"
417 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
418 [System font directory])
422 AC_SUBST(FC_DEFAULT_FONTS)
425 # Add more fonts if available. By default, add only the directories
426 # with outline fonts; those with bitmaps can be added as desired in
427 # local.conf or ~/.fonts.conf
429 AC_ARG_WITH(add-fonts,
430 [AC_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],
431 [Find additional fonts in DIR1,DIR2,... ])],
432 add_fonts="$withval", add_fonts=yes)
437 for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
438 case x"$FC_ADD_FONTS" in
441 if test -d "$sub"; then
442 case x$FC_ADD_FONTS in
447 FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
454 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
460 FC_ADD_FONTS="$add_fonts"
461 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
465 AC_SUBST(FC_ADD_FONTS)
469 case "$FC_ADD_FONTS" in
473 FC_FONTPATH=`echo $FC_ADD_FONTS |
474 sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
478 AC_SUBST(FC_FONTPATH)
481 # Set default cache directory path
483 AC_ARG_WITH(cache-dir,
484 [AC_HELP_STRING([--with-cache-dir=DIR],
485 [Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
486 fc_cachedir="$withval", fc_cachedir=yes)
490 if test "$os_win32" = "yes"; then
491 fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
493 fc_cachedir='${localstatedir}/cache/${PACKAGE}'
499 AC_SUBST(fc_cachedir)
500 FC_CACHEDIR=${fc_cachedir}
501 AC_SUBST(FC_CACHEDIR)
503 FC_FONTDATE=`LC_ALL=C date`
505 AC_SUBST(FC_FONTDATE)
508 # Set configuration paths
511 AC_ARG_WITH(templatedir,
512 [AC_HELP_STRING([--with-templatedir=DIR],
513 [Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
514 [templatedir="$withval"],
516 AC_ARG_WITH(baseconfigdir,
517 [AC_HELP_STRING([--with-baseconfigdir=DIR],
518 [Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
519 [baseconfigdir="$withval"],
521 AC_ARG_WITH(configdir,
522 [AC_HELP_STRING([--with-configdir=DIR],
523 [Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
524 [configdir="$withval"],
527 [AC_HELP_STRING([--with-xmldir=DIR],
528 [Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
532 case "$templatedir" in
534 templatedir='${datadir}'/fontconfig/conf.avail
539 case "$baseconfigdir" in
541 baseconfigdir='${sysconfdir}'/fonts
548 configdir='${baseconfigdir}'/conf.d
555 xmldir='${datadir}'/xml/fontconfig
561 TEMPLATEDIR=${templatedir}
562 BASECONFIGDIR=${baseconfigdir}
563 CONFIGDIR=${configdir}
565 AC_SUBST(templatedir)
566 AC_SUBST(TEMPLATEDIR)
567 AC_SUBST(baseconfigdir)
568 AC_SUBST(BASECONFIGDIR)
575 dnl ===========================================================================
578 # Thread-safety primitives
581 AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
582 fc_cv_have_intel_atomic_primitives=false
584 void memory_barrier (void) { __sync_synchronize (); }
585 int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
586 int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
587 void mutex_unlock (int *m) { __sync_lock_release (m); }
588 ], [], fc_cv_have_intel_atomic_primitives=true
591 if $fc_cv_have_intel_atomic_primitives; then
592 AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
595 AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
596 fc_cv_have_solaris_atomic_ops=false
599 /* This requires Solaris Studio 12.2 or newer: */
600 #include <mbarrier.h>
601 void memory_barrier (void) { __machine_rw_barrier (); }
602 int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
603 void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
604 ], [], fc_cv_have_solaris_atomic_ops=true
607 if $fc_cv_have_solaris_atomic_ops; then
608 AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
611 if test "$os_win32" = no && ! $have_pthread; then
612 AC_CHECK_HEADERS(sched.h)
613 AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
617 if test "$os_win32" = no; then
618 AX_PTHREAD([have_pthread=true])
620 if $have_pthread; then
621 LIBS="$PTHREAD_LIBS $LIBS"
622 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
624 AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
626 AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
629 dnl ===========================================================================
632 # Let people not build/install docs if they don't have docbook
635 AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
637 AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
641 # Check if docs exist or can be created
643 if test x$HASDOCBOOK = xno; then
644 if test -f $srcdir/doc/fonts-conf.5; then
652 [AC_HELP_STRING([--disable-docs],
653 [Don't build and install documentation])],
655 enable_docs=$default_docs)
657 AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
659 if test "x$enable_docs" = xyes; then
661 cat $srcdir/doc/*.fncs | awk '
662 /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
663 /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
664 /^@@/ { done = 0; }' > $tmp
665 DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
666 echo DOCMAN3 $DOCMAN3
674 dnl Figure out what cache format suffix to use for this architecture
676 AC_CHECK_SIZEOF([void *])
677 AC_CHECK_ALIGNOF([double])
679 dnl include the header file for workaround of miscalculating size on autoconf
680 dnl particularly for fat binaries
681 AH_BOTTOM([#include "config-fixups.h"])
687 fc-glyphname/Makefile