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.71])
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.15.0],[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=1
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	[AS_HELP_STRING([--with-arch=ARCH],[Force architecture to ARCH])],
153	arch="$withval", arch=auto)
154
155if test "x$arch" != xauto; then
156	AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
157fi
158
159
160dnl ==========================================================================
161
162# Checks for header files.
163AC_HEADER_DIRENT
164# Autoupdate added the next two lines to ensure that your configure
165# script's behavior did not change.  They are probably safe to remove.
166AC_CHECK_INCLUDES_DEFAULT
167AC_PROG_EGREP
168
169AC_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])
170AX_CREATE_STDINT_H([src/fcstdint.h])
171
172# Checks for typedefs, structures, and compiler characteristics.
173AC_C_CONST
174AC_C_INLINE
175AC_C_FLEXIBLE_ARRAY_MEMBER
176AC_TYPE_PID_T
177
178# Checks for library functions.
179AC_FUNC_VPRINTF
180AC_FUNC_MMAP
181AC_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])
182
183dnl AC_CHECK_FUNCS doesn't check for header files.
184dnl posix_fadvise() may be not available in older libc.
185AC_CHECK_SYMBOL([posix_fadvise], [fcntl.h], [fc_func_posix_fadvise=1], [fc_func_posix_fadvise=0])
186AC_DEFINE_UNQUOTED([HAVE_POSIX_FADVISE], [$fc_func_posix_fadvise], [Define to 1 if you have the 'posix_fadvise' function.])
187
188#
189AC_CHECK_MEMBERS([struct stat.st_mtim],,, [#include <sys/stat.h>])
190
191#
192if test "x$ac_cv_func_fstatvfs" = "xyes"; then
193	AC_CHECK_MEMBERS([struct statvfs.f_basetype, struct statvfs.f_fstypename],,,
194		[#include <sys/statvfs.h>])
195fi
196if test "x$ac_cv_func_fstatfs" = "xyes"; then
197	AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_fstypename],,, [
198#ifdef HAVE_SYS_VFS_H
199#include <sys/vfs.h>
200#endif
201#ifdef HAVE_SYS_STATFS_H
202#include <sys/statfs.h>
203#endif
204#ifdef HAVE_SYS_PARAM_H
205#include <sys/param.h>
206#endif
207#ifdef HAVE_SYS_MOUNT_H
208#include <sys/mount.h>
209#endif])
210fi
211AC_CHECK_MEMBERS([struct dirent.d_type],,,
212	[#include <dirent.h>])
213
214# Check the argument type of the gperf hash/lookup function
215AC_MSG_CHECKING([The type of len parameter of gperf hash/lookup function])
216fc_gperf_test="$(echo 'foo' | gperf -L ANSI-C)"
217AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
218	#include <string.h>
219
220	const char *in_word_set(register const char *, register size_t);
221	$fc_gperf_test
222	]])], [FC_GPERF_SIZE_T=size_t],
223	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
224		#include <string.h>
225
226		const char *in_word_set(register const char *, register unsigned int);
227		$fc_gperf_test
228	]])], [FC_GPERF_SIZE_T="unsigned int"],
229	[AC_MSG_ERROR([Unable to determine the type of the len parameter of the gperf hash/lookup function])]
230)])
231AC_DEFINE_UNQUOTED(FC_GPERF_SIZE_T, $FC_GPERF_SIZE_T, [The type of len parameter of the gperf hash/lookup function])
232AC_MSG_RESULT($FC_GPERF_SIZE_T)
233
234#
235# Checks for iconv
236#
237AC_ARG_ENABLE(iconv,
238	[AS_HELP_STRING([--enable-iconv],[Use iconv to support non-Unicode SFNT name])],
239	,enable_iconv=no)
240AC_ARG_WITH(libiconv,
241	[AS_HELP_STRING([--with-libiconv=DIR],[Use libiconv in DIR])],
242	[if test "x$withval" = "xyes"; then
243		libiconv_prefix=$prefix
244	 else
245		libiconv_prefix=$withval
246	 fi],
247	[libiconv_prefix=auto])
248AC_ARG_WITH(libiconv-includes,
249	[AS_HELP_STRING([--with-libiconv-includes=DIR],[Use libiconv includes in DIR])],
250	[libiconv_includes=$withval],
251	[libiconv_includes=auto])
252AC_ARG_WITH(libiconv-lib,
253	[AS_HELP_STRING([--with-libiconv-lib=DIR],[Use libiconv library in DIR])],
254	[libiconv_lib=$withval],
255	[libiconv_lib=auto])
256
257# if no libiconv,libiconv-includes,libiconv-lib are specified,
258# libc's iconv has a priority.
259if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
260	libiconv_cflags="-I${libiconv_includes}"
261elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
262	libiconv_cflags="-I${libiconv_prefix}/include"
263else
264	libiconv_cflags=""
265fi
266libiconv_libs=""
267if test "x$libiconv_cflags" != "x"; then
268	if test "$libiconv_lib" != "auto" -a -d ${libiconv_lib}; then
269		libiconv_libs="-L${libiconv_lib} -liconv"
270	elif test "$libiconv_prefix" != "auto" -a -d ${libiconv_prefix}/lib; then
271		libiconv_libs="-L${libiconv_prefix}/lib -liconv"
272	else
273		libiconv_libs="-liconv"
274	fi
275fi
276
277use_iconv=0
278if test "x$enable_iconv" != "xno"; then
279	AC_MSG_CHECKING([for a usable iconv])
280	if test "x$libiconv_cflags" != "x" -o "x$libiconv_libs" != "x"; then
281		iconvsaved_CFLAGS="$CFLAGS"
282		iconvsaved_LIBS="$LIBS"
283		CFLAGS="$CFLAGS $libiconv_cflags"
284		LIBS="$LIBS $libiconv_libs"
285
286		AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <iconv.h>]], [[iconv_open ("from", "to");]])],[iconv_type="libiconv"
287			 use_iconv=1
288			 ICONV_CFLAGS="$libiconv_cflags"
289			 ICONV_LIBS="$libiconv_libs"
290			 ],[use_iconv=0])
291
292		CFLAGS="$iconvsaved_CFLAGS"
293		LIBS="$iconvsaved_LIBS"
294	fi
295	if test "x$use_iconv" = "x0"; then
296		AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <iconv.h>]], [[iconv_open ("from", "to");]])],[iconv_type="libc"
297			 use_iconv=1],[iconv_type="not found"
298			 use_iconv=0])
299	fi
300
301	AC_MSG_RESULT([$iconv_type])
302	AC_SUBST(ICONV_CFLAGS)
303	AC_SUBST(ICONV_LIBS)
304fi
305AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
306#
307# Checks for FreeType
308#
309dnl See http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/VERSIONS.TXT for versioning in freetype
310PKG_CHECK_MODULES(FREETYPE, freetype2 >= 21.0.15)
311PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2 >= 21.0.15"
312
313AC_SUBST(FREETYPE_LIBS)
314AC_SUBST(FREETYPE_CFLAGS)
315
316fontconfig_save_libs="$LIBS"
317fontconfig_save_cflags="$CFLAGS"
318LIBS="$LIBS $FREETYPE_LIBS"
319CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
320AC_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)
321
322AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
323	#include <ft2build.h>
324	#include FT_CONFIG_OPTIONS_H
325	#ifndef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
326	#  error "No pcf long family names support"
327	#endif
328	]])], [have_pcf_long_family_names=yes], [have_pcf_long_family_names=no])
329AM_CONDITIONAL(FREETYPE_PCF_LONG_FAMILY_NAMES, test "x$have_pcf_long_family_names" = xyes)
330
331LIBS="$fontconfig_save_libs"
332CFLAGS="$fontconfig_save_cflags"
333
334#
335# Check expat configuration
336#
337AC_ARG_WITH(expat,
338	[AS_HELP_STRING([--with-expat=DIR],[Use Expat in DIR])],
339	[expat_prefix=$withval],
340	[expat_prefix=auto])
341AC_ARG_WITH(expat-includes,
342	[AS_HELP_STRING([--with-expat-includes=DIR],[Use Expat includes in DIR])],
343	[expat_includes=$withval],
344	[expat_includes=auto])
345AC_ARG_WITH(expat-lib,
346	[AS_HELP_STRING([--with-expat-lib=DIR])],
347	[expat_lib=$withval],
348	[expat_lib=auto])
349
350if test "$enable_libxml2" != "yes"; then
351	use_pkgconfig_for_expat=yes
352	if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
353		PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
354	else
355		use_pkgconfig_for_expat=no
356	fi
357	if test "x$use_pkgconfig_for_expat" = "xno"; then
358		if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
359			EXPAT_CFLAGS="-I${expat_includes}"
360		elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
361			EXPAT_CFLAGS="-I${expat_prefix}/include"
362		else
363			EXPAT_CFLAGS=""
364		fi
365		if test "$expat_lib" != "auto"; then
366			EXPAT_LIBS="-L${expat_lib} -lexpat"
367		elif test "$expat_prefix" != "auto"; then
368			EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
369		else
370			EXPAT_LIBS="-lexpat"
371		fi
372		PKG_EXPAT_CFLAGS=$EXPAT_CFLAGS
373		PKG_EXPAT_LIBS=$EXPAT_LIBS
374	else
375		PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY expat"
376		PKG_EXPAT_CFLAGS=
377		PKG_EXPAT_LIBS=
378	fi
379
380	expatsaved_CPPFLAGS="$CPPFLAGS"
381	expatsaved_LIBS="$LIBS"
382	CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
383	LIBS="$LIBS $EXPAT_LIBS"
384
385	AC_CHECK_HEADER(expat.h)
386	if test "$ac_cv_header_expat_h" = "no"; then
387		AC_CHECK_HEADER(xmlparse.h)
388		if test "$ac_cv_header_xmlparse_h" = "yes"; then
389			HAVE_XMLPARSE_H=1
390			AC_SUBST(HAVE_XMLPARSE_H)
391			AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
392				[Use xmlparse.h instead of expat.h])
393		else
394			AC_MSG_ERROR([
395*** expat is required. or try to use --enable-libxml2])
396		fi
397	fi
398	AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
399	if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
400		AC_MSG_ERROR([
401*** expat is required. or try to use --enable-libxml2])
402	fi
403	CPPFLAGS="$expatsaved_CPPFLAGS"
404	LIBS="$expatsaved_LIBS"
405
406	AC_SUBST(EXPAT_CFLAGS)
407	AC_SUBST(EXPAT_LIBS)
408	AC_SUBST(PKG_EXPAT_CFLAGS)
409	AC_SUBST(PKG_EXPAT_LIBS)
410fi
411
412#
413# Check libxml2 configuration
414#
415AC_ARG_ENABLE(libxml2,
416	[AS_HELP_STRING([--enable-libxml2],[Use libxml2 instead of Expat])])
417
418if test "$enable_libxml2" = "yes"; then
419    PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
420    PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY libxml-2.0 >= 2.6"
421    AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
422
423    AC_SUBST(LIBXML2_CFLAGS)
424    AC_SUBST(LIBXML2_LIBS)
425
426    fc_saved_CFLAGS="$CFLAGS"
427    CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
428    AC_MSG_CHECKING([SAX1 support in libxml2])
429    AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
430	#include <libxml/xmlversion.h>
431	#if !defined(LIBXML_SAX1_ENABLED)
432	#  include "error: No SAX1 support in libxml2"
433	#endif
434	]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
435*** SAX1 support in libxml2 is required. enable it or use expat instead.])])
436    CFLAGS="$fc_saved_CFLAGS"
437fi
438
439#
440# Check json-c
441#
442PKG_CHECK_MODULES([JSONC], [json-c], [use_jsonc=yes], [use_jsonc=no])
443
444AM_CONDITIONAL(ENABLE_JSONC, test "x$use_jsonc" = "xyes")
445AC_SUBST(JSONC_CFLAGS)
446AC_SUBST(JSONC_LIBS)
447
448#
449# Set default sub-pixel rendering
450#
451
452AC_ARG_WITH(default-sub-pixel-rendering,
453    [AS_HELP_STRING([--with-default-sub-pixel-rendering=NAME],[Enable your preferred sub-pixel rendering configuration (none/bgr/rgb/vbgr/vrgb) [default=none]])],
454    preferred_sub_pixel_rendering="$withval", preferred_sub_pixel_rendering=none)
455
456case "$preferred_sub_pixel_rendering" in
457none|bgr|rgb|vbgr|vrgb)
458    PREFERRED_SUB_PIXEL_RENDERING="$preferred_sub_pixel_rendering"
459    AC_SUBST(PREFERRED_SUB_PIXEL_RENDERING)
460    ;;
461*)
462    AC_MSG_ERROR([Invalid sub-pixel rendering. please choose one of none, bgr, rgb, vbgr, or vrgb])
463    ;;
464esac
465
466#
467# Set default hinting
468#
469
470AC_ARG_WITH(default-hinting,
471	[AS_HELP_STRING([--with-default-hinting=NAME],[Enable your preferred hinting configuration (none/slight/medium/full) [default=slight]])],
472	preferred_hinting="$withval", preferred_hinting=slight)
473
474case "$preferred_hinting" in
475none|slight|medium|full)
476	PREFERRED_HINTING="$preferred_hinting"
477	AC_SUBST(PREFERRED_HINTING)
478	;;
479*)
480	AC_MSG_ERROR([Invalid hinting. please choose one of none, slight, medium, or full])
481	;;
482esac
483
484#
485# Set default font directory
486#
487
488AC_ARG_WITH(default-fonts,
489	[AS_HELP_STRING([--with-default-fonts=DIR1,DIR2,...],[Use fonts from DIR1,DIR2,... when config is busted])],
490	default_fonts="$withval", default_fonts=yes)
491
492case "$default_fonts" in
493yes)
494	if test "$os_win32" = "yes"; then
495		default_fonts="WINDOWSFONTDIR,WINDOWSUSERFONTDIR"
496	elif test "$os_darwin" = "yes"; then
497		default_fonts="/System/Library/Fonts,/Library/Fonts,~/Library/Fonts,/System/Library/Assets/com_apple_MobileAsset_Font3,/System/Library/Assets/com_apple_MobileAsset_Font4"
498	else
499		default_fonts="/usr/share/fonts"
500	fi
501	;;
502esac
503
504FC_DEFAULT_FONTS=""
505if test x${default_fonts+set} = xset; then
506	fc_IFS=$IFS
507	IFS=","
508	for p in $default_fonts; do
509		if test x"$FC_DEFAULT_FONTS" != x; then
510			FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS "
511		fi
512		FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS<dir>$p</dir>"
513	done
514	IFS=$fc_IFS
515fi
516
517AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$FC_DEFAULT_FONTS",
518			   [System font directory])
519
520AC_SUBST(FC_DEFAULT_FONTS)
521
522#
523# Add more fonts if available.  By default, add only the directories
524# with outline fonts; those with bitmaps can be added as desired in
525# local.conf or ~/.fonts.conf
526#
527AC_ARG_WITH(add-fonts,
528	[AS_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],[Find additional fonts in DIR1,DIR2,... ])],
529	add_fonts="$withval", add_fonts=yes)
530
531case "$add_fonts" in
532yes)
533	FC_ADD_FONTS=""
534	for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
535		case x"$FC_ADD_FONTS" in
536		x)
537			sub="$dir/fonts"
538			if test -d "$sub"; then
539				case x$FC_ADD_FONTS in
540				x)
541					FC_ADD_FONTS="$sub"
542					;;
543				*)
544					FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
545					;;
546				esac
547			fi
548			;;
549		esac
550	done
551	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
552	;;
553no)
554	FC_ADD_FONTS=""
555	;;
556*)
557	FC_ADD_FONTS="$add_fonts"
558	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
559	;;
560esac
561
562AC_SUBST(FC_ADD_FONTS)
563
564FC_FONTPATH=""
565
566case "$FC_ADD_FONTS" in
567"")
568	;;
569*)
570	FC_FONTPATH=`echo $FC_ADD_FONTS |
571			sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
572	;;
573esac
574
575AC_SUBST(FC_FONTPATH)
576
577#
578# Set default cache directory path
579#
580AC_ARG_WITH(cache-dir,
581	[AS_HELP_STRING([--with-cache-dir=DIR],[Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
582	fc_cachedir="$withval", fc_cachedir=yes)
583
584case $fc_cachedir in
585no|yes)
586	if test "$os_win32" = "yes"; then
587		fc_cachedir="LOCAL_APPDATA_FONTCONFIG_CACHE"
588	else
589		fc_cachedir='${localstatedir}/cache/${PACKAGE}'
590	fi
591	;;
592*)
593	;;
594esac
595AC_SUBST(fc_cachedir)
596FC_CACHEDIR=${fc_cachedir}
597AC_SUBST(FC_CACHEDIR)
598
599FC_FONTDATE=`LC_ALL=C date`
600
601AC_SUBST(FC_FONTDATE)
602
603#
604# Set configuration paths
605#
606
607AC_ARG_WITH(templatedir,
608	[AS_HELP_STRING([--with-templatedir=DIR],[Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
609	[templatedir="$withval"],
610	[templatedir=yes])
611AC_ARG_WITH(baseconfigdir,
612	[AS_HELP_STRING([--with-baseconfigdir=DIR],[Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
613	[baseconfigdir="$withval"],
614	[baseconfigdir=yes])
615AC_ARG_WITH(configdir,
616	[AS_HELP_STRING([--with-configdir=DIR],[Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
617	[configdir="$withval"],
618	[configdir=yes])
619AC_ARG_WITH(xmldir,
620	[AS_HELP_STRING([--with-xmldir=DIR],[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_LINK_IFELSE([AC_LANG_PROGRAM([[
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 C99 stdatomic 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_LINK_IFELSE([AC_LANG_PROGRAM([[
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_LINK_IFELSE([AC_LANG_PROGRAM([[
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	[AS_HELP_STRING([--disable-docs],[Don't build and install documentation])],
763	,
764	enable_docs=$default_docs)
765
766AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
767
768if test "x$enable_docs" = xyes; then
769	tmp=funcs.$$
770	cat $srcdir/doc/*.fncs | awk '
771	/^@TITLE@/	{ if (!done) { printf ("%s\n", $2); done = 1; } }
772	/^@FUNC@/	{ if (!done) { printf ("%s\n", $2); done = 1; } }
773	/^@@/		{ done = 0; }' > $tmp
774	DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
775	echo DOCMAN3 $DOCMAN3
776	rm -f $tmp
777else
778	DOCMAN3=""
779fi
780AC_SUBST(DOCMAN3)
781
782dnl ===========================================================================
783default_cache_build="yes"
784if test $cross_compiling = "yes"; then
785	default_cache_build="no"
786fi
787AC_ARG_ENABLE(cache-build,
788	[AS_HELP_STRING([--disable-cache-build],[Don't run fc-cache during the build])],
789	,
790	enable_cache_build=$default_cache_build)
791
792AM_CONDITIONAL(ENABLE_CACHE_BUILD, test "x$enable_cache_build" = xyes)
793
794
795dnl Figure out what cache format suffix to use for this architecture
796AC_C_BIGENDIAN
797AC_CHECK_SIZEOF([void *])
798AC_CHECK_ALIGNOF([double])
799AC_CHECK_ALIGNOF([void *])
800
801dnl include the header file for workaround of miscalculating size on autoconf
802dnl particularly for fat binaries
803AH_BOTTOM([#include "config-fixups.h"])
804
805dnl
806dnl
807AC_SUBST(PKGCONFIG_REQUIRES)
808AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY)
809
810dnl
811AC_CONFIG_FILES([
812Makefile
813fontconfig/Makefile
814fc-lang/Makefile
815fc-case/Makefile
816src/Makefile
817conf.d/Makefile
818fc-cache/Makefile
819fc-cat/Makefile
820fc-conflist/Makefile
821fc-list/Makefile
822fc-match/Makefile
823fc-pattern/Makefile
824fc-query/Makefile
825fc-scan/Makefile
826fc-validate/Makefile
827doc/Makefile
828doc/version.sgml
829its/Makefile
830po/Makefile.in
831po-conf/Makefile.in
832test/Makefile
833fontconfig.pc
834fontconfig-zip
835])
836AC_OUTPUT
837