Merge branch 'upstream' into tizen
[platform/upstream/fontconfig.git] / configure.ac
1 dnl
2 dnl  fontconfig/configure.in
3 dnl
4 dnl  Copyright © 2003 Keith Packard
5 dnl
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.
15 dnl
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.
23 dnl
24 dnl Process this file with autoconf to create configure.
25
26 AC_PREREQ(2.61)
27
28 dnl ==========================================================================
29 dnl                               Versioning
30 dnl ==========================================================================
31
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.14.2], [https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new])
37 AM_INIT_AUTOMAKE([1.11 parallel-tests dist-xz])
38 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
39
40 dnl ==========================================================================
41
42 AC_CONFIG_HEADERS(config.h)
43 AC_CONFIG_MACRO_DIR([m4])
44
45 AC_PROG_CC
46 AC_USE_SYSTEM_EXTENSIONS
47 AC_SYS_LARGEFILE
48 AC_PROG_INSTALL
49 AC_PROG_LN_S
50 AC_PROG_MAKE_SET
51 PKG_PROG_PKG_CONFIG
52 m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig))
53
54 AM_MISSING_PROG([GIT], [git])
55 AM_MISSING_PROG([GPERF], [gperf])
56 AM_PATH_PYTHON([3])
57
58 AC_MSG_CHECKING([for RM macro])
59 _predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
60 if test "x$_predefined_rm" = "x"; then
61         AC_MSG_RESULT([no predefined RM])
62         AC_CHECK_PROG(RM, rm, [rm -f])
63 else
64         AC_MSG_RESULT($_predefined_rm)
65 fi
66
67 dnl Initialize libtool
68 LT_PREREQ([2.2])
69 LT_INIT([disable-static win32-dll])
70
71 dnl libtool versioning
72
73 dnl bump revision when fixing bugs
74 dnl bump current and age, reset revision to zero when adding APIs
75 dnl bump current, leave age, reset revision to zero when changing/removing APIS
76 LIBT_CURRENT=13
77 LIBT_REVISION=0
78 AC_SUBST(LIBT_CURRENT)
79 AC_SUBST(LIBT_REVISION)
80 LIBT_AGE=12
81
82 LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
83 AC_SUBST(LIBT_VERSION_INFO)
84
85 LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
86 AC_SUBST(LIBT_CURRENT_MINUS_AGE)
87
88 PKGCONFIG_REQUIRES=
89 PKGCONFIG_REQUIRES_PRIVATELY=
90
91 dnl ==========================================================================
92 AC_CANONICAL_HOST
93 os_win32=no
94 os_darwin=no
95 case "${host_os}" in
96         cygwin*|mingw*)
97                 os_win32=yes
98                 ;;
99         darwin*)
100                 os_darwin=yes
101                 ;;
102 esac
103 AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
104 AM_CONDITIONAL(OS_DARWIN, test "$os_darwin" = "yes")
105
106 dnl ==========================================================================
107 dnl gettext stuff
108 dnl ==========================================================================
109 GETTEXT_PACKAGE=$PACKAGE
110 AC_SUBST(GETTEXT_PACKAGE)
111 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package])
112
113 AM_GNU_GETTEXT_VERSION([0.19.7])
114 AM_GNU_GETTEXT([external])
115
116 dnl ==========================================================================
117
118 if test "$os_win32" = "yes"; then
119   AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
120 fi
121 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
122
123 AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
124 WARN_CFLAGS=""
125 WARNING_CPP_DIRECTIVE="no"
126 if 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"
131 elif test "x$SUNCC" = "xyes"; then
132         WARN_CFLAGS="-v -fd"
133         WARNING_CPP_DIRECTIVE="yes"
134 fi
135 if test "x$WARNING_CPP_DIRECTIVE" = "xyes"; then
136         AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
137         [Can use #warning in C files])
138 fi
139 AC_SUBST(WARN_CFLAGS)
140
141
142 dnl ==========================================================================
143
144 AX_CC_FOR_BUILD()
145 AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
146 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
147 AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
148
149 dnl ==========================================================================
150
151 AC_ARG_WITH(arch,
152         [AC_HELP_STRING([--with-arch=ARCH],
153                         [Force architecture to ARCH])],
154         arch="$withval", arch=auto)
155
156 if test "x$arch" != xauto; then
157         AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
158 fi
159
160
161 dnl ==========================================================================
162
163 # Checks for header files.
164 AC_HEADER_DIRENT
165 AC_HEADER_STDC
166 AC_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])
167 AX_CREATE_STDINT_H([src/fcstdint.h])
168
169 # Checks for typedefs, structures, and compiler characteristics.
170 AC_C_CONST
171 AC_C_INLINE
172 AC_C_FLEXIBLE_ARRAY_MEMBER
173 AC_TYPE_PID_T
174
175 # Checks for library functions.
176 AC_FUNC_VPRINTF
177 AC_FUNC_MMAP
178 AC_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
180 dnl AC_CHECK_FUNCS doesn't check for header files.
181 dnl posix_fadvise() may be not available in older libc.
182 AC_CHECK_SYMBOL([posix_fadvise], [fcntl.h], [fc_func_posix_fadvise=1], [fc_func_posix_fadvise=0])
183 AC_DEFINE_UNQUOTED([HAVE_POSIX_FADVISE], [$fc_func_posix_fadvise], [Define to 1 if you have the 'posix_fadvise' function.])
184
185 #
186 AC_CHECK_MEMBERS([struct stat.st_mtim],,, [#include <sys/stat.h>])
187
188 #
189 if 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>])
192 fi
193 if 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])
207 fi
208 AC_CHECK_MEMBERS([struct dirent.d_type],,,
209         [#include <dirent.h>])
210
211 # Check the argument type of the gperf hash/lookup function
212 AC_MSG_CHECKING([The type of len parameter of gperf hash/lookup function])
213 fc_gperf_test="$(echo 'foo' | gperf -L ANSI-C)"
214 AC_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 )])
228 AC_DEFINE_UNQUOTED(FC_GPERF_SIZE_T, $FC_GPERF_SIZE_T, [The type of len parameter of the gperf hash/lookup function])
229 AC_MSG_RESULT($FC_GPERF_SIZE_T)
230
231 #
232 # Checks for iconv
233 #
234 AC_ARG_ENABLE(iconv,
235         [AC_HELP_STRING([--enable-iconv],
236                         [Use iconv to support non-Unicode SFNT name])],
237         ,enable_iconv=no)
238 AC_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])
247 AC_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])
252 AC_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.
260 if test "$libiconv_includes" != "auto" -a -r ${libiconv_includes}/iconv.h; then
261         libiconv_cflags="-I${libiconv_includes}"
262 elif test "$libiconv_prefix" != "auto" -a -r ${libiconv_prefix}/include/iconv.h; then
263         libiconv_cflags="-I${libiconv_prefix}/include"
264 else
265         libiconv_cflags=""
266 fi
267 libiconv_libs=""
268 if 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
276 fi
277
278 use_iconv=0
279 if 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)
311 fi
312 AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
313 #
314 # Checks for FreeType
315 #
316 dnl See http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/VERSIONS.TXT for versioning in freetype
317 PKG_CHECK_MODULES(FREETYPE, freetype2 >= 21.0.15)
318 PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2 >= 21.0.15"
319
320 AC_SUBST(FREETYPE_LIBS)
321 AC_SUBST(FREETYPE_CFLAGS)
322
323 fontconfig_save_libs="$LIBS"
324 fontconfig_save_cflags="$CFLAGS"
325 LIBS="$LIBS $FREETYPE_LIBS"
326 CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
327 AC_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
329 AC_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])
336 AM_CONDITIONAL(FREETYPE_PCF_LONG_FAMILY_NAMES, test "x$have_pcf_long_family_names" = xyes)
337
338 LIBS="$fontconfig_save_libs"
339 CFLAGS="$fontconfig_save_cflags"
340
341 #
342 # Check expat configuration
343 #
344 AC_ARG_WITH(expat,
345         [AC_HELP_STRING([--with-expat=DIR],
346                         [Use Expat in DIR])],
347         [expat_prefix=$withval],
348         [expat_prefix=auto])
349 AC_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])
354 AC_ARG_WITH(expat-lib,
355         [AC_HELP_STRING([--with-expat-lib=DIR])],
356         [expat_lib=$withval],
357         [expat_lib=auto])
358
359 if 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)
419 fi
420
421 #
422 # Check libxml2 configuration
423 #
424 AC_ARG_ENABLE(libxml2,
425         [AC_HELP_STRING([--enable-libxml2],
426                         [Use libxml2 instead of Expat])])
427
428 if 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"
447 fi
448
449 #
450 # Check json-c
451 #
452 PKG_CHECK_MODULES([JSONC], [json-c], [use_jsonc=yes], [use_jsonc=no])
453
454 AM_CONDITIONAL(ENABLE_JSONC, test "x$use_jsonc" = "xyes")
455 AC_SUBST(JSONC_CFLAGS)
456 AC_SUBST(JSONC_LIBS)
457
458 #
459 # Set default sub-pixel rendering
460 #
461
462 AC_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
467 case "$preferred_sub_pixel_rendering" in
468 none|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     ;;
475 esac
476
477 #
478 # Set default hinting
479 #
480
481 AC_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
486 case "$preferred_hinting" in
487 none|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         ;;
494 esac
495
496 #
497 # Set default font directory
498 #
499
500 AC_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
505 case "$default_fonts" in
506 yes)
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         ;;
515 esac
516
517 FC_DEFAULT_FONTS=""
518 if 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
528 fi
529
530 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$FC_DEFAULT_FONTS",
531                            [System font directory])
532
533 AC_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 #
540 AC_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
545 case "$add_fonts" in
546 yes)
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         ;;
567 no)
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         ;;
574 esac
575
576 AC_SUBST(FC_ADD_FONTS)
577
578 FC_FONTPATH=""
579
580 case "$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         ;;
587 esac
588
589 AC_SUBST(FC_FONTPATH)
590
591 #
592 # Set default cache directory path
593 #
594 AC_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
599 case $fc_cachedir in
600 no|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         ;;
609 esac
610 AC_SUBST(fc_cachedir)
611 FC_CACHEDIR=${fc_cachedir}
612 AC_SUBST(FC_CACHEDIR)
613
614 FC_FONTDATE=`LC_ALL=C date`
615
616 AC_SUBST(FC_FONTDATE)
617
618 #
619 # Set configuration paths
620 #
621
622 AC_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])
627 AC_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])
632 AC_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])
637 AC_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
643 case "$templatedir" in
644 no|yes)
645         templatedir='${datadir}'/fontconfig/conf.avail
646         ;;
647 *)
648         ;;
649 esac
650 case "$baseconfigdir" in
651 no|yes)
652         baseconfigdir='${sysconfdir}'/fonts
653         ;;
654 *)
655         ;;
656 esac
657 case "$configdir" in
658 no|yes)
659         configdir='${BASECONFIGDIR}'/conf.d
660         ;;
661 *)
662         ;;
663 esac
664 case "$xmldir" in
665 no|yes)
666         xmldir='${datadir}'/xml/fontconfig
667         ;;
668 *)
669         ;;
670 esac
671
672 TEMPLATEDIR=${templatedir}
673 BASECONFIGDIR=${baseconfigdir}
674 CONFIGDIR=${configdir}
675 XMLDIR=${xmldir}
676 AC_SUBST(TEMPLATEDIR)
677 AC_SUBST(BASECONFIGDIR)
678 AC_SUBST(CONFIGDIR)
679 AC_SUBST(XMLDIR)
680
681
682 dnl ===========================================================================
683
684 #
685 # Thread-safety primitives
686 #
687
688 AC_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 ])
700 if $fc_cv_have_stdatomic_atomic_primitives; then
701         AC_DEFINE(HAVE_STDATOMIC_PRIMITIVES, 1, [Have C99 stdatomic atomic primitives])
702 fi
703
704 AC_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 ])
714 if $fc_cv_have_intel_atomic_primitives; then
715         AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
716 fi
717
718 AC_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 ])
730 if $fc_cv_have_solaris_atomic_ops; then
731         AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
732 fi
733
734 if 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]))
737 fi
738
739 have_pthread=false
740 if test "$os_win32" = no; then
741         AX_PTHREAD([have_pthread=true])
742 fi
743 if $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])
748 fi
749 AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
750
751
752 dnl ===========================================================================
753
754 #
755 # Let people not build/install docs if they don't have docbook
756 #
757
758 AC_ARG_ENABLE(docbook,
759         [AS_HELP_STRING([--disable-docbook],
760                 [Disable building docs with docbook2html (default: no)])],,)
761
762 if test x$enable_docbook != xno; then
763         AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
764 fi
765
766 AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
767
768 default_docs="yes"
769 #
770 # Check if docs exist or can be created
771 #
772 if test x$HASDOCBOOK = xno; then
773         if test -f $srcdir/doc/fonts-conf.5; then
774                 :
775         else
776                 default_docs="no"
777         fi
778 fi
779
780 AC_ARG_ENABLE(docs,
781         [AC_HELP_STRING([--disable-docs],
782                         [Don't build and install documentation])],
783         ,
784         enable_docs=$default_docs)
785
786 AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
787
788 if 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
797 else
798         DOCMAN3=""
799 fi
800 AC_SUBST(DOCMAN3)
801
802 dnl ===========================================================================
803 default_cache_build="yes"
804 if test $cross_compiling = "yes"; then
805         default_cache_build="no"
806 fi
807 AC_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
813 AM_CONDITIONAL(ENABLE_CACHE_BUILD, test "x$enable_cache_build" = xyes)
814
815
816 dnl Figure out what cache format suffix to use for this architecture
817 AC_C_BIGENDIAN
818 AC_CHECK_SIZEOF([void *])
819 AC_CHECK_ALIGNOF([double])
820 AC_CHECK_ALIGNOF([void *])
821
822 dnl include the header file for workaround of miscalculating size on autoconf
823 dnl particularly for fat binaries
824 AH_BOTTOM([#include "config-fixups.h"])
825
826 dnl
827 dnl
828 AC_SUBST(PKGCONFIG_REQUIRES)
829 AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY)
830
831 dnl
832 AC_CONFIG_FILES([
833 Makefile
834 fontconfig/Makefile
835 fc-lang/Makefile
836 fc-case/Makefile
837 src/Makefile
838 conf.d/Makefile
839 fc-cache/Makefile
840 fc-cat/Makefile
841 fc-conflist/Makefile
842 fc-list/Makefile
843 fc-match/Makefile
844 fc-pattern/Makefile
845 fc-query/Makefile
846 fc-scan/Makefile
847 fc-validate/Makefile
848 doc/Makefile
849 doc/version.sgml
850 its/Makefile
851 po/Makefile.in
852 po-conf/Makefile.in
853 test/Makefile
854 fontconfig.pc
855 fontconfig-zip
856 ])
857 AC_OUTPUT