dnl 
dnl  fontconfig/configure.in
dnl 
dnl  Copyright © 2003 Keith Packard
dnl 
dnl  Permission to use, copy, modify, distribute, and sell this software and its
dnl  documentation for any purpose is hereby granted without fee, provided that
dnl  the above copyright notice appear in all copies and that both that
dnl  copyright notice and this permission notice appear in supporting
dnl  documentation, and that the name of the author(s) not be used in
dnl  advertising or publicity pertaining to distribution of the software without
dnl  specific, written prior permission.  The authors make no
dnl  representations about the suitability of this software for any purpose.  It
dnl  is provided "as is" without express or implied warranty.
dnl 
dnl  THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
dnl  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
dnl  EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
dnl  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
dnl  DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
dnl  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
dnl  PERFORMANCE OF THIS SOFTWARE.
dnl
dnl Process this file with autoconf to create configure.

AC_INIT(fonts.dtd)

dnl ==========================================================================
dnl                               Versioning              
dnl ==========================================================================

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.9.0)
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])

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=6
LIBT_REVISION=0
AC_SUBST(LIBT_CURRENT)
AC_SUBST(LIBT_REVISION)
LIBT_AGE=5

LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
AC_SUBST(LIBT_VERSION_INFO)

LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
AC_SUBST(LIBT_CURRENT_MINUS_AGE)

dnl ==========================================================================

AC_CONFIG_HEADERS(config.h)

AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
AC_PROG_MAKE_SET

dnl ==========================================================================

case "$host" in
  *-*-mingw*)
    os_win32=yes
    ;;
  *)
    os_win32=no
esac
AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")

if test "$os_win32" = "yes"; then
  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
fi
AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)

WARN_CFLAGS=""
if test "x$GCC" = "xyes"; then
	WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
	-Wmissing-prototypes -Wmissing-declarations \
	-Wnested-externs -fno-strict-aliasing"
	AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
	[Can use #warning in C files])
fi
AC_SUBST(WARN_CFLAGS)


dnl ==========================================================================

AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)

dnl ==========================================================================

AC_ARG_WITH(arch,      [  --with-arch=ARCH      Force architecture to ARCH], arch="$withval", arch=auto)

if test "x$arch" != xauto; then
	AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
fi


dnl ==========================================================================

# Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
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])

#
# Checks for iconv
#
AC_MSG_CHECKING([for a usable iconv])
ICONV_LIBS=""
AC_TRY_LINK([#include <iconv.h>],
	    [iconv_open ("from", "to");],
	    [use_iconv=1],
	    [use_iconv=0])
if test x$use_iconv = x1; then
	AC_MSG_RESULT([libc])
else
	# try using libiconv
	fontconfig_save_libs="$LIBS"
	LIBS="$LIBS -liconv"

	AC_TRY_LINK([#include <iconv.h>],
		    [iconv_open ("from", "to");],
		    [use_iconv=1],
		    [use_iconv=0])
	
	if test x$use_iconv = x1; then
		ICONV_LIBS="-liconv"
		AC_MSG_RESULT([libiconv])
	else
		AC_MSG_RESULT([no])
	fi

	LIBS="$fontconfig_save_libs"
fi
AC_SUBST(ICONV_LIBS)
AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])

#
# Checks for FreeType
#

AC_ARG_WITH(freetype-config, [  --with-freetype-config=PROG   Use FreeType configuration program PROG], freetype_config=$withval, freetype_config=yes)

if test "$freetype_config" = "yes"; then 
	AC_PATH_PROG(ft_config,freetype-config,no)
	if test "$ft_config" = "no"; then
		AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/])
	fi
else
	ft_config="$freetype_config"
fi

FREETYPE_CFLAGS="`$ft_config --cflags`"
FREETYPE_LIBS="`$ft_config --libs`"

AC_SUBST(FREETYPE_LIBS)
AC_SUBST(FREETYPE_CFLAGS)

fontconfig_save_libs="$LIBS"
fontconfig_save_cflags="$CFLAGS"
LIBS="$LIBS $FREETYPE_LIBS"
CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Select_Size)
AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
		HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
		HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
