Add uuid in configure file
[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 for uuid
343 #
344 if test "$os_win32" != "yes"; then
345         use_pkgconfig_for_uuid=yes
346         if test -n "${UUID_LIBS}"; then
347                 save_UUID_LIBS=$UUID_LIBS
348         fi
349         PKG_CHECK_MODULES([UUID], [uuid],
350                           [use_pkgconfig_for_uuid=yes],
351                           [use_pkgconfig_for_uuid=no])
352         if test "x$use_pkgconfig_for_uuid" = "xno"; then
353                 AC_MSG_CHECKING([where uuid functions comes from])
354                 AC_TRY_LINK([#include <uuid/uuid.h>],
355                         [uuid_t a; uuid_generate(a);],
356                         [AC_MSG_RESULT([builtin])
357                          UUID_CFLAGS=""
358                          UUID_LIBS=""
359                         ],[AC_MSG_ERROR([
360 *** uuid is required. install util-linux.
361                         ])])
362         else
363                 if test -z "${save_UUID_LIBS+x}" && test "x${UUID_LIBS}" != "x"; then
364                         PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY uuid"
365                 fi
366         fi
367 else
368         UUID_CFLAGS=""
369         UUID_LIBS=""
370 fi
371 AC_SUBST(UUID_CFLAGS)
372 AC_SUBST(UUID_LIBS)
373
374 #
375 # Check expat configuration
376 #
377 AC_ARG_WITH(expat,
378         [AC_HELP_STRING([--with-expat=DIR],
379                         [Use Expat in DIR])],
380         [expat_prefix=$withval],
381         [expat_prefix=auto])
382 AC_ARG_WITH(expat-includes,
383         [AC_HELP_STRING([--with-expat-includes=DIR],
384                         [Use Expat includes in DIR])],
385         [expat_includes=$withval],
386         [expat_includes=auto])
387 AC_ARG_WITH(expat-lib,
388         [AC_HELP_STRING([--with-expat-lib=DIR])],
389         [expat_lib=$withval],
390         [expat_lib=auto])
391
392 if test "$enable_libxml2" != "yes"; then
393         use_pkgconfig_for_expat=yes
394         if test "$expat_prefix" = "auto" -a "$expat_includes" = "auto" -a "$expat_lib" = "auto"; then
395                 PKG_CHECK_MODULES(EXPAT, expat,,use_pkgconfig_for_expat=no)
396         else
397                 use_pkgconfig_for_expat=no
398         fi
399         if test "x$use_pkgconfig_for_expat" = "xno"; then
400                 if test "$expat_includes" != "auto" -a -r ${expat_includes}/expat.h; then
401                         EXPAT_CFLAGS="-I${expat_includes}"
402                 elif test "$expat_prefix" != "auto" -a -r ${expat_prefix}/include/expat.h; then
403                         EXPAT_CFLAGS="-I${expat_prefix}/include"
404                 else
405                         EXPAT_CFLAGS=""
406                 fi
407                 if test "$expat_lib" != "auto"; then
408                         EXPAT_LIBS="-L${expat_lib} -lexpat"
409                 elif test "$expat_prefix" != "auto"; then
410                         EXPAT_LIBS="-L${expat_prefix}/lib -lexpat"
411                 else
412                         EXPAT_LIBS="-lexpat"
413                 fi
414                 PKG_EXPAT_CFLAGS=$EXPAT_CFLAGS
415                 PKG_EXPAT_LIBS=$EXPAT_LIBS
416         else
417                 PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY expat"
418                 PKG_EXPAT_CFLAGS=
419                 PKG_EXPAT_LIBS=
420         fi
421
422         expatsaved_CPPFLAGS="$CPPFLAGS"
423         expatsaved_LIBS="$LIBS"
424         CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
425         LIBS="$LIBS $EXPAT_LIBS"
426
427         AC_CHECK_HEADER(expat.h)
428         if test "$ac_cv_header_expat_h" = "no"; then
429                 AC_CHECK_HEADER(xmlparse.h)
430                 if test "$ac_cv_header_xmlparse_h" = "yes"; then
431                         HAVE_XMLPARSE_H=1
432                         AC_SUBST(HAVE_XMLPARSE_H)
433                         AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
434                                 [Use xmlparse.h instead of expat.h])
435                 else
436                         AC_MSG_ERROR([
437 *** expat is required. or try to use --enable-libxml2])
438                 fi
439         fi
440         AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
441         if test "$ac_cv_func_XML_SetDoctypeDeclHandler" = "no"; then
442                 AC_MSG_ERROR([
443 *** expat is required. or try to use --enable-libxml2])
444         fi
445         CPPFLAGS="$expatsaved_CPPFLAGS"
446         LIBS="$expatsaved_LIBS"
447
448         AC_SUBST(EXPAT_CFLAGS)
449         AC_SUBST(EXPAT_LIBS)
450         AC_SUBST(PKG_EXPAT_CFLAGS)
451         AC_SUBST(PKG_EXPAT_LIBS)
452 fi
453
454 #
455 # Check libxml2 configuration
456 #
457 AC_ARG_ENABLE(libxml2,
458         [AC_HELP_STRING([--enable-libxml2],
459                         [Use libxml2 instead of Expat])])
460
461 if test "$enable_libxml2" = "yes"; then
462     PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
463     PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY libxml-2.0 >= 2.6"
464     AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
465
466     AC_SUBST(LIBXML2_CFLAGS)
467     AC_SUBST(LIBXML2_LIBS)
468
469     fc_saved_CFLAGS="$CFLAGS"
470     CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
471     AC_MSG_CHECKING([SAX1 support in libxml2])
472     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
473         #include <libxml/xmlversion.h>
474         #if !defined(LIBXML_SAX1_ENABLED)
475         #  include "error: No SAX1 support in libxml2"
476         #endif
477         ]])], [AC_MSG_RESULT([found])], [AC_MSG_ERROR([
478 *** SAX1 support in libxml2 is required. enable it or use expat instead.])])
479     CFLAGS="$fc_saved_CFLAGS"
480 fi
481
482 #
483 # Check json-c
484 #
485 PKG_CHECK_MODULES([JSONC], [json-c], [use_jsonc=yes], [use_jsonc=no])
486
487 AM_CONDITIONAL(ENABLE_JSONC, test "x$use_jsonc" = "xyes")
488 AC_SUBST(JSONC_CFLAGS)
489 AC_SUBST(JSONC_LIBS)
490
491 #
492 # Set default sub-pixel rendering
493 #
494
495 AC_ARG_WITH(default-sub-pixel-rendering,
496     [AC_HELP_STRING([--with-default-sub-pixel-rendering=NAME],
497             [Enable your preferred sub-pixel rendering configuration (none/bgr/rgb/vbgr/vrgb) [default=none]])],
498     preferred_sub_pixel_rendering="$withval", preferred_sub_pixel_rendering=none)
499
500 case "$preferred_sub_pixel_rendering" in
501 none|bgr|rgb|vbgr|vrgb)
502     PREFERRED_SUB_PIXEL_RENDERING="$preferred_sub_pixel_rendering"
503     AC_SUBST(PREFERRED_SUB_PIXEL_RENDERING)
504     ;;
505 *)
506     AC_MSG_ERROR([Invalid sub-pixel rendering. please choose one of none, bgr, rgb, vbgr, or vrgb])
507     ;;
508 esac
509
510 #
511 # Set default hinting
512 #
513
514 AC_ARG_WITH(default-hinting,
515         [AC_HELP_STRING([--with-default-hinting=NAME],
516                         [Enable your preferred hinting configuration (none/slight/medium/full) [default=slight]])],
517         preferred_hinting="$withval", preferred_hinting=slight)
518
519 case "$preferred_hinting" in
520 none|slight|medium|full)
521         PREFERRED_HINTING="$preferred_hinting"
522         AC_SUBST(PREFERRED_HINTING)
523         ;;
524 *)
525         AC_MSG_ERROR([Invalid hinting. please choose one of none, slight, medium, or full])
526         ;;
527 esac
528
529 #
530 # Set default font directory
531 #
532
533 AC_ARG_WITH(default-fonts,
534         [AC_HELP_STRING([--with-default-fonts=DIR1,DIR2,...],
535                         [Use fonts from DIR1,DIR2,... when config is busted])],
536         default_fonts="$withval", default_fonts=yes)
537
538 case "$default_fonts" in
539 yes)
540         if test "$os_win32" = "yes"; then
541                 default_fonts="WINDOWSFONTDIR,WINDOWSUSERFONTDIR"
542         elif test "$os_darwin" = "yes"; then
543                 default_fonts="/System/Library/Fonts,/Library/Fonts,~/Library/Fonts,/System/Library/Assets/com_apple_MobileAsset_Font3,/System/Library/Assets/com_apple_MobileAsset_Font4"
544         else
545                 default_fonts="/usr/share/fonts"
546         fi
547         ;;
548 esac
549
550 FC_DEFAULT_FONTS=""
551 if test x${default_fonts+set} = xset; then
552         fc_IFS=$IFS
553         IFS=","
554         for p in $default_fonts; do
555                 if test x"$FC_DEFAULT_FONTS" != x; then
556                         FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS "
557                 fi
558                 FC_DEFAULT_FONTS="$FC_DEFAULT_FONTS<dir>$p</dir>"
559         done
560         IFS=$fc_IFS
561 fi
562
563 AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$FC_DEFAULT_FONTS",
564                            [System font directory])
565
566 AC_SUBST(FC_DEFAULT_FONTS)
567
568 #
569 # Add more fonts if available.  By default, add only the directories
570 # with outline fonts; those with bitmaps can be added as desired in
571 # local.conf or ~/.fonts.conf
572 #
573 AC_ARG_WITH(add-fonts,
574         [AC_HELP_STRING([--with-add-fonts=DIR1,DIR2,...],
575                         [Find additional fonts in DIR1,DIR2,... ])],
576         add_fonts="$withval", add_fonts=yes)
577
578 case "$add_fonts" in
579 yes)
580         FC_ADD_FONTS=""
581         for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
582                 case x"$FC_ADD_FONTS" in
583                 x)
584                         sub="$dir/fonts"
585                         if test -d "$sub"; then
586                                 case x$FC_ADD_FONTS in
587                                 x)
588                                         FC_ADD_FONTS="$sub"
589                                         ;;
590                                 *)
591                                         FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
592                                         ;;
593                                 esac
594                         fi
595                         ;;
596                 esac
597         done
598         AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
599         ;;
600 no)
601         FC_ADD_FONTS=""
602         ;;
603 *)
604         FC_ADD_FONTS="$add_fonts"
605         AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
606         ;;
607 esac
608
609 AC_SUBST(FC_ADD_FONTS)
610
611 FC_FONTPATH=""
612
613 case "$FC_ADD_FONTS" in
614 "")
615         ;;
616 *)
617         FC_FONTPATH=`echo $FC_ADD_FONTS |
618                         sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
619         ;;
620 esac
621
622 AC_SUBST(FC_FONTPATH)
623
624 #
625 # Set default cache directory path
626 #
627 AC_ARG_WITH(cache-dir,
628         [AC_HELP_STRING([--with-cache-dir=DIR],
629                         [Use DIR to store cache files [default=LOCALSTATEDIR/cache/fontconfig]])],
630         fc_cachedir="$withval", fc_cachedir=yes)
631
632 case $fc_cachedir in
633 no|yes)
634         if test "$os_win32" = "yes"; then
635                 fc_cachedir="LOCAL_APPDATA_FONTCONFIG_CACHE"
636         else
637                 fc_cachedir='${localstatedir}/cache/${PACKAGE}'
638         fi
639         ;;
640 *)
641         ;;
642 esac
643 AC_SUBST(fc_cachedir)
644 FC_CACHEDIR=${fc_cachedir}
645 AC_SUBST(FC_CACHEDIR)
646
647 FC_FONTDATE=`LC_ALL=C date`
648
649 AC_SUBST(FC_FONTDATE)
650
651 #
652 # Set configuration paths
653 #
654
655 AC_ARG_WITH(templatedir,
656         [AC_HELP_STRING([--with-templatedir=DIR],
657                         [Use DIR to store the configuration template files [default=DATADIR/fontconfig/conf.avail]])],
658         [templatedir="$withval"],
659         [templatedir=yes])
660 AC_ARG_WITH(baseconfigdir,
661         [AC_HELP_STRING([--with-baseconfigdir=DIR],
662                         [Use DIR to store the base configuration files [default=SYSCONFDIR/fonts]])],
663         [baseconfigdir="$withval"],
664         [baseconfigdir=yes])
665 AC_ARG_WITH(configdir,
666         [AC_HELP_STRING([--with-configdir=DIR],
667                         [Use DIR to store active configuration files [default=BASECONFIGDIR/conf.d]])],
668         [configdir="$withval"],
669         [configdir=yes])
670 AC_ARG_WITH(xmldir,
671         [AC_HELP_STRING([--with-xmldir=DIR],
672                         [Use DIR to store XML schema files [default=DATADIR/xml/fontconfig]])],
673         [xmldir="$withval"],
674         [xmldir=yes])
675
676 case "$templatedir" in
677 no|yes)
678         templatedir='${datadir}'/fontconfig/conf.avail
679         ;;
680 *)
681         ;;
682 esac
683 case "$baseconfigdir" in
684 no|yes)
685         baseconfigdir='${sysconfdir}'/fonts
686         ;;
687 *)
688         ;;
689 esac
690 case "$configdir" in
691 no|yes)
692         configdir='${BASECONFIGDIR}'/conf.d
693         ;;
694 *)
695         ;;
696 esac
697 case "$xmldir" in
698 no|yes)
699         xmldir='${datadir}'/xml/fontconfig
700         ;;
701 *)
702         ;;
703 esac
704
705 TEMPLATEDIR=${templatedir}
706 BASECONFIGDIR=${baseconfigdir}
707 CONFIGDIR=${configdir}
708 XMLDIR=${xmldir}
709 AC_SUBST(TEMPLATEDIR)
710 AC_SUBST(BASECONFIGDIR)
711 AC_SUBST(CONFIGDIR)
712 AC_SUBST(XMLDIR)
713
714
715 dnl ===========================================================================
716
717 #
718 # Thread-safety primitives
719 #
720
721 AC_CACHE_CHECK([stdatomic.h atomic primitives], fc_cv_have_stdatomic_atomic_primitives, [
722         fc_cv_have_stdatomic_atomic_primitives=false
723         AC_TRY_LINK([
724                 #include <stdatomic.h>
725
726                 void memory_barrier (void) { atomic_thread_fence (memory_order_acq_rel); }
727                 int atomic_add (atomic_int *i) { return atomic_fetch_add_explicit (i, 1, memory_order_relaxed); }
728                 int mutex_trylock (atomic_flag *m) { return atomic_flag_test_and_set_explicit (m, memory_order_acquire); }
729                 void mutex_unlock (atomic_flag *m) { atomic_flag_clear_explicit (m, memory_order_release); }
730                 ], [], fc_cv_have_stdatomic_atomic_primitives=true
731         )
732 ])
733 if $fc_cv_have_stdatomic_atomic_primitives; then
734         AC_DEFINE(HAVE_STDATOMIC_PRIMITIVES, 1, [Have C99 stdatomic atomic primitives])
735 fi
736
737 AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
738         fc_cv_have_intel_atomic_primitives=false
739         AC_TRY_LINK([
740                 void memory_barrier (void) { __sync_synchronize (); }
741                 int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
742                 int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
743                 void mutex_unlock (int *m) { __sync_lock_release (m); }
744                 ], [], fc_cv_have_intel_atomic_primitives=true
745         )
746 ])
747 if $fc_cv_have_intel_atomic_primitives; then
748         AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
749 fi
750
751 AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
752         fc_cv_have_solaris_atomic_ops=false
753         AC_TRY_LINK([
754                 #include <atomic.h>
755                 /* This requires Solaris Studio 12.2 or newer: */
756                 #include <mbarrier.h>
757                 void memory_barrier (void) { __machine_rw_barrier (); }
758                 int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
759                 void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
760                 ], [], fc_cv_have_solaris_atomic_ops=true
761         )
762 ])
763 if $fc_cv_have_solaris_atomic_ops; then
764         AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
765 fi
766
767 if test "$os_win32" = no && ! $have_pthread; then
768         AC_CHECK_HEADERS(sched.h)
769         AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
770 fi
771
772 have_pthread=false
773 if test "$os_win32" = no; then
774         AX_PTHREAD([have_pthread=true])
775 fi
776 if $have_pthread; then
777         LIBS="$PTHREAD_LIBS $LIBS"
778         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
779         CC="$PTHREAD_CC"
780         AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
781 fi
782 AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
783
784
785 dnl ===========================================================================
786
787 #
788 # Let people not build/install docs if they don't have docbook
789 #
790
791 AC_ARG_ENABLE(docbook,
792         [AS_HELP_STRING([--disable-docbook],
793                 [Disable building docs with docbook2html (default: no)])],,)
794
795 if test x$enable_docbook != xno; then
796         AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
797 fi
798
799 AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
800
801 default_docs="yes"
802 #
803 # Check if docs exist or can be created
804 #
805 if test x$HASDOCBOOK = xno; then
806         if test -f $srcdir/doc/fonts-conf.5; then
807                 :
808         else
809                 default_docs="no"
810         fi
811 fi
812
813 AC_ARG_ENABLE(docs,
814         [AC_HELP_STRING([--disable-docs],
815                         [Don't build and install documentation])],
816         ,
817         enable_docs=$default_docs)
818
819 AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
820
821 if test "x$enable_docs" = xyes; then
822         tmp=funcs.$$
823         cat $srcdir/doc/*.fncs | awk '
824         /^@TITLE@/      { if (!done) { printf ("%s\n", $2); done = 1; } }
825         /^@FUNC@/       { if (!done) { printf ("%s\n", $2); done = 1; } }
826         /^@@/           { done = 0; }' > $tmp
827         DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
828         echo DOCMAN3 $DOCMAN3
829         rm -f $tmp
830 else
831         DOCMAN3=""
832 fi
833 AC_SUBST(DOCMAN3)
834
835 dnl ===========================================================================
836 default_cache_build="yes"
837 if test $cross_compiling = "yes"; then
838         default_cache_build="no"
839 fi
840 AC_ARG_ENABLE(cache-build,
841         [AC_HELP_STRING([--disable-cache-build],
842                         [Don't run fc-cache during the build])],
843         ,
844         enable_cache_build=$default_cache_build)
845
846 AM_CONDITIONAL(ENABLE_CACHE_BUILD, test "x$enable_cache_build" = xyes)
847
848
849 dnl Figure out what cache format suffix to use for this architecture
850 AC_C_BIGENDIAN
851 AC_CHECK_SIZEOF([void *])
852 AC_CHECK_ALIGNOF([double])
853 AC_CHECK_ALIGNOF([void *])
854
855 dnl include the header file for workaround of miscalculating size on autoconf
856 dnl particularly for fat binaries
857 AH_BOTTOM([#include "config-fixups.h"])
858
859 dnl
860 dnl
861 AC_SUBST(PKGCONFIG_REQUIRES)
862 AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY)
863
864 dnl
865 AC_CONFIG_FILES([
866 Makefile
867 fontconfig/Makefile
868 fc-lang/Makefile
869 fc-case/Makefile
870 src/Makefile
871 conf.d/Makefile
872 fc-cache/Makefile
873 fc-cat/Makefile
874 fc-conflist/Makefile
875 fc-list/Makefile
876 fc-match/Makefile
877 fc-pattern/Makefile
878 fc-query/Makefile
879 fc-scan/Makefile
880 fc-validate/Makefile
881 doc/Makefile
882 doc/version.sgml
883 its/Makefile
884 po/Makefile.in
885 po-conf/Makefile.in
886 test/Makefile
887 fontconfig.pc
888 fontconfig-zip
889 ])
890 AC_OUTPUT