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
73 AC_MSG_CHECKING([for RM macro])
74 _predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
75 if test "x$_predefined_rm" = "x"; then
76 AC_MSG_RESULT([no predefined RM])
77 AC_CHECK_PROG(RM, rm, [rm -f])
79 AC_MSG_RESULT($_predefined_rm)
82 dnl ==========================================================================
91 AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
93 if test "$os_win32" = "yes"; then
94 AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
96 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
99 if test "x$GCC" = "xyes"; then
100 WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
101 -Wmissing-prototypes -Wmissing-declarations \
102 -Wnested-externs -fno-strict-aliasing"
103 AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
104 [Can use #warning in C files])
106 AC_SUBST(WARN_CFLAGS)
109 dnl ==========================================================================
112 AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
113 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
114 AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
116 dnl ==========================================================================
119 [AC_HELP_STRING([--with-arch=ARCH],
120 [Force architecture to ARCH])],
121 arch="$withval", arch=auto)
123 if test "x$arch" != xauto; then
124 AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
128 dnl ==========================================================================
130 # Checks for header files.
133 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])
134 AX_CREATE_STDINT_H([src/fcstdint.h])
136 # Checks for typedefs, structures, and compiler characteristics.
139 AC_C_FLEXIBLE_ARRAY_MEMBER
142 # Checks for library functions.
145 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])
147 dnl AC_CHECK_FUNCS doesn't check for header files.
148 dnl posix_fadvise() may be not available in older libc.
149 fc_saved_CFLAGS="$CFLAGS"
150 CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
151 AC_MSG_CHECKING([for posix_fadvise])
152 AC_LINK_IFELSE([AC_LANG_SOURCE([[
155 return posix_fadvise(0, 0, 0, 0);
159 AC_DEFINE([HAVE_POSIX_FADVISE], [1], [Define to 1 if you have the 'posix_fadvise' function.])
160 ],[AC_MSG_RESULT([no])])
161 CFLAGS="$fc_saved_CFLAGS"
164 if test "x$ac_cv_func_fstatvfs" = "xyes"; then
165 AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,,
166 [#include <sys/statvfs.h>])
168 if test "x$ac_cv_func_fstatfs" = "xyes"; then
169 AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [
170 #ifdef HAVE_SYS_VFS_H
173 #ifdef HAVE_SYS_STATFS_H
174 #include <sys/statfs.h>
176 #ifdef HAVE_SYS_PARAM_H
177 #include <sys/param.h>
179 #ifdef HAVE_SYS_MOUNT_H
180 #include <sys/mount.h>
183 AC_CHECK_MEMBERS([struct dirent.d_type],,,
184 [#include <dirent.h>])
188 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
189 AC_DEFINE(USE_REGEX,,[Use regex])
196 [AC_HELP_STRING([--enable-iconv],
197 [Use iconv to support non-Unicode SFNT name])],
199 AC_ARG_WITH(libiconv,
200 [AC_HELP_STRING([--with-libiconv=DIR],
201 [Use libiconv in DIR])],
202 [if test "x$withval" = "xyes"; then
203 libiconv_prefix=$prefix
205 libiconv_prefix=$withval
207 [libiconv_prefix=auto])
208 AC_ARG_WITH(libiconv-includes,
209 [AC_HELP_STRING([--with-libiconv-includes=DIR],
210 [Use libiconv includes in DIR])],
211 [libiconv_includes=$withval],
212 [libiconv_includes=auto])
213 AC_ARG_WITH(libiconv-lib,
214 [AC_HELP_STRING([--with-libiconv-lib=DIR],
215 [Use libiconv library in DIR])],
216 [libiconv_lib=$withval],
219 # if no libiconv,libiconv-includes,libiconv-lib are specified,
220 # libc's iconv has a priority.
221 if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
222 libiconv_cflags="-I${libiconv_includes}"
223 elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
224 libiconv_cflags="-I${libiconv_prefix}/include"
229 if test "x$libiconv_cflags" != "x"; then
230 if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then
231 libiconv_libs="-L${libiconv_lib} -liconv"
232 elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then
233 libiconv_libs="-L${libiconv_prefix}/lib -liconv"
235 libiconv_libs="-liconv"
240 if test "x$enable_iconv" != "xno"; then
241 AC_MSG_CHECKING([for a usable iconv])
242 if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then
243 iconvsaved_CFLAGS="$CFLAGS"
244 iconvsaved_LIBS="$LIBS"
245 CFLAGS="$CFLAGS $libiconv_cflags"
246 LIBS="$LIBS $libiconv_libs"
248 AC_TRY_LINK([#include <iconv.h>],
249 [iconv_open ("from", "to");],
250 [iconv_type="libiconv"
254 CFLAGS="$iconvsaved_CFLAGS"
255 LIBS="$iconvsaved_LIBS"
256 ICONV_CFLAGS="$libiconv_cflags"
257 ICONV_LIBS="$libiconv_libs"
259 if test "x$use_iconv" = "x0"; then
260 AC_TRY_LINK([#include <iconv.h>],
261 [iconv_open ("from", "to");],
264 [iconv_type="not found"
268 AC_MSG_RESULT([$iconv_type])
269 AC_SUBST(ICONV_CFLAGS)
272 AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
274 # Checks for FreeType
276 PKG_CHECK_MODULES(FREETYPE, freetype2)
278 AC_SUBST(FREETYPE_LIBS)
279 AC_SUBST(FREETYPE_CFLAGS)
281 fontconfig_save_libs="$LIBS"
282 fontconfig_save_cflags="$CFLAGS"
283 LIBS="$LIBS $FREETYPE_LIBS"
284 CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
285 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)
286 AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
287 HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
288 HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
289 [#include <ft2build.h>
290 #include FT_FREETYPE_H])
291 AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
292 [FT_Bitmap_Size structure includes y_ppem field])
293 CFLAGS="$fontconfig_save_cflags"
294 LIBS="$fontconfig_save_libs"
297 # Check expat configuration
300 [AC_HELP_STRING([--with-expat=DIR],
301 [Use Expat in DIR])],
302 [expat_prefix=$withval],
304 AC_ARG_WITH(expat-includes,
305 [AC_HELP_STRING([--with-expat-includes=DIR],
306 [Use Expat includes in DIR])],
307 [expat_includes=$withval],
308 [expat_includes=auto])
309 AC_ARG_WITH(expat-lib,
310 [AC_HELP_STRING([--with-expat-lib=DIR])],
311 [expat_lib=$withval],
314 if test "$enable_libxml2" != "yes"; then
315 use_pkgconfig_for_expat=yes
316 if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
317 PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
319 use_pkgconfig_for_expat=no
321 if test "x$use_pkgconfig_for_expat" = "xno"; then
322 if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
323 EXPAT_CFLAGS="-I${expat_includes}"
324 elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
325 EXPAT_CFLAGS="-I${expat_prefix}/include"
329 if test "$expat_lib" != "auto"; then
330 EXPAT_LIBS="-L${expat_lib} -lexpat"
331 elif test "$expat_prefix" != "auto"; then
332 EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
338 expatsaved_CPPFLAGS="$CPPFLAGS"
339 expatsaved_LIBS="$LIBS"
340 CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
341 LIBS="$LIBS $EXPAT_LIBS"
343 AC_CHECK_HEADER(expat.h)
344 if test "$ac_cv_header_expat_h" = "no"; then
345 AC_CHECK_HEADER(xmlparse.h)
346 if test "$ac_cv_header_xmlparse_h" = "yes"; then
348 AC_SUBST(HAVE_XMLPARSE_H)
349 AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
350 [Use xmlparse.h instead of expat.h])
353 *** expat is required. or try to use --enable-libxml2])
356 AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
357 if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
359 *** expat is required. or try to use --enable-libxml2])
361 CPPFLAGS="$expatsaved_CPPFLAGS"
362 LIBS="$expatsaved_LIBS"
364 AC_SUBST(EXPAT_CFLAGS)
369 # Check libxml2 configuration
371 AC_ARG_ENABLE(libxml2,
372 [AC_HELP_STRING([--enable-libxml2],
373 [Use libxml2 instead of Expat])])
375 if test "$enable_libxml2" = "yes"; then
376 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
377 AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
379 AC_SUBST(LIBXML2_CFLAGS)
380 AC_SUBST(LIBXML2_LIBS)
382 fc_saved_CFLAGS="$CFLAGS"
383 CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
384 AC_MSG_CHECKING([SAX1 support in libxml2])
385 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
386 #include <libxml/xmlversion.h>
387 #if !defined(LIBXML_SAX1_ENABLED)
388 # include "error: No SAX1 support in libxml2"
390 ]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
391 *** SAX1 support in libxml2 is required. enable it or use expat instead.])])
392 CFLAGS="$fc_saved_CFLAGS"
396 # Set default font directory
399 AC_ARG_WITH(default-fonts,
400 [AC_HELP_STRING([--with-default-fonts=DIR],
401 [Use fonts from DIR when config is busted])],
402 default_fonts="$withval", default_fonts=yes)
404 case "$default_fonts" in
406 if test "$os_win32" = "yes"; then
407 FC_DEFAULT_FONTS="WINDOWSFONTDIR"
408 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR",
409 [Windows font directory])
411 FC_DEFAULT_FONTS="/usr/share/fonts"
412 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts",
413 [System font directory])
417 FC_DEFAULT_FONTS="$default_fonts"
418 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
419 [System font directory])
423 AC_SUBST(FC_DEFAULT_FONTS)
426 # Add more fonts if available. By default, add only the directories
427 # with outline fonts; those with bitmaps can be added as desired in
428 # local.conf or ~/.fonts.conf
430 AC_ARG_WITH(add-fonts,
431 [AC_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],
432 [Find additional fonts in DIR1,DIR2,... ])],
433 add_fonts="$withval", add_fonts=yes)
438 for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
439 case x"$FC_ADD_FONTS" in
442 if test -d "$sub"; then
443 case x$FC_ADD_FONTS in
448 FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
455 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
461 FC_ADD_FONTS="$add_fonts"
462 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
466 AC_SUBST(FC_ADD_FONTS)
470 case "$FC_ADD_FONTS" in
474 FC_FONTPATH=`echo $FC_ADD_FONTS |
475 sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
479 AC_SUBST(FC_FONTPATH)
482 # Set default cache directory path
484 AC_ARG_WITH(cache-dir,
485 [AC_HELP_STRING([--with-cache-dir=DIR],
486 [Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
487 fc_cachedir="$withval", fc_cachedir=yes)
491 if test "$os_win32" = "yes"; then
492 fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
494 fc_cachedir='${localstatedir}/cache/${PACKAGE}'
500 AC_SUBST(fc_cachedir)
501 FC_CACHEDIR=${fc_cachedir}
502 AC_SUBST(FC_CACHEDIR)
504 FC_FONTDATE=`LC_ALL=C date`
506 AC_SUBST(FC_FONTDATE)
509 # Set configuration paths
512 AC_ARG_WITH(templatedir,
513 [AC_HELP_STRING([--with-templatedir=DIR],
514 [Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
515 [templatedir="$withval"],
517 AC_ARG_WITH(baseconfigdir,
518 [AC_HELP_STRING([--with-baseconfigdir=DIR],
519 [Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
520 [baseconfigdir="$withval"],
522 AC_ARG_WITH(configdir,
523 [AC_HELP_STRING([--with-configdir=DIR],
524 [Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
525 [configdir="$withval"],
528 [AC_HELP_STRING([--with-xmldir=DIR],
529 [Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
533 case "$templatedir" in
535 templatedir='${datadir}'/fontconfig/conf.avail
540 case "$baseconfigdir" in
542 baseconfigdir='${sysconfdir}'/fonts
549 configdir='${baseconfigdir}'/conf.d
556 xmldir='${datadir}'/xml/fontconfig
562 TEMPLATEDIR=${templatedir}
563 BASECONFIGDIR=${baseconfigdir}
564 CONFIGDIR=${configdir}
566 AC_SUBST(templatedir)
567 AC_SUBST(TEMPLATEDIR)
568 AC_SUBST(baseconfigdir)
569 AC_SUBST(BASECONFIGDIR)
576 dnl ===========================================================================
579 # Thread-safety primitives
582 AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
583 fc_cv_have_intel_atomic_primitives=false
585 void memory_barrier (void) { __sync_synchronize (); }
586 int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
587 int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
588 void mutex_unlock (int *m) { __sync_lock_release (m); }
589 ], [], fc_cv_have_intel_atomic_primitives=true
592 if $fc_cv_have_intel_atomic_primitives; then
593 AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
596 AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
597 fc_cv_have_solaris_atomic_ops=false
600 /* This requires Solaris Studio 12.2 or newer: */
601 #include <mbarrier.h>
602 void memory_barrier (void) { __machine_rw_barrier (); }
603 int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
604 void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
605 ], [], fc_cv_have_solaris_atomic_ops=true
608 if $fc_cv_have_solaris_atomic_ops; then
609 AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
612 if test "$os_win32" = no && ! $have_pthread; then
613 AC_CHECK_HEADERS(sched.h)
614 AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
618 if test "$os_win32" = no; then
619 AX_PTHREAD([have_pthread=true])
621 if $have_pthread; then
622 LIBS="$PTHREAD_LIBS $LIBS"
623 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
625 AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
627 AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
630 dnl ===========================================================================
633 # Let people not build/install docs if they don't have docbook
636 AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
638 AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
642 # Check if docs exist or can be created
644 if test x$HASDOCBOOK = xno; then
645 if test -f $srcdir/doc/fonts-conf.5; then
653 [AC_HELP_STRING([--disable-docs],
654 [Don't build and install documentation])],
656 enable_docs=$default_docs)
658 AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
660 if test "x$enable_docs" = xyes; then
662 cat $srcdir/doc/*.fncs | awk '
663 /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
664 /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
665 /^@@/ { done = 0; }' > $tmp
666 DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
667 echo DOCMAN3 $DOCMAN3
675 dnl Figure out what cache format suffix to use for this architecture
677 AC_CHECK_SIZEOF([void *])
678 AC_CHECK_ALIGNOF([double])
680 dnl include the header file for workaround of miscalculating size on autoconf
681 dnl particularly for fat binaries
682 AH_BOTTOM([#include "config-fixups.h"])
688 fc-glyphname/Makefile