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.93], [https://bugs.freedesktop.org/enger_bug.cgi?product=fontconfig])
37 AM_INIT_AUTOMAKE([1.11 parallel-tests dist-bzip2])
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([GIT], [git])
74 AM_MISSING_PROG([GPERF], [gperf])
76 AC_MSG_CHECKING([for RM macro])
77 _predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
78 if test "x$_predefined_rm" = "x"; then
79 AC_MSG_RESULT([no predefined RM])
80 AC_CHECK_PROG(RM, rm, [rm -f])
82 AC_MSG_RESULT($_predefined_rm)
85 dnl ==========================================================================
94 AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
96 if test "$os_win32" = "yes"; then
97 AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
99 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
102 if test "x$GCC" = "xyes"; then
103 WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
104 -Wmissing-prototypes -Wmissing-declarations \
105 -Wnested-externs -fno-strict-aliasing"
106 AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
107 [Can use #warning in C files])
109 AC_SUBST(WARN_CFLAGS)
112 dnl ==========================================================================
115 AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
116 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
117 AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
119 dnl ==========================================================================
122 [AC_HELP_STRING([--with-arch=ARCH],
123 [Force architecture to ARCH])],
124 arch="$withval", arch=auto)
126 if test "x$arch" != xauto; then
127 AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
131 dnl ==========================================================================
133 # Checks for header files.
136 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])
137 AX_CREATE_STDINT_H([src/fcstdint.h])
139 # Checks for typedefs, structures, and compiler characteristics.
142 AC_C_FLEXIBLE_ARRAY_MEMBER
145 # Checks for library functions.
148 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])
150 dnl AC_CHECK_FUNCS doesn't check for header files.
151 dnl posix_fadvise() may be not available in older libc.
152 fc_saved_CFLAGS="$CFLAGS"
153 CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
154 AC_MSG_CHECKING([for posix_fadvise])
155 AC_LINK_IFELSE([AC_LANG_SOURCE([[
158 return posix_fadvise(0, 0, 0, 0);
162 AC_DEFINE([HAVE_POSIX_FADVISE], [1], [Define to 1 if you have the 'posix_fadvise' function.])
163 ],[AC_MSG_RESULT([no])])
164 CFLAGS="$fc_saved_CFLAGS"
167 if test "x$ac_cv_func_fstatvfs" = "xyes"; then
168 AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,,
169 [#include <sys/statvfs.h>])
171 if test "x$ac_cv_func_fstatfs" = "xyes"; then
172 AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [
173 #ifdef HAVE_SYS_VFS_H
176 #ifdef HAVE_SYS_STATFS_H
177 #include <sys/statfs.h>
179 #ifdef HAVE_SYS_PARAM_H
180 #include <sys/param.h>
182 #ifdef HAVE_SYS_MOUNT_H
183 #include <sys/mount.h>
186 AC_CHECK_MEMBERS([struct dirent.d_type],,,
187 [#include <dirent.h>])
191 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
192 AC_DEFINE(USE_REGEX,,[Use regex])
199 [AC_HELP_STRING([--enable-iconv],
200 [Use iconv to support non-Unicode SFNT name])],
202 AC_ARG_WITH(libiconv,
203 [AC_HELP_STRING([--with-libiconv=DIR],
204 [Use libiconv in DIR])],
205 [if test "x$withval" = "xyes"; then
206 libiconv_prefix=$prefix
208 libiconv_prefix=$withval
210 [libiconv_prefix=auto])
211 AC_ARG_WITH(libiconv-includes,
212 [AC_HELP_STRING([--with-libiconv-includes=DIR],
213 [Use libiconv includes in DIR])],
214 [libiconv_includes=$withval],
215 [libiconv_includes=auto])
216 AC_ARG_WITH(libiconv-lib,
217 [AC_HELP_STRING([--with-libiconv-lib=DIR],
218 [Use libiconv library in DIR])],
219 [libiconv_lib=$withval],
222 # if no libiconv,libiconv-includes,libiconv-lib are specified,
223 # libc's iconv has a priority.
224 if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
225 libiconv_cflags="-I${libiconv_includes}"
226 elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
227 libiconv_cflags="-I${libiconv_prefix}/include"
232 if test "x$libiconv_cflags" != "x"; then
233 if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then
234 libiconv_libs="-L${libiconv_lib} -liconv"
235 elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then
236 libiconv_libs="-L${libiconv_prefix}/lib -liconv"
238 libiconv_libs="-liconv"
243 if test "x$enable_iconv" != "xno"; then
244 AC_MSG_CHECKING([for a usable iconv])
245 if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then
246 iconvsaved_CFLAGS="$CFLAGS"
247 iconvsaved_LIBS="$LIBS"
248 CFLAGS="$CFLAGS $libiconv_cflags"
249 LIBS="$LIBS $libiconv_libs"
251 AC_TRY_LINK([#include <iconv.h>],
252 [iconv_open ("from", "to");],
253 [iconv_type="libiconv"
257 CFLAGS="$iconvsaved_CFLAGS"
258 LIBS="$iconvsaved_LIBS"
259 ICONV_CFLAGS="$libiconv_cflags"
260 ICONV_LIBS="$libiconv_libs"
262 if test "x$use_iconv" = "x0"; then
263 AC_TRY_LINK([#include <iconv.h>],
264 [iconv_open ("from", "to");],
267 [iconv_type="not found"
271 AC_MSG_RESULT([$iconv_type])
272 AC_SUBST(ICONV_CFLAGS)
275 AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
277 # Checks for FreeType
279 PKG_CHECK_MODULES(FREETYPE, freetype2)
281 AC_SUBST(FREETYPE_LIBS)
282 AC_SUBST(FREETYPE_CFLAGS)
284 fontconfig_save_libs="$LIBS"
285 fontconfig_save_cflags="$CFLAGS"
286 LIBS="$LIBS $FREETYPE_LIBS"
287 CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
288 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)
289 AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
290 HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
291 HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
292 [#include <ft2build.h>
293 #include FT_FREETYPE_H])
294 AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
295 [FT_Bitmap_Size structure includes y_ppem field])
296 CFLAGS="$fontconfig_save_cflags"
297 LIBS="$fontconfig_save_libs"
300 # Check expat configuration
303 [AC_HELP_STRING([--with-expat=DIR],
304 [Use Expat in DIR])],
305 [expat_prefix=$withval],
307 AC_ARG_WITH(expat-includes,
308 [AC_HELP_STRING([--with-expat-includes=DIR],
309 [Use Expat includes in DIR])],
310 [expat_includes=$withval],
311 [expat_includes=auto])
312 AC_ARG_WITH(expat-lib,
313 [AC_HELP_STRING([--with-expat-lib=DIR])],
314 [expat_lib=$withval],
317 if test "$enable_libxml2" != "yes"; then
318 use_pkgconfig_for_expat=yes
319 if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
320 PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
322 use_pkgconfig_for_expat=no
324 if test "x$use_pkgconfig_for_expat" = "xno"; then
325 if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
326 EXPAT_CFLAGS="-I${expat_includes}"
327 elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
328 EXPAT_CFLAGS="-I${expat_prefix}/include"
332 if test "$expat_lib" != "auto"; then
333 EXPAT_LIBS="-L${expat_lib} -lexpat"
334 elif test "$expat_prefix" != "auto"; then
335 EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
341 expatsaved_CPPFLAGS="$CPPFLAGS"
342 expatsaved_LIBS="$LIBS"
343 CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
344 LIBS="$LIBS $EXPAT_LIBS"
346 AC_CHECK_HEADER(expat.h)
347 if test "$ac_cv_header_expat_h" = "no"; then
348 AC_CHECK_HEADER(xmlparse.h)
349 if test "$ac_cv_header_xmlparse_h" = "yes"; then
351 AC_SUBST(HAVE_XMLPARSE_H)
352 AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
353 [Use xmlparse.h instead of expat.h])
356 *** expat is required. or try to use --enable-libxml2])
359 AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
360 if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
362 *** expat is required. or try to use --enable-libxml2])
364 CPPFLAGS="$expatsaved_CPPFLAGS"
365 LIBS="$expatsaved_LIBS"
367 AC_SUBST(EXPAT_CFLAGS)
372 # Check libxml2 configuration
374 AC_ARG_ENABLE(libxml2,
375 [AC_HELP_STRING([--enable-libxml2],
376 [Use libxml2 instead of Expat])])
378 if test "$enable_libxml2" = "yes"; then
379 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
380 AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
382 AC_SUBST(LIBXML2_CFLAGS)
383 AC_SUBST(LIBXML2_LIBS)
385 fc_saved_CFLAGS="$CFLAGS"
386 CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
387 AC_MSG_CHECKING([SAX1 support in libxml2])
388 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
389 #include <libxml/xmlversion.h>
390 #if !defined(LIBXML_SAX1_ENABLED)
391 # include "error: No SAX1 support in libxml2"
393 ]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
394 *** SAX1 support in libxml2 is required. enable it or use expat instead.])])
395 CFLAGS="$fc_saved_CFLAGS"
399 # Set default font directory
402 AC_ARG_WITH(default-fonts,
403 [AC_HELP_STRING([--with-default-fonts=DIR],
404 [Use fonts from DIR when config is busted])],
405 default_fonts="$withval", default_fonts=yes)
407 case "$default_fonts" in
409 if test "$os_win32" = "yes"; then
410 FC_DEFAULT_FONTS="WINDOWSFONTDIR"
411 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR",
412 [Windows font directory])
414 FC_DEFAULT_FONTS="/usr/share/fonts"
415 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts",
416 [System font directory])
420 FC_DEFAULT_FONTS="$default_fonts"
421 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
422 [System font directory])
426 AC_SUBST(FC_DEFAULT_FONTS)
429 # Add more fonts if available. By default, add only the directories
430 # with outline fonts; those with bitmaps can be added as desired in
431 # local.conf or ~/.fonts.conf
433 AC_ARG_WITH(add-fonts,
434 [AC_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],
435 [Find additional fonts in DIR1,DIR2,... ])],
436 add_fonts="$withval", add_fonts=yes)
441 for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
442 case x"$FC_ADD_FONTS" in
445 if test -d "$sub"; then
446 case x$FC_ADD_FONTS in
451 FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
458 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
464 FC_ADD_FONTS="$add_fonts"
465 AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
469 AC_SUBST(FC_ADD_FONTS)
473 case "$FC_ADD_FONTS" in
477 FC_FONTPATH=`echo $FC_ADD_FONTS |
478 sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
482 AC_SUBST(FC_FONTPATH)
485 # Set default cache directory path
487 AC_ARG_WITH(cache-dir,
488 [AC_HELP_STRING([--with-cache-dir=DIR],
489 [Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
490 fc_cachedir="$withval", fc_cachedir=yes)
494 if test "$os_win32" = "yes"; then
495 fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
497 fc_cachedir='${localstatedir}/cache/${PACKAGE}'
503 AC_SUBST(fc_cachedir)
504 FC_CACHEDIR=${fc_cachedir}
505 AC_SUBST(FC_CACHEDIR)
507 FC_FONTDATE=`LC_ALL=C date`
509 AC_SUBST(FC_FONTDATE)
512 # Set configuration paths
515 AC_ARG_WITH(templatedir,
516 [AC_HELP_STRING([--with-templatedir=DIR],
517 [Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
518 [templatedir="$withval"],
520 AC_ARG_WITH(baseconfigdir,
521 [AC_HELP_STRING([--with-baseconfigdir=DIR],
522 [Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
523 [baseconfigdir="$withval"],
525 AC_ARG_WITH(configdir,
526 [AC_HELP_STRING([--with-configdir=DIR],
527 [Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
528 [configdir="$withval"],
531 [AC_HELP_STRING([--with-xmldir=DIR],
532 [Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
536 case "$templatedir" in
538 templatedir='${datadir}'/fontconfig/conf.avail
543 case "$baseconfigdir" in
545 baseconfigdir='${sysconfdir}'/fonts
552 configdir='${baseconfigdir}'/conf.d
559 xmldir='${datadir}'/xml/fontconfig
565 TEMPLATEDIR=${templatedir}
566 BASECONFIGDIR=${baseconfigdir}
567 CONFIGDIR=${configdir}
569 AC_SUBST(templatedir)
570 AC_SUBST(TEMPLATEDIR)
571 AC_SUBST(baseconfigdir)
572 AC_SUBST(BASECONFIGDIR)
579 dnl ===========================================================================
582 # Thread-safety primitives
585 AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
586 fc_cv_have_intel_atomic_primitives=false
588 void memory_barrier (void) { __sync_synchronize (); }
589 int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
590 int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
591 void mutex_unlock (int *m) { __sync_lock_release (m); }
592 ], [], fc_cv_have_intel_atomic_primitives=true
595 if $fc_cv_have_intel_atomic_primitives; then
596 AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
599 AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
600 fc_cv_have_solaris_atomic_ops=false
603 /* This requires Solaris Studio 12.2 or newer: */
604 #include <mbarrier.h>
605 void memory_barrier (void) { __machine_rw_barrier (); }
606 int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
607 void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
608 ], [], fc_cv_have_solaris_atomic_ops=true
611 if $fc_cv_have_solaris_atomic_ops; then
612 AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
615 if test "$os_win32" = no && ! $have_pthread; then
616 AC_CHECK_HEADERS(sched.h)
617 AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
621 if test "$os_win32" = no; then
622 AX_PTHREAD([have_pthread=true])
624 if $have_pthread; then
625 LIBS="$PTHREAD_LIBS $LIBS"
626 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
628 AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
630 AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
633 dnl ===========================================================================
636 # Let people not build/install docs if they don't have docbook
639 AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
641 AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
645 # Check if docs exist or can be created
647 if test x$HASDOCBOOK = xno; then
648 if test -f $srcdir/doc/fonts-conf.5; then
656 [AC_HELP_STRING([--disable-docs],
657 [Don't build and install documentation])],
659 enable_docs=$default_docs)
661 AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
663 if test "x$enable_docs" = xyes; then
665 cat $srcdir/doc/*.fncs | awk '
666 /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
667 /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
668 /^@@/ { done = 0; }' > $tmp
669 DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
670 echo DOCMAN3 $DOCMAN3
678 dnl Figure out what cache format suffix to use for this architecture
680 AC_CHECK_SIZEOF([void *])
681 AC_CHECK_ALIGNOF([double])
683 dnl include the header file for workaround of miscalculating size on autoconf
684 dnl particularly for fat binaries
685 AH_BOTTOM([#include "config-fixups.h"])
691 fc-glyphname/Makefile