Defaulting <cachedir> to LOCAL_APPDATA_FONTCONFIG_CACHE for Win32 build
[platform/upstream/fontconfig.git] / configure.ac
index 4de2d08..ff79698 100644 (file)
@@ -24,7 +24,6 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.61)
-AC_INIT(fonts.dtd)
 
 dnl ==========================================================================
 dnl                               Versioning              
@@ -34,7 +33,8 @@ dnl This is the package version number, not the shared library
 dnl version.  This same version number must appear in fontconfig/fontconfig.h
 dnl Yes, it is a pain to synchronize version numbers.  Unfortunately, it's
 dnl not possible to extract the version number here from fontconfig.h
-AM_INIT_AUTOMAKE(fontconfig, 2.10.1)
+AC_INIT([fontconfig], [2.11.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig])
+AM_INIT_AUTOMAKE([1.11 parallel-tests dist-bzip2])
 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
 
 dnl libtool versioning
@@ -42,11 +42,11 @@ dnl libtool versioning
 dnl bump revision when fixing bugs
 dnl bump current and age, reset revision to zero when adding APIs
 dnl bump current, leave age, reset revision to zero when changing/removing APIS
-LIBT_CURRENT=7
-LIBT_REVISION=2
+LIBT_CURRENT=9
+LIBT_REVISION=0
 AC_SUBST(LIBT_CURRENT)
 AC_SUBST(LIBT_REVISION)
-LIBT_AGE=6
+LIBT_AGE=8
 
 LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
 AC_SUBST(LIBT_VERSION_INFO)
@@ -54,17 +54,27 @@ AC_SUBST(LIBT_VERSION_INFO)
 LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
 AC_SUBST(LIBT_CURRENT_MINUS_AGE)
 
+PKGCONFIG_REQUIRES=
+PKGCONFIG_REQUIRES_PRIVATELY=
+
 dnl ==========================================================================
 
 AC_CONFIG_HEADERS(config.h)
+AC_CONFIG_MACRO_DIR([m4])
 
 AC_PROG_CC
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_LIBTOOL_WIN32_DLL
 AM_PROG_LIBTOOL
 AC_PROG_MAKE_SET
 PKG_PROG_PKG_CONFIG
+m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig))
+
+AM_MISSING_PROG([GIT], [git])
+AM_MISSING_PROG([GPERF], [gperf])
 
 AC_MSG_CHECKING([for RM macro])
 _predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
@@ -104,6 +114,8 @@ AC_SUBST(WARN_CFLAGS)
 
 dnl ==========================================================================
 
+AX_CC_FOR_BUILD()
+AC_ARG_VAR(CC_FOR_BUILD, [build system C compiler])
 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
 AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = "yes")
 
@@ -125,6 +137,7 @@ dnl ==========================================================================
 AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_CHECK_HEADERS([fcntl.h regex.h stdlib.h string.h unistd.h sys/vfs.h sys/statfs.h sys/param.h sys/mount.h])
+AX_CREATE_STDINT_H([src/fcstdint.h])
 
 # Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
@@ -135,7 +148,44 @@ AC_TYPE_PID_T
 # Checks for library functions.
 AC_FUNC_VPRINTF
 AC_FUNC_MMAP
-AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r regcomp regerror regexec regfree posix_fadvise fstatvfs fstatfs])
+AC_CHECK_FUNCS([link mkstemp mkostemp _mktemp_s mkdtemp getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r regcomp regerror regexec regfree fstatvfs fstatfs lstat])
+
+dnl AC_CHECK_FUNCS doesn't check for header files.
+dnl posix_fadvise() may be not available in older libc.
+AC_CHECK_SYMBOL([posix_fadvise], [fcntl.h], [fc_func_posix_fadvise=1], [fc_func_posix_fadvise=0])
+AC_DEFINE_UNQUOTED([HAVE_POSIX_FADVISE], [$fc_func_posix_fadvise], [Define to 1 if you have the 'posix_fadivse' function.])
+if test "$os_win32" = "no"; then
+       AC_MSG_CHECKING([for scandir])
+       fc_saved_CFLAGS="$CFLAGS"
+       CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
+       AC_TRY_COMPILE([
+               #include <dirent.h>
+               int main(void);
+       ], [
+               int (* comp) (const struct dirent **, const struct dirent **) = 0;
+               struct dirent **d;
+               return scandir(".", &d, 0, comp) >= 0;
+       ], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_SCANDIR], [1], [Define to 1 if you have the 'scandir' function.])
+       ], [
+               AC_TRY_COMPILE([
+                       #include <dirent.h>
+                       int main(void);
+               ], [
+                       int (* comp) (const void *, const void *) = 0;
+                       struct dirent **d;
+                       return scandir(".", &d, 0, comp) >= 0;
+               ], [
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE([HAVE_SCANDIR_VOID_P], [1], [Define to 1 if you have the 'scandir' function with int (* compar)(const void *, const void *)])
+               ],[
+                       AC_MSG_ERROR([
+*** No scandir function available.])
+               ])
+       ])
+fi
+CFLAGS="$fc_saved_CFLAGS"
 
 #
 if test "x$ac_cv_func_fstatvfs" = "xyes"; then
@@ -225,13 +275,14 @@ if test "x$enable_iconv" != "xno"; then
                AC_TRY_LINK([#include <iconv.h>],
                        [iconv_open ("from", "to");],
                        [iconv_type="libiconv"
-                        use_iconv=1],
+                        use_iconv=1
+                        ICONV_CFLAGS="$libiconv_cflags"
+                        ICONV_LIBS="$libiconv_libs"
+                        ],
                        [use_iconv=0])
 
                CFLAGS="$iconvsaved_CFLAGS"
                LIBS="$iconvsaved_LIBS"
-               ICONV_CFLAGS="$libiconv_cflags"
-               ICONV_LIBS="$libiconv_libs"
        fi
        if test "x$use_iconv" = "x0"; then
                AC_TRY_LINK([#include <iconv.h>],
@@ -251,6 +302,7 @@ AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
 # Checks for FreeType
 #
 PKG_CHECK_MODULES(FREETYPE, freetype2)
+PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES freetype2"
 
 AC_SUBST(FREETYPE_LIBS)
 AC_SUBST(FREETYPE_CFLAGS)
@@ -310,6 +362,8 @@ if test "$enable_libxml2" != "yes"; then
                else
                        EXPAT_LIBS="-lexpat"
                fi
+       else
+               PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY expat"
        fi
 
        expatsaved_CPPFLAGS="$CPPFLAGS"
@@ -351,6 +405,7 @@ AC_ARG_ENABLE(libxml2,
 
 if test "$enable_libxml2" = "yes"; then
     PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
+    PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY libxml-2.0"
     AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
 
     AC_SUBST(LIBXML2_CFLAGS)
@@ -466,7 +521,7 @@ AC_ARG_WITH(cache-dir,
 case $fc_cachedir in
 no|yes)
        if test "$os_win32" = "yes"; then
-               fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
+               fc_cachedir="LOCAL_APPDATA_FONTCONFIG_CACHE"
        else
                fc_cachedir='${localstatedir}/cache/${PACKAGE}'
        fi
@@ -523,7 +578,7 @@ no|yes)
 esac
 case "$configdir" in
 no|yes)
-       configdir='${baseconfigdir}'/conf.d
+       configdir='${BASECONFIGDIR}'/conf.d
        ;;
 *)
        ;;
@@ -540,15 +595,68 @@ TEMPLATEDIR=${templatedir}
 BASECONFIGDIR=${baseconfigdir}
 CONFIGDIR=${configdir}
 XMLDIR=${xmldir}
-AC_SUBST(templatedir)
 AC_SUBST(TEMPLATEDIR)
-AC_SUBST(baseconfigdir)
 AC_SUBST(BASECONFIGDIR)
-AC_SUBST(configdir)
 AC_SUBST(CONFIGDIR)
-AC_SUBST(xmldir)
 AC_SUBST(XMLDIR)
 
