configure.ac revision eceda581
1dnl 
2dnl  fontconfig/configure.in
3dnl 
4dnl  Copyright © 2003 Keith Packard
5dnl 
6dnl  Permission to use, copy, modify, distribute, and sell this software and its
7dnl  documentation for any purpose is hereby granted without fee, provided that
8dnl  the above copyright notice appear in all copies and that both that
9dnl  copyright notice and this permission notice appear in supporting
10dnl  documentation, and that the name of the author(s) not be used in
11dnl  advertising or publicity pertaining to distribution of the software without
12dnl  specific, written prior permission.  The authors make no
13dnl  representations about the suitability of this software for any purpose.  It
14dnl  is provided "as is" without express or implied warranty.
15dnl 
16dnl  THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17dnl  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18dnl  EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19dnl  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20dnl  DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21dnl  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22dnl  PERFORMANCE OF THIS SOFTWARE.
23dnl
24dnl Process this file with autoconf to create configure.
25
26AC_PREREQ(2.61)
27
28dnl ==========================================================================
29dnl                               Versioning              
30dnl ==========================================================================
31
32dnl This is the package version number, not the shared library
33dnl version.  This same version number must appear in fontconfig/fontconfig.h
34dnl Yes, it is a pain to synchronize version numbers.  Unfortunately, it's
35dnl not possible to extract the version number here from fontconfig.h
36AC_INIT([fontconfig], [2.14.1], [https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new])
37AM_INIT_AUTOMAKE([1.11 parallel-tests dist-xz])
38m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
39
40dnl ==========================================================================
41
42AC_CONFIG_HEADERS(config.h)
43AC_CONFIG_MACRO_DIR([m4])
44
45AC_PROG_CC
46AC_USE_SYSTEM_EXTENSIONS
47AC_SYS_LARGEFILE
48AC_PROG_INSTALL
49AC_PROG_LN_S
50AC_PROG_MAKE_SET
51PKG_PROG_PKG_CONFIG
52m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig))
53
54AM_MISSING_PROG([GIT], [git])
55AM_MISSING_PROG([GPERF], [gperf])
56AM_PATH_PYTHON([3])
57
58AC_MSG_CHECKING([for RM macro])
59_predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
60if test "x$_predefined_rm" = "x"; then
61	AC_MSG_RESULT([no predefined RM])
62	AC_CHECK_PROG(RM, rm, [rm -f])
63else
64	AC_MSG_RESULT($_predefined_rm)
65fi
66
67dnl Initialize libtool
68LT_PREREQ([2.2])
69LT_INIT([disable-static win32-dll])
70
71dnl libtool versioning
72
73dnl bump revision when fixing bugs
74dnl bump current and age, reset revision to zero when adding APIs
75dnl bump current, leave age, reset revision to zero when changing/removing APIS
76LIBT_CURRENT=13
77LIBT_REVISION=0
78AC_SUBST(LIBT_CURRENT)
79AC_SUBST(LIBT_REVISION)
80LIBT_AGE=12
81
82LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
83AC_SUBST(LIBT_VERSION_INFO)
84
85LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
86AC_SUBST(LIBT_CURRENT_MINUS_AGE)
87
88PKGCONFIG_REQUIRES=
89PKGCONFIG_REQUIRES_PRIVATELY=
90
91dnl ==========================================================================
92AC_CANONICAL_HOST
93os_win32=no
94os_darwin=no
95case "${host_os}" in
96	cygwin*|mingw*)
97		os_win32=yes
98		;;
99	darwin*)
100		os_darwin=yes
101		;;
102esac
103AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
104AM_CONDITIONAL(OS_DARWIN, test "$os_darwin" = "yes")
105
106dnl ==========================================================================
107dnl gettext stuff
108dnl ==========================================================================
109GETTEXT_PACKAGE=$PACKAGE
110AC_SUBST(GETTEXT_PACKAGE)
111AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package])
112
113AM_GNU_GETTEXT_VERSION([0.19.7])
114AM_GNU_GETTEXT([external])
115
116dnl ==========================================================================
117
118if test "$os_win32" = "yes"; then
119  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
120fi
121AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
122
123AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
124WARN_CFLAGS=""
125WARNING_CPP_DIRECTIVE="no"
126if test "x$GCC" = "xyes"; then
127	WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
128	-Wmissing-prototypes -Wmissing-declarations \
129	-Wnested-externs -fno-strict-aliasing"
130	WARNING_CPP_DIRECTIVE="yes"
131elif test "x$SUNCC" = "xyes"; then
132	WARN_CFLAGS="-v -fd"
133	WARNING_CPP_DIRECTIVE="yes"
134fi
135if test "x$WARNING_CPP_DIRECTIVE" = "xyes"; then
136	AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
137	[Can use #warning in C files])
138fi
139AC_SUBST(WARN_CFLAGS)
140
141
142dnl ==========================================================================
143
144AX_CC_FOR_BUILD()
145AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
146AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
147AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
148
149dnl ==========================================================================
150
151AC_ARG_WITH(arch,
152	[AC_HELP_STRING([--with-arch=ARCH],
153			[Force architecture to ARCH])],
154	arch="$withval", arch=auto)
155
156if test "x$arch" != xauto; then
157	AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
158fi
159
160
161dnl ==========================================================================
162
163# Checks for header files.
164AC_HEADER_DIRENT
165AC_HEADER_STDC
166AC_CHECK_HEADERS([dirent.h fcntl.h stdlib.h string.h unistd.h sys/statvfs.h sys/vfs.h sys/statfs.h sys/param.h sys/mount.h])
167AX_CREATE_STDINT_H([src/fcstdint.h])
168
169# Checks for typedefs, structures, and compiler characteristics.
170AC_C_CONST
171AC_C_INLINE
172AC_C_FLEXIBLE_ARRAY_MEMBER
173AC_TYPE_PID_T
174
175# Checks for library functions.
176AC_FUNC_VPRINTF
177AC_FUNC_MMAP
178AC_CHECK_FUNCS([link mkstemp mkostemp _mktemp_s mkdtemp getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r readlink fstatvfs fstatfs lstat strerror strerror_r])
179
180dnl AC_CHECK_FUNCS doesn't check for header files.
181dnl posix_fadvise() may be not available in older libc.
182AC_CHECK_SYMBOL([posix_fadvise], [fcntl.h], [fc_func_posix_fadvise=1], [fc_func_posix_fadvise=0])
183AC_DEFINE_UNQUOTED([HAVE_POSIX_FADVISE], [$fc_func_posix_fadvise], [Define to 1 if you have the 'posix_fadvise' function.])
184
185#
186AC_CHECK_MEMBERS([struct stat.st_mtim],,, [#include <sys/stat.h>])
187
188#
189if test "x$ac_cv_func_fstatvfs" = "xyes"; then
190	AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,,
191		[#include <sys/statvfs.h>])
192fi
193if test "x$ac_cv_func_fstatfs" = "xyes"; then
194	AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [
195#ifdef HAVE_SYS_VFS_H
196#include <sys/vfs.h>
197#endif
198#ifdef HAVE_SYS_STATFS_H
199#include <sys/statfs.h>
200#endif
201#ifdef HAVE_SYS_PARAM_H
202#include <sys/param.h>
203#endif
204#ifdef HAVE_SYS_MOUNT_H
205#include <sys/mount.h>
206#endif])
207fi
208AC_CHECK_MEMBERS([struct dirent.d_type],,,
209	[#include <dirent.h>])
210
211# Check the argument type of the gperf hash/lookup function
212AC_MSG_CHECKING([The type of len parameter of gperf hash/lookup function])
213fc_gperf_test="$(echo 'foo' | gperf -L ANSI-C)"
214AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
215	#include <string.h>
216
217	const char *in_word_set(register const char *, register size_t);
218	$fc_gperf_test
219	]])], [FC_GPERF_SIZE_T=size_t],
220	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
221		#include <string.h>
222
223		const char *in_word_set(register const char *, register unsigned int);
224		$fc_gperf_test
225	]])], [FC_GPERF_SIZE_T="unsigned int"],
226	[AC_MSG_ERROR([Unable to determine the type of the len parameter of the gperf hash/lookup function])]
227)])
228AC_DEFINE_UNQUOTED(FC_GPERF_SIZE_T, $FC_GPERF_SIZE_T, [The type of len parameter of the gperf hash/lookup function])
229AC_MSG_RESULT($FC_GPERF_SIZE_T)
230
231#
232# Checks for iconv
233#
234AC_ARG_ENABLE(iconv,
235	[AC_HELP_STRING([--enable-iconv],
236			[Use iconv to support non-Unicode SFNT name])],
237	,enable_iconv=no)
238AC_ARG_WITH(libiconv,
239	[AC_HELP_STRING([--with-libiconv=DIR],
240			[Use libiconv in DIR])],
241	[if test "x$withval" = "xyes"; then
242		libiconv_prefix=$prefix
243	 else
244		libiconv_prefix=$withval
245	 fi],
246	[libiconv_prefix=auto])
247AC_ARG_WITH(libiconv-includes,
248	[AC_HELP_STRING([--with-libiconv-includes=DIR],
249			[Use libiconv includes in DIR])],
250	[libiconv_includes=$withval],
251	[libiconv_includes=auto])
252AC_ARG_WITH(libiconv-lib,
253	[AC_HELP_STRING([--with-libiconv-lib=DIR],
254			[Use libiconv library in DIR])],
255	[libiconv_lib=$withval],
256	[libiconv_lib=auto])
257
258# if no libiconv,libiconv-includes,libiconv-lib are specified,
259# libc's iconv has a priority.
260if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
261	libiconv_cflags="-I${libiconv_includes}"
262elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
263	libiconv_cflags="-I${libiconv_prefix}/include"
264else
265	libiconv_cflags=""
266fi
267libiconv_libs=""
268if test "x$libiconv_cflags" != "x"; then
269	if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then
270		libiconv_libs="-L${libiconv_lib} -liconv"
271	elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then
272		libiconv_libs="-L${libiconv_prefix}/lib -liconv"
273	else
274		libiconv_libs="-liconv"
275	fi
276fi
277
278use_iconv=0
279if test "x$enable_iconv" != "xno"; then
280	AC_MSG_CHECKING([for a usable iconv])
281	if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then
282		iconvsaved_CFLAGS="$CFLAGS"
283		iconvsaved_LIBS="$LIBS"
284		CFLAGS="$CFLAGS $libiconv_cflags"
285		LIBS="$LIBS $libiconv_libs"
286
287		AC_TRY_LINK([#include <iconv.h>],
288			[iconv_open ("from", "to");],
289			[iconv_type="libiconv"
290			 use_iconv=1
291			 ICONV_CFLAGS="$libiconv_cflags"
292			 ICONV_LIBS="$libiconv_libs"
293			 ],
294			[use_iconv=0])
295
296		CFLAGS="$iconvsaved_CFLAGS"
297		LIBS="$iconvsaved_LIBS"
298	fi
299	if test "x$use_iconv" = "x0"; then
300		AC_TRY_LINK([#include <iconv.h>],
301			[iconv_open ("from", "to");],
302			[iconv_type="libc"
303			 use_iconv=1],
304			[iconv_type="not found"
305			 use_iconv=0])
306	fi
307
308	AC_MSG_RESULT([$iconv_type])
309	AC_SUBST(ICONV_CFLAGS)
310	AC_SUBST(ICONV_LIBS)
311fi
312AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
313#
314# Checks for FreeType
315#
316dnl See http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/VERSIONS.TXT for versioning in freetype
317PKG_CHECK_MODULES(FREETYPE, freetype2 >= 21.0.15)
318PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2 >= 21.0.15"
319
320AC_SUBST(FREETYPE_LIBS)
321AC_SUBST(FREETYPE_CFLAGS)
322
323fontconfig_save_libs="$LIBS"
324fontconfig_save_cflags="$CFLAGS"
325LIBS="$LIBS $FREETYPE_LIBS"
326CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
327AC_CHECK_FUNCS(FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Done_MM_Var)
328
329AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
330	#include <ft2build.h>
331	#include FT_CONFIG_OPTIONS_H
332	#ifndef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
333	#  error "No pcf long family names support"
334	#endif
335	]])], [have_pcf_long_family_names=yes], [have_pcf_long_family_names=no])
336AM_CONDITIONAL(FREETYPE_PCF_LONG_FAMILY_NAMES, test "x$have_pcf_long_family_names" = xyes)
337
338LIBS="$fontconfig_save_libs"
339CFLAGS="$fontconfig_save_cflags"
340
341#
342# Check expat configuration
343#
344AC_ARG_WITH(expat,
345	[AC_HELP_STRING([--with-expat=DIR],
346			[Use Expat in DIR])],
347	[expat_prefix=$withval],
348	[expat_prefix=auto])
349AC_ARG_WITH(expat-includes,
350	[AC_HELP_STRING([--with-expat-includes=DIR],
351			[Use Expat includes in DIR])],
352	[expat_includes=$withval],
353	[expat_includes=auto])
354AC_ARG_WITH(expat-lib,
355	[AC_HELP_STRING([--with-expat-lib=DIR])],
356	[expat_lib=$withval],
357	[expat_lib=auto])
358
359if test "$enable_libxml2" != "yes"; then
360	use_pkgconfig_for_expat=yes
361	if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
362		PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
363	else
364		use_pkgconfig_for_expat=no
365	fi
366	if test "x$use_pkgconfig_for_expat" = "xno"; then
367		if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
368			EXPAT_CFLAGS="-I${expat_includes}"
369		elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
370			EXPAT_CFLAGS="-I${expat_prefix}/include"
371		else
372			EXPAT_CFLAGS=""
373		fi
374		if test "$expat_lib" != "auto"; then
375			EXPAT_LIBS="-L${expat_lib} -lexpat"
376		elif test "$expat_prefix" != "auto"; then
377			EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
378		else
379			EXPAT_LIBS="-lexpat"
380		fi
381		PKG_EXPAT_CFLAGS=$EXPAT_CFLAGS
382		PKG_EXPAT_LIBS=$EXPAT_LIBS
383	else
384		PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY expat"
385		PKG_EXPAT_CFLAGS=
386		PKG_EXPAT_LIBS=
387	fi
388
389	expatsaved_CPPFLAGS="$CPPFLAGS"
390	expatsaved_LIBS="$LIBS"
391	CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
392	LIBS="$LIBS $EXPAT_LIBS"
393
394	AC_CHECK_HEADER(expat.h)
395	if test "$ac_cv_header_expat_h" = "no"; then
396		AC_CHECK_HEADER(xmlparse.h)
397		if test "$ac_cv_header_xmlparse_h" = "yes"; then
398			HAVE_XMLPARSE_H=1
399			AC_SUBST(HAVE_XMLPARSE_H)
400			AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
401				[Use xmlparse.h instead of expat.h])
402		else
403			AC_MSG_ERROR([
404*** expat is required. or try to use --enable-libxml2])
405		fi
406	fi
407	AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
408	if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
409		AC_MSG_ERROR([
410*** expat is required. or try to use --enable-libxml2])
411	fi
412	CPPFLAGS="$expatsaved_CPPFLAGS"
413	LIBS="$expatsaved_LIBS"
414
415	AC_SUBST(EXPAT_CFLAGS)
416	AC_SUBST(EXPAT_LIBS)
417	AC_SUBST(PKG_EXPAT_CFLAGS)
418	AC_SUBST(PKG_EXPAT_LIBS)
419fi
420
421#
422# Check libxml2 configuration
423#
424AC_ARG_ENABLE(libxml2,
425	[AC_HELP_STRING([--enable-libxml2],
426			[Use libxml2 instead of Expat])])
427
428if test "$enable_libxml2" = "yes"; then
429    PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
430    PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY libxml-2.0 >= 2.6"
431    AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
432
433    AC_SUBST(LIBXML2_CFLAGS)
434    AC_SUBST(LIBXML2_LIBS)
435
436    fc_saved_CFLAGS="$CFLAGS"
437    CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
438    AC_MSG_CHECKING([SAX1 support in libxml2])
439    AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
440	#include <libxml/xmlversion.h>
441	#if !defined(LIBXML_SAX1_ENABLED)
442	#  include "error: No SAX1 support in libxml2"
443	#endif
444	]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
445*** SAX1 support in libxml2 is required. enable it or use expat instead.])])
446    CFLAGS="$fc_saved_CFLAGS"
447fi
448
449#
450# Check json-c
451#
452PKG_CHECK_MODULES([JSONC], [json-c], [use_jsonc=yes], [use_jsonc=no])
453
454AM_CONDITIONAL(ENABLE_JSONC, test "x$use_jsonc" = "xyes")
455AC_SUBST(JSONC_CFLAGS)
456AC_SUBST(JSONC_LIBS)
457
458#
459# Set default hinting
460#
461
462AC_ARG_WITH(default-hinting,
463	[AC_HELP_STRING([--with-default-hinting=NAME],
464			[Enable your preferred hinting configuration (none/slight/medium/full) [default=slight]])],
465	preferred_hinting="$withval", preferred_hinting=slight)
466
467case "$preferred_hinting" in
468none|slight|medium|full)
469	PREFERRED_HINTING="$preferred_hinting"
470	AC_SUBST(PREFERRED_HINTING)
471	;;
472*)
473	AC_MSG_ERROR([Invalid hinting. please choose one of none, slight, medium, or full])
474	;;
475esac
476
477#
478# Set default font directory
479#
480
481AC_ARG_WITH(default-fonts,
482	[AC_HELP_STRING([--with-default-fonts=DIR1,DIR2,...],
483			[Use fonts from DIR1,DIR2,... when config is busted])],
484	default_fonts="$withval", default_fonts=yes)
485
486case "$default_fonts" in
487yes)
488	if test "$os_win32" = "yes"; then
489		default_fonts="WINDOWSFONTDIR,WINDOWSUSERFONTDIR"
490	elif test "$os_darwin" = "yes"; then
491		default_fonts="/System/Library/Fonts,/Library/Fonts,~/Library/Fonts,/System/Library/Assets/com_apple_MobileAsset_Font3,/System/Library/Assets/com_apple_MobileAsset_Font4"
492	else
493		default_fonts="/usr/share/fonts"
494	fi
495	;;
496esac
497
498FC_DEFAULT_FONTS=""
499if test x${default_fonts+set} = xset; then
500	fc_IFS=$IFS
501	IFS=","
502	for p in $default_fonts; do
503		if test x"$FC_DEFAULT_FONTS" != x; then
504			FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS "
505		fi
506		FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS<dir>$p</dir>"
507	done
508	IFS=$fc_IFS
509fi
510
511AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$FC_DEFAULT_FONTS",
512			   [System font directory])
513
514AC_SUBST(FC_DEFAULT_FONTS)
515
516#
517# Add more fonts if available.  By default, add only the directories
518# with outline fonts; those with bitmaps can be added as desired in
519# local.conf or ~/.fonts.conf
520#
521AC_ARG_WITH(add-fonts,
522	[AC_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],
523			[Find additional fonts in DIR1,DIR2,... ])],
524	add_fonts="$withval", add_fonts=yes)
525
526case "$add_fonts" in
527yes)
528	FC_ADD_FONTS=""
529	for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
530		case x"$FC_ADD_FONTS" in
531		x)
532			sub="$dir/fonts"
533			if test -d "$sub"; then
534				case x$FC_ADD_FONTS in
535				x)
536					FC_ADD_FONTS="$sub"
537					;;
538				*)
539					FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
540					;;
541				esac
542			fi
543			;;
544		esac
545	done
546	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
547	;;
548no)
549	FC_ADD_FONTS=""
550	;;
551*)
552	FC_ADD_FONTS="$add_fonts"
553	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
554	;;
555esac
556
557AC_SUBST(FC_ADD_FONTS)
558
559FC_FONTPATH=""
560
561case "$FC_ADD_FONTS" in
562"")
563	;;
564*)
565	FC_FONTPATH=`echo $FC_ADD_FONTS | 
566			sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
567	;;
568esac
569
570AC_SUBST(FC_FONTPATH)
571
572#
573# Set default cache directory path
574#
575AC_ARG_WITH(cache-dir,
576	[AC_HELP_STRING([--with-cache-dir=DIR],
577			[Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
578	fc_cachedir="$withval", fc_cachedir=yes)
579
580case $fc_cachedir in
581no|yes)
582	if test "$os_win32" = "yes"; then
583		fc_cachedir="LOCAL_APPDATA_FONTCONFIG_CACHE"
584	else
585		fc_cachedir='${localstatedir}/cache/${PACKAGE}'
586	fi
587	;;
588*)
589	;;
590esac
591AC_SUBST(fc_cachedir)
592FC_CACHEDIR=${fc_cachedir}
593AC_SUBST(FC_CACHEDIR)
594
595FC_FONTDATE=`LC_ALL=C date`
596
597AC_SUBST(FC_FONTDATE)
598
599#
600# Set configuration paths
601#
602
603AC_ARG_WITH(templatedir,
604	[AC_HELP_STRING([--with-templatedir=DIR],
605			[Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
606	[templatedir="$withval"],
607	[templatedir=yes])
608AC_ARG_WITH(baseconfigdir,
609	[AC_HELP_STRING([--with-baseconfigdir=DIR],
610			[Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
611	[baseconfigdir="$withval"],
612	[baseconfigdir=yes])
613AC_ARG_WITH(configdir,
614	[AC_HELP_STRING([--with-configdir=DIR],
615			[Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
616	[configdir="$withval"],
617	[configdir=yes])
618AC_ARG_WITH(xmldir,
619	[AC_HELP_STRING([--with-xmldir=DIR],
620			[Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
621	[xmldir="$withval"],
622	[xmldir=yes])
623
624case "$templatedir" in
625no|yes)
626	templatedir='${datadir}'/fontconfig/conf.avail
627	;;
628*)
629	;;
630esac
631case "$baseconfigdir" in
632no|yes)
633	baseconfigdir='${sysconfdir}'/fonts
634	;;
635*)
636	;;
637esac
638case "$configdir" in
639no|yes)
640	configdir='${BASECONFIGDIR}'/conf.d
641	;;
642*)
643	;;
644esac
645case "$xmldir" in
646no|yes)
647	xmldir='${datadir}'/xml/fontconfig
648	;;
649*)
650	;;
651esac
652
653TEMPLATEDIR=${templatedir}
654BASECONFIGDIR=${baseconfigdir}
655CONFIGDIR=${configdir}
656XMLDIR=${xmldir}
657AC_SUBST(TEMPLATEDIR)
658AC_SUBST(BASECONFIGDIR)
659AC_SUBST(CONFIGDIR)
660AC_SUBST(XMLDIR)
661
662
663dnl ===========================================================================
664
665#
666# Thread-safety primitives
667#
668
669AC_CACHE_CHECK([stdatomic.h atomic primitives], fc_cv_have_stdatomic_atomic_primitives, [
670	fc_cv_have_stdatomic_atomic_primitives=false
671	AC_TRY_LINK([
672		#include <stdatomic.h>
673
674		void memory_barrier (void) { atomic_thread_fence (memory_order_acq_rel); }
675		int atomic_add (atomic_int *i) { return atomic_fetch_add_explicit (i, 1, memory_order_relaxed); }
676		int mutex_trylock (atomic_flag *m) { return atomic_flag_test_and_set_explicit (m, memory_order_acquire); }
677		void mutex_unlock (atomic_flag *m) { atomic_flag_clear_explicit (m, memory_order_release); }
678		], [], fc_cv_have_stdatomic_atomic_primitives=true
679	)
680])
681if $fc_cv_have_stdatomic_atomic_primitives; then
682	AC_DEFINE(HAVE_STDATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
683fi
684
685AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
686	fc_cv_have_intel_atomic_primitives=false
687	AC_TRY_LINK([
688		void memory_barrier (void) { __sync_synchronize (); }
689		int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
690		int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
691		void mutex_unlock (int *m) { __sync_lock_release (m); }
692		], [], fc_cv_have_intel_atomic_primitives=true
693	)
694])
695if $fc_cv_have_intel_atomic_primitives; then
696	AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
697fi
698
699AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
700	fc_cv_have_solaris_atomic_ops=false
701	AC_TRY_LINK([
702		#include <atomic.h>
703		/* This requires Solaris Studio 12.2 or newer: */
704		#include <mbarrier.h>
705		void memory_barrier (void) { __machine_rw_barrier (); }
706		int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
707		void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
708		], [], fc_cv_have_solaris_atomic_ops=true
709	)
710])
711if $fc_cv_have_solaris_atomic_ops; then
712	AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
713fi
714
715if test "$os_win32" = no && ! $have_pthread; then
716	AC_CHECK_HEADERS(sched.h)
717	AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
718fi
719
720have_pthread=false
721if test "$os_win32" = no; then
722	AX_PTHREAD([have_pthread=true])
723fi
724if $have_pthread; then
725	LIBS="$PTHREAD_LIBS $LIBS"
726	CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
727	CC="$PTHREAD_CC"
728	AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
729fi
730AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
731
732
733dnl ===========================================================================
734
735#
736# Let people not build/install docs if they don't have docbook
737#
738
739AC_ARG_ENABLE(docbook,
740	[AS_HELP_STRING([--disable-docbook],
741		[Disable building docs with docbook2html (default: no)])],,)
742
743if test x$enable_docbook != xno; then
744	AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
745fi
746
747AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
748
749default_docs="yes"
750#
751# Check if docs exist or can be created
752#
753if test x$HASDOCBOOK = xno; then
754	if test -f $srcdir/doc/fonts-conf.5; then
755		:
756	else
757		default_docs="no"
758	fi
759fi
760
761AC_ARG_ENABLE(docs,
762	[AC_HELP_STRING([--disable-docs],
763			[Don't build and install documentation])],
764	,
765	enable_docs=$default_docs)
766
767AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
768
769if test "x$enable_docs" = xyes; then
770	tmp=funcs.$$
771	cat $srcdir/doc/*.fncs | awk '
772	/^@TITLE@/	{ if (!done) { printf ("%s\n", $2); done = 1; } }
773	/^@FUNC@/	{ if (!done) { printf ("%s\n", $2); done = 1; } }
774	/^@@/		{ done = 0; }' > $tmp
775	DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
776	echo DOCMAN3 $DOCMAN3
777	rm -f $tmp
778else
779	DOCMAN3=""
780fi
781AC_SUBST(DOCMAN3)
782
783dnl ===========================================================================
784default_cache_build="yes"
785if test $cross_compiling = "yes"; then
786	default_cache_build="no"
787fi
788AC_ARG_ENABLE(cache-build,
789	[AC_HELP_STRING([--disable-cache-build],
790			[Don't run fc-cache during the build])],
791	,
792	enable_cache_build=$default_cache_build)
793
794AM_CONDITIONAL(ENABLE_CACHE_BUILD, test "x$enable_cache_build" = xyes)
795
796
797dnl Figure out what cache format suffix to use for this architecture
798AC_C_BIGENDIAN
799AC_CHECK_SIZEOF([void *])
800AC_CHECK_ALIGNOF([double])
801AC_CHECK_ALIGNOF([void *])
802
803dnl include the header file for workaround of miscalculating size on autoconf
804dnl particularly for fat binaries
805AH_BOTTOM([#include "config-fixups.h"])
806
807dnl
808dnl
809AC_SUBST(PKGCONFIG_REQUIRES)
810AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY)
811
812dnl
813AC_CONFIG_FILES([
814Makefile
815fontconfig/Makefile
816fc-lang/Makefile
817fc-case/Makefile
818src/Makefile
819conf.d/Makefile
820fc-cache/Makefile
821fc-cat/Makefile
822fc-conflist/Makefile
823fc-list/Makefile
824fc-match/Makefile
825fc-pattern/Makefile
826fc-query/Makefile
827fc-scan/Makefile
828fc-validate/Makefile
829doc/Makefile
830doc/version.sgml
831its/Makefile
832po/Makefile.in
833po-conf/Makefile.in
834test/Makefile
835fontconfig.pc
836fontconfig-zip
837])
838AC_OUTPUT
839