configure.ac revision 1cc69409
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.2], [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 sub-pixel rendering
460#
461
462AC_ARG_WITH(default-sub-pixel-rendering,
463    [AC_HELP_STRING([--with-default-sub-pixel-rendering=NAME],
464            [Enable your preferred sub-pixel rendering configuration (none/bgr/rgb/vbgr/vrgb) [default=none]])],
465    preferred_sub_pixel_rendering="$withval", preferred_sub_pixel_rendering=none)
466
467case "$preferred_sub_pixel_rendering" in
468none|bgr|rgb|vbgr|vrgb)
469    PREFERRED_SUB_PIXEL_RENDERING="$preferred_sub_pixel_rendering"
470    AC_SUBST(PREFERRED_SUB_PIXEL_RENDERING)
471    ;;
472*)
473    AC_MSG_ERROR([Invalid sub-pixel rendering. please choose one of none, bgr, rgb, vbgr, or vrgb])
474    ;;
475esac
476
477#
478# Set default hinting
479#
480
481AC_ARG_WITH(default-hinting,
482	[AC_HELP_STRING([--with-default-hinting=NAME],
483			[Enable your preferred hinting configuration (none/slight/medium/full) [default=slight]])],
484	preferred_hinting="$withval", preferred_hinting=slight)
485
486case "$preferred_hinting" in
487none|slight|medium|full)
488	PREFERRED_HINTING="$preferred_hinting"
489	AC_SUBST(PREFERRED_HINTING)
490	;;
491*)
492	AC_MSG_ERROR([Invalid hinting. please choose one of none, slight, medium, or full])
493	;;
494esac
495
496#
497# Set default font directory
498#
499
500AC_ARG_WITH(default-fonts,
501	[AC_HELP_STRING([--with-default-fonts=DIR1,DIR2,...],
502			[Use fonts from DIR1,DIR2,... when config is busted])],
503	default_fonts="$withval", default_fonts=yes)
504
505case "$default_fonts" in
506yes)
507	if test "$os_win32" = "yes"; then
508		default_fonts="WINDOWSFONTDIR,WINDOWSUSERFONTDIR"
509	elif test "$os_darwin" = "yes"; then
510		default_fonts="/System/Library/Fonts,/Library/Fonts,~/Library/Fonts,/System/Library/Assets/com_apple_MobileAsset_Font3,/System/Library/Assets/com_apple_MobileAsset_Font4"
511	else
512		default_fonts="/usr/share/fonts"
513	fi
514	;;
515esac
516
517FC_DEFAULT_FONTS=""
518if test x${default_fonts+set} = xset; then
519	fc_IFS=$IFS
520	IFS=","
521	for p in $default_fonts; do
522		if test x"$FC_DEFAULT_FONTS" != x; then
523			FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS "
524		fi
525		FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS<dir>$p</dir>"
526	done
527	IFS=$fc_IFS
528fi
529
530AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$FC_DEFAULT_FONTS",
531			   [System font directory])
532
533AC_SUBST(FC_DEFAULT_FONTS)
534
535#
536# Add more fonts if available.  By default, add only the directories
537# with outline fonts; those with bitmaps can be added as desired in
538# local.conf or ~/.fonts.conf
539#
540AC_ARG_WITH(add-fonts,
541	[AC_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],
542			[Find additional fonts in DIR1,DIR2,... ])],
543	add_fonts="$withval", add_fonts=yes)
544
545case "$add_fonts" in
546yes)
547	FC_ADD_FONTS=""
548	for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
549		case x"$FC_ADD_FONTS" in
550		x)
551			sub="$dir/fonts"
552			if test -d "$sub"; then
553				case x$FC_ADD_FONTS in
554				x)
555					FC_ADD_FONTS="$sub"
556					;;
557				*)
558					FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
559					;;
560				esac
561			fi
562			;;
563		esac
564	done
565	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
566	;;
567no)
568	FC_ADD_FONTS=""
569	;;
570*)
571	FC_ADD_FONTS="$add_fonts"
572	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
573	;;
574esac
575
576AC_SUBST(FC_ADD_FONTS)
577
578FC_FONTPATH=""
579
580case "$FC_ADD_FONTS" in
581"")
582	;;
583*)
584	FC_FONTPATH=`echo $FC_ADD_FONTS |
585			sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
586	;;
587esac
588
589AC_SUBST(FC_FONTPATH)
590
591#
592# Set default cache directory path
593#
594AC_ARG_WITH(cache-dir,
595	[AC_HELP_STRING([--with-cache-dir=DIR],
596			[Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
597	fc_cachedir="$withval", fc_cachedir=yes)
598
599case $fc_cachedir in
600no|yes)
601	if test "$os_win32" = "yes"; then
602		fc_cachedir="LOCAL_APPDATA_FONTCONFIG_CACHE"
603	else
604		fc_cachedir='${localstatedir}/cache/${PACKAGE}'
605	fi
606	;;
607*)
608	;;
609esac
610AC_SUBST(fc_cachedir)
611FC_CACHEDIR=${fc_cachedir}
612AC_SUBST(FC_CACHEDIR)
613
614FC_FONTDATE=`LC_ALL=C date`
615
616AC_SUBST(FC_FONTDATE)
617
618#
619# Set configuration paths
620#
621
622AC_ARG_WITH(templatedir,
623	[AC_HELP_STRING([--with-templatedir=DIR],
624			[Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
625	[templatedir="$withval"],
626	[templatedir=yes])
627AC_ARG_WITH(baseconfigdir,
628	[AC_HELP_STRING([--with-baseconfigdir=DIR],
629			[Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
630	[baseconfigdir="$withval"],
631	[baseconfigdir=yes])
632AC_ARG_WITH(configdir,
633	[AC_HELP_STRING([--with-configdir=DIR],
634			[Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
635	[configdir="$withval"],
636	[configdir=yes])
637AC_ARG_WITH(xmldir,
638	[AC_HELP_STRING([--with-xmldir=DIR],
639			[Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
640	[xmldir="$withval"],
641	[xmldir=yes])
642
643case "$templatedir" in
644no|yes)
645	templatedir='${datadir}'/fontconfig/conf.avail
646	;;
647*)
648	;;
649esac
650case "$baseconfigdir" in
651no|yes)
652	baseconfigdir='${sysconfdir}'/fonts
653	;;
654*)
655	;;
656esac
657case "$configdir" in
658no|yes)
659	configdir='${BASECONFIGDIR}'/conf.d
660	;;
661*)
662	;;
663esac
664case "$xmldir" in
665no|yes)
666	xmldir='${datadir}'/xml/fontconfig
667	;;
668*)
669	;;
670esac
671
672TEMPLATEDIR=${templatedir}
673BASECONFIGDIR=${baseconfigdir}
674CONFIGDIR=${configdir}
675XMLDIR=${xmldir}
676AC_SUBST(TEMPLATEDIR)
677AC_SUBST(BASECONFIGDIR)
678AC_SUBST(CONFIGDIR)
679AC_SUBST(XMLDIR)
680
681
682dnl ===========================================================================
683
684#
685# Thread-safety primitives
686#
687
688AC_CACHE_CHECK([stdatomic.h atomic primitives], fc_cv_have_stdatomic_atomic_primitives, [
689	fc_cv_have_stdatomic_atomic_primitives=false
690	AC_TRY_LINK([
691		#include <stdatomic.h>
692
693		void memory_barrier (void) { atomic_thread_fence (memory_order_acq_rel); }
694		int atomic_add (atomic_int *i) { return atomic_fetch_add_explicit (i, 1, memory_order_relaxed); }
695		int mutex_trylock (atomic_flag *m) { return atomic_flag_test_and_set_explicit (m, memory_order_acquire); }
696		void mutex_unlock (atomic_flag *m) { atomic_flag_clear_explicit (m, memory_order_release); }
697		], [], fc_cv_have_stdatomic_atomic_primitives=true
698	)
699])
700if $fc_cv_have_stdatomic_atomic_primitives; then
701	AC_DEFINE(HAVE_STDATOMIC_PRIMITIVES, 1, [Have C99 stdatomic atomic primitives])
702fi
703
704AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
705	fc_cv_have_intel_atomic_primitives=false
706	AC_TRY_LINK([
707		void memory_barrier (void) { __sync_synchronize (); }
708		int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
709		int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
710		void mutex_unlock (int *m) { __sync_lock_release (m); }
711		], [], fc_cv_have_intel_atomic_primitives=true
712	)
713])
714if $fc_cv_have_intel_atomic_primitives; then
715	AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
716fi
717
718AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
719	fc_cv_have_solaris_atomic_ops=false
720	AC_TRY_LINK([
721		#include <atomic.h>
722		/* This requires Solaris Studio 12.2 or newer: */
723		#include <mbarrier.h>
724		void memory_barrier (void) { __machine_rw_barrier (); }
725		int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
726		void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
727		], [], fc_cv_have_solaris_atomic_ops=true
728	)
729])
730if $fc_cv_have_solaris_atomic_ops; then
731	AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
732fi
733
734if test "$os_win32" = no && ! $have_pthread; then
735	AC_CHECK_HEADERS(sched.h)
736	AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
737fi
738
739have_pthread=false
740if test "$os_win32" = no; then
741	AX_PTHREAD([have_pthread=true])
742fi
743if $have_pthread; then
744	LIBS="$PTHREAD_LIBS $LIBS"
745	CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
746	CC="$PTHREAD_CC"
747	AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
748fi
749AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
750
751
752dnl ===========================================================================
753
754#
755# Let people not build/install docs if they don't have docbook
756#
757
758AC_ARG_ENABLE(docbook,
759	[AS_HELP_STRING([--disable-docbook],
760		[Disable building docs with docbook2html (default: no)])],,)
761
762if test x$enable_docbook != xno; then
763	AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
764fi
765
766AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
767
768default_docs="yes"
769#
770# Check if docs exist or can be created
771#
772if test x$HASDOCBOOK = xno; then
773	if test -f $srcdir/doc/fonts-conf.5; then
774		:
775	else
776		default_docs="no"
777	fi
778fi
779
780AC_ARG_ENABLE(docs,
781	[AC_HELP_STRING([--disable-docs],
782			[Don't build and install documentation])],
783	,
784	enable_docs=$default_docs)
785
786AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
787
788if test "x$enable_docs" = xyes; then
789	tmp=funcs.$$
790	cat $srcdir/doc/*.fncs | awk '
791	/^@TITLE@/	{ if (!done) { printf ("%s\n", $2); done = 1; } }
792	/^@FUNC@/	{ if (!done) { printf ("%s\n", $2); done = 1; } }
793	/^@@/		{ done = 0; }' > $tmp
794	DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
795	echo DOCMAN3 $DOCMAN3
796	rm -f $tmp
797else
798	DOCMAN3=""
799fi
800AC_SUBST(DOCMAN3)
801
802dnl ===========================================================================
803default_cache_build="yes"
804if test $cross_compiling = "yes"; then
805	default_cache_build="no"
806fi
807AC_ARG_ENABLE(cache-build,
808	[AC_HELP_STRING([--disable-cache-build],
809			[Don't run fc-cache during the build])],
810	,
811	enable_cache_build=$default_cache_build)
812
813AM_CONDITIONAL(ENABLE_CACHE_BUILD, test "x$enable_cache_build" = xyes)
814
815
816dnl Figure out what cache format suffix to use for this architecture
817AC_C_BIGENDIAN
818AC_CHECK_SIZEOF([void *])
819AC_CHECK_ALIGNOF([double])
820AC_CHECK_ALIGNOF([void *])
821
822dnl include the header file for workaround of miscalculating size on autoconf
823dnl particularly for fat binaries
824AH_BOTTOM([#include "config-fixups.h"])
825
826dnl
827dnl
828AC_SUBST(PKGCONFIG_REQUIRES)
829AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY)
830
831dnl
832AC_CONFIG_FILES([
833Makefile
834fontconfig/Makefile
835fc-lang/Makefile
836fc-case/Makefile
837src/Makefile
838conf.d/Makefile
839fc-cache/Makefile
840fc-cat/Makefile
841fc-conflist/Makefile
842fc-list/Makefile
843fc-match/Makefile
844fc-pattern/Makefile
845fc-query/Makefile
846fc-scan/Makefile
847fc-validate/Makefile
848doc/Makefile
849doc/version.sgml
850its/Makefile
851po/Makefile.in
852po-conf/Makefile.in
853test/Makefile
854fontconfig.pc
855fontconfig-zip
856])
857AC_OUTPUT
858