+
+dnl ===========================================================================
+
+#
+# Thread-safety primitives
+#
+
+AC_CACHE_CHECK([for Intel atomic primitives], fc_cv_have_intel_atomic_primitives, [
+       fc_cv_have_intel_atomic_primitives=false
+       AC_TRY_LINK([
+               void memory_barrier (void) { __sync_synchronize (); }
+               int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); }
+               int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); }
+               void mutex_unlock (int *m) { __sync_lock_release (m); }
+               ], [], fc_cv_have_intel_atomic_primitives=true
+       )
+])
+if $fc_cv_have_intel_atomic_primitives; then
+       AC_DEFINE(HAVE_INTEL_ATOMIC_PRIMITIVES, 1, [Have Intel __sync_* atomic primitives])
+fi
+
+AC_CACHE_CHECK([for Solaris atomic operations], fc_cv_have_solaris_atomic_ops, [
+       fc_cv_have_solaris_atomic_ops=false
+       AC_TRY_LINK([
+               #include <atomic.h>
+               /* This requires Solaris Studio 12.2 or newer: */
+               #include <mbarrier.h>
+               void memory_barrier (void) { __machine_rw_barrier (); }
+               int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); }
+               void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); }
+               ], [], fc_cv_have_solaris_atomic_ops=true
+       )
+])
+if $fc_cv_have_solaris_atomic_ops; then
+       AC_DEFINE(HAVE_SOLARIS_ATOMIC_OPS, 1, [Have Solaris __machine_*_barrier and atomic_* operations])
+fi
+
+if test "$os_win32" = no && ! $have_pthread; then
+       AC_CHECK_HEADERS(sched.h)
+       AC_SEARCH_LIBS(sched_yield,rt,AC_DEFINE(HAVE_SCHED_YIELD, 1, [Have sched_yield]))
+fi
+
+have_pthread=false
+if test "$os_win32" = no; then
+       AX_PTHREAD([have_pthread=true])
+fi
+if $have_pthread; then
+       LIBS="$PTHREAD_LIBS $LIBS"
+       CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+       CC="$PTHREAD_CC"
+       AC_DEFINE(HAVE_PTHREAD, 1, [Have POSIX threads])
+fi
+AM_CONDITIONAL(HAVE_PTHREAD, $have_pthread)
+
+
+dnl ===========================================================================
+
 #
 # Let people not build/install docs if they don't have docbook
 #
@@ -578,7 +686,6 @@ AC_ARG_ENABLE(docs,
 AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
 
 if test "x$enable_docs" = xyes; then
-       DOCSRC="doc"
        tmp=funcs.$$
        cat $srcdir/doc/*.fncs | awk '
        /^@TITLE@/      { if (!done) { printf ("%s\n", $2); done = 1; } }
@@ -588,11 +695,8 @@ if test "x$enable_docs" = xyes; then
        echo DOCMAN3 $DOCMAN3
        rm -f $tmp
 else
-       DOCSRC=""
        DOCMAN3=""
 fi
-
-AC_SUBST(DOCSRC)
 AC_SUBST(DOCMAN3)
 
 
@@ -605,7 +709,13 @@ dnl include the header file for workaround of miscalculating size on autoconf
 dnl particularly for fat binaries
 AH_BOTTOM([#include "config-fixups.h"])
 
-AC_OUTPUT([
+dnl
+dnl
+AC_SUBST(PKGCONFIG_REQUIRES)
+AC_SUBST(PKGCONFIG_REQUIRES_PRIVATELY)
+
+dnl
+AC_CONFIG_FILES([
 Makefile
 fontconfig/Makefile
 fc-lang/Makefile
@@ -620,6 +730,7 @@ fc-match/Makefile
 fc-pattern/Makefile
 fc-query/Makefile
 fc-scan/Makefile
+fc-validate/Makefile
 doc/Makefile
 doc/version.sgml
 test/Makefile
@@ -627,3 +738,4 @@ fontconfig.spec
 fontconfig.pc
 fontconfig-zip
 ])
+AC_OUTPUT