[#include <ft2build.h>
#include FT_FREETYPE_H])
AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
		   [FT_Bitmap_Size structure includes y_ppem field])
CFLAGS="$fontconfig_save_cflags"
LIBS="$fontconfig_save_libs"

#
# Check expat configuration
#

AC_ARG_WITH(expat,             [  --with-expat=DIR              Use Expat in DIR], expat=$withval, expat=yes)
AC_ARG_WITH(expat-includes,    [  --with-expat-includes=DIR     Use Expat includes in DIR], expat_includes=$withval, expat_includes=yes)
AC_ARG_WITH(expat-lib,         [  --with-expat-lib=DIR          Use Expat library in DIR], expat_lib=$withval, expat_lib=yes)

if test "$enable_libxml2" != "yes"; then
	case "$expat" in
	no)
	;;
	*)
		case "$expat_includes" in
		yes)
			case "$expat" in
			yes)
				;;
			*)
				EXPAT_CFLAGS="-I$expat/include"
				;;
			esac
			;;
		no)
			EXPAT_CFLAGS=""
			;;
		*)
			EXPAT_CFLAGS="-I$expat_includes"
			;;
		esac
		case "$expat_lib" in
		yes)
			case "$expat" in
			yes)
				EXPAT_LIBS="-lexpat"
				;;
			*)
				EXPAT_LIBS="-L$expat/lib -lexpat"
				;;
			esac
			;;
		no)
			;;
		*)
			EXPAT_LIBS="-L$expat_lib -lexpat"
			;;
		esac

		expatsaved_CPPFLAGS="$CPPFLAGS"
		CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
		expatsaved_LIBS="$LIBS"
		LIBS="$LIBS $EXPAT_LIBS"

		AC_CHECK_HEADER(expat.h)
		case "$ac_cv_header_expat_h" in
		no)
			AC_CHECK_HEADER(xmlparse.h)
			case "$ac_cv_header_xmlparse_h" in
			no)
				have_expat_header=no;
				;;
			yes)
				HAVE_XMLPARSE_H=1
				AC_SUBST(HAVE_XMLPARSE_H)
				AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
				[Use xmlparse.h instead of expat.h])
				have_expat_header=yes
				;;
			esac
			;;
		yes)
			have_expat_header=yes
			;;
		esac
		case "$have_expat_header" in
		no)
			expat=no
			;;
		yes)
			AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
			case "$ac_cv_func_XML_SetDoctypeDeclHandler" in
			yes)
				HAVE_EXPAT=1
				AC_SUBST(HAVE_EXPAT)
				AC_DEFINE_UNQUOTED(HAVE_EXPAT,$HAVE_EXPAT,
				[Found a useable expat library])
				;;
			*)
				expat=no
				;;
			esac
			;;
		esac
		CPPFLAGS="$expatsaved_CPPFLAGS"
		LIBS="$expatsaved_LIBS"
		;;
	esac
	
	AC_SUBST(EXPAT_CFLAGS)
	AC_SUBST(EXPAT_LIBS)

	case "$expat" in
	no)
		EXPAT_CFLAGS=""
		EXPAT_LIBS=""

		AC_MSG_WARN([Cannot find usable expat library. Trying to use libxml2 as fallback.])
		;;
	esac
fi

#
# Check libxml2 configuration
#

AC_ARG_ENABLE(libxml2,         [  --enable-libxml2              Use libxml2 instead of Expat])

PKG_PROG_PKG_CONFIG

if test "$enable_libxml2" = "yes" -o "$expat" = "no"; then
    PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
    AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])

    AC_SUBST(LIBXML2_CFLAGS)
    AC_SUBST(LIBXML2_LIBS)
fi

#
# Set default font directory
#

AC_ARG_WITH(default-fonts,     [  --with-default-fonts=DIR      Use fonts from DIR when config is busted], default_fonts="$withval", default_fonts=yes)

case "$default_fonts" in
yes)
	if test "$os_win32" = "yes"; then
		FC_DEFAULT_FONTS="WINDOWSFONTDIR"
		AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR", 
				   [Windows font directory])
	else
		FC_DEFAULT_FONTS="/usr/share/fonts"
		AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts", 
				   [System font directory])
	fi
	;;
*)
	FC_DEFAULT_FONTS="$default_fonts"
	AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
			   [System font directory])
	;;
esac

AC_SUBST(FC_DEFAULT_FONTS)

#
# Add more fonts if available.  By default, add only the directories
# with outline fonts; those with bitmaps can be added as desired in
# local.conf or ~/.fonts.conf
#
AC_ARG_WITH(add-fonts,        [  --with-add-fonts=DIR1,DIR2,...Find additional fonts in DIR1,DIR2,... ], add_fonts="$withval", add_fonts=yes)

case "$add_fonts" in
yes)
	FC_ADD_FONTS=""
	for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
		case x"$FC_ADD_FONTS" in
		x)
			sub="$dir/fonts"
			if test -d "$sub"; then
				case x$FC_ADD_FONTS in
				x)
					FC_ADD_FONTS="$sub"
					;;
				*)
					FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
					;;
				esac
			fi
			;;
		esac
	done
	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
	;;
no)
	FC_ADD_FONTS=""
	;;
*)
	FC_ADD_FONTS="$add_fonts"
	AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
	;;
esac

AC_SUBST(FC_ADD_FONTS)

FC_FONTPATH=""

case "$FC_ADD_FONTS" in
"")
	;;
*)
	FC_FONTPATH=`echo $FC_ADD_FONTS | 
			sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
	;;
esac

AC_SUBST(FC_FONTPATH)

#
# Set default cache directory path
#
AC_ARG_WITH(cache-dir,         [  --with-cache-dir=DIR           Use DIR to store cache files (default LOCALSTATEDIR/cache/fontconfig)], fc_cachedir="$withval", fc_cachedir=yes)

case $fc_cachedir in
no|yes)
	if test "$os_win32" = "yes"; then
		fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
	else
		fc_cachedir='${localstatedir}/cache/${PACKAGE}'
	fi
	;;
*)
	;;
esac
AC_SUBST(fc_cachedir)
FC_CACHEDIR=${fc_cachedir}
AC_SUBST(FC_CACHEDIR)

FC_FONTDATE=`LC_ALL=C date`

AC_SUBST(FC_FONTDATE)

AC_ARG_WITH(confdir,           [  --with-confdir=DIR            Use DIR to store configuration files (default SYSCONFDIR/fonts)], confdir="$withval", confdir=yes)

#
# Set CONFDIR and FONTCONFIG_PATH
#

case "$confdir" in
no|yes)
	confdir='${sysconfdir}'/fonts
	;;
*)
	;;
esac
AC_SUBST(confdir)
CONFDIR=${confdir}
AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR",[Font configuration directory])
AC_SUBST(CONFDIR)

#
# Let people not build/install docs if they don't have docbook
#

AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)

AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)

default_docs="yes"
#
# Check if docs exist or can be created
#
if test x$HASDOCBOOK = xno; then
	if test -f $srcdir/doc/fonts-conf.5; then
		:
	else
		default_docs="no"
	fi
fi

AC_ARG_ENABLE(docs,           [  --disable-docs                Don't build and install documentation],,enable_docs=$default_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; } }
	/^@FUNC@/	{ if (!done) { printf ("%s\n", $2); done = 1; } }
	/^@@/		{ done = 0; }' > $tmp
	DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
	echo DOCMAN3 $DOCMAN3
	rm -f $tmp
else
	DOCSRC=""
	DOCMAN3=""
fi

AC_SUBST(DOCSRC)
AC_SUBST(DOCMAN3)


dnl Figure out what cache format suffix to use for this architecture
AC_C_BIGENDIAN
AC_CHECK_SIZEOF([void *])
AC_CHECK_ALIGNOF([double])



AC_OUTPUT([
Makefile
fontconfig/Makefile
fc-lang/Makefile
fc-glyphname/Makefile
fc-case/Makefile
src/Makefile
conf.d/Makefile
fc-cache/Makefile
fc-cat/Makefile
fc-list/Makefile
fc-match/Makefile
fc-pattern/Makefile
fc-query/Makefile
fc-scan/Makefile
doc/Makefile
doc/version.sgml
test/Makefile
fontconfig.spec
fontconfig.pc
fontconfig-zip
])
