dnl
dnl "$Id$"
dnl
dnl Configuration script for Mini-XML, a small XML-like file parsing library.
dnl
dnl Copyright 2003-2009 by Michael Sweet.
dnl
dnl This program is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Library General Public
dnl License as published by the Free Software Foundation; either
dnl version 2, or (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl

dnl Specify a source file from the distribution...
AC_INIT(mxml.h)

dnl Set the name of the config header file...
AC_CONFIG_HEADER(config.h)

dnl Version number...
VERSION=2.6
AC_SUBST(VERSION)
AC_DEFINE_UNQUOTED(MXML_VERSION, "Mini-XML v$VERSION")

dnl Clear default debugging options and set normal optimization by
dnl default unless the user asks for debugging specifically.
CFLAGS="${CFLAGS:=}"
CXXFLAGS="${CXXFLAGS:=}"
LDFLAGS="${LDFLAGS:=}"
AC_SUBST(LDFLAGS)
OPTIM=""
AC_SUBST(OPTIM)

AC_ARG_WITH(ansi, [  --with-ansi             set full ANSI C mode, default=no],
	use_ansi="$withval",
	use_ansi="no")

AC_ARG_WITH(archflags, [  --with-archflags        set additional architecture flags, default=none],
	ARCHFLAGS="$withval",
	ARCHFLAGS="")
AC_SUBST(ARCHFLAGS)

AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging, default=no],
if eval "test x$enable_debug = xyes"; then
 	OPTIM="-g"
fi)

AC_ARG_WITH(docdir, [  --with-docdir           set directory for documentation, default=${prefix}/share/doc/mxml],
	docdir="$withval",
	docdir="NONE")

AC_SUBST(docdir)

AC_ARG_WITH(vsnprintf, [  --with-vsnprintf        use vsnprintf emulation functions, default=auto],
	use_vsnprintf="$withval",
	use_vsnprintf="no")

dnl Get the operating system and version number...
uname=`uname`
uversion=`uname -r | sed -e '1,$s/[[^0-9]]//g'`
if test x$uname = xIRIX64; then
	uname="IRIX"
fi

dnl Checks for programs...
AC_PROG_CC
AC_PROG_CXX
AC_PROG_INSTALL
if test "$INSTALL" = "$ac_install_sh"; then
	# Use full path to install-sh script...
	INSTALL="`pwd`/install-sh -c"
fi
AC_PROG_RANLIB
AC_PATH_PROG(AR,ar)
AC_PATH_PROG(CP,cp)
AC_PATH_PROG(LN,ln)
AC_PATH_PROG(MKDIR,mkdir)
AC_PATH_PROG(RM,rm)

dnl Flags for "ar" command...
case "$uname" in
        Darwin* | *BSD*)
                ARFLAGS="-rcv"
                ;;
        *)
                ARFLAGS="crvs"
                ;;
esac

AC_SUBST(ARFLAGS)

dnl Inline functions...
AC_C_INLINE

dnl Checks for string functions.
if test "x$use_ansi" != xyes; then
	AC_CHECK_FUNCS(strdup)
fi

if test "x$use_vsnprintf" != xyes; then
	AC_CHECK_FUNCS(snprintf vsnprintf)
fi

dnl Check for "long long" support...
AC_CACHE_CHECK(for long long int, ac_cv_c_long_long,
	[if test "$GCC" = yes; then
		ac_cv_c_long_long=yes
	else
		AC_TRY_COMPILE(,[long long int i;],
			ac_cv_c_long_long=yes,
			ac_cv_c_long_long=no)
	fi])

if test $ac_cv_c_long_long = yes; then
	AC_DEFINE(HAVE_LONG_LONG)
fi

dnl Threading support
AC_ARG_ENABLE(threads, [  --enable-threads        enable multi-threading support])

have_pthread=no
PTHREAD_FLAGS=""
PTHREAD_LIBS=""

if test "x$enable_threads" != xno; then
	AC_CHECK_HEADER(pthread.h, AC_DEFINE(HAVE_PTHREAD_H))

	if test x$ac_cv_header_pthread_h = xyes; then
		dnl Check various threading options for the platforms we support
		for flag in -lpthreads -lpthread -pthread; do
        		AC_MSG_CHECKING([for pthread_create using $flag])
			SAVELIBS="$LIBS"
			LIBS="$flag $LIBS"
        		AC_TRY_LINK([#include <pthread.h>],
				[pthread_create(0, 0, 0, 0);],
        			have_pthread=yes)
        		AC_MSG_RESULT([$have_pthread])
			LIBS="$SAVELIBS"

			if test $have_pthread = yes; then
				PTHREAD_FLAGS="-D_THREAD_SAFE -D_REENTRANT"
				PTHREAD_LIBS="$flag"

				# Solaris requires -D_POSIX_PTHREAD_SEMANTICS to
				# be POSIX-compliant... :(
				if test $uname = SunOS; then
					PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS"
				fi
				break
			fi
		done
	fi
fi

AC_SUBST(PTHREAD_FLAGS)
AC_SUBST(PTHREAD_LIBS)

dnl Shared library support...
DSO="${DSO:=:}"
DSOFLAGS="${DSOFLAGS:=}"

AC_ARG_ENABLE(shared, [  --enable-shared         turn on shared libraries, default=no])

if test x$enable_shared = xyes; then
	AC_MSG_CHECKING(for shared library support)
	PICFLAG=1

	case "$uname" in
		SunOS* | UNIX_S*)
			AC_MSG_RESULT(yes)
			LIBMXML="libmxml.so.1.4"
			DSO="\$(CC)"
			DSOFLAGS="$DSOFLAGS -Wl,-h,libmxml.so.1 -G -R\$(libdir) \$(OPTIM)"
			LDFLAGS="$LDFLAGS -R\$(libdir)"
                	;;

		HP-UX*)
			AC_MSG_RESULT(yes)
			LIBMXML="libmxml.sl.1"
			DSO="ld"
			DSOFLAGS="$DSOFLAGS -b -z +h libmxml.sl.1 +s +b \$(libdir)"
			LDFLAGS="$LDFLAGS -Wl,+s,+b,\$(libdir)"
			;;

		IRIX)
			AC_MSG_RESULT(yes)
			LIBMXML="libmxml.so.1.4"
			DSO="\$(CC)"
			DSOFLAGS="$DSOFLAGS -Wl,-rpath,\$(libdir),-set_version,sgi1.0,-soname,libmxml.so.1 -shared \$(OPTIM)"
			;;

		OSF1* | Linux | GNU)
			AC_MSG_RESULT(yes)
			LIBMXML="libmxml.so.1.4"
			DSO="\$(CC)"
			DSOFLAGS="$DSOFLAGS -Wl,-soname,libmxml.so.1,-rpath,\$(libdir) -shared \$(OPTIM)"
                        LDFLAGS="$LDFLAGS -Wl,-rpath,\$(libdir)"
			;;

		*BSD*)
			AC_MSG_RESULT(yes)
			LIBMXML="libmxml.so.1.4"
			DSO="\$(CC)"
			DSOFLAGS="$DSOFLAGS -Wl,-soname,libmxml.so.1,-R\$(libdir) -shared \$(OPTIM)"
			LDFLAGS="$LDFLAGS -Wl,-R\$(libdir)"
                        ;;

		Darwin*)
			AC_MSG_RESULT(yes)
			LIBMXML="libmxml.1.dylib"
			DSO="\$(CC)"
			DSOFLAGS="$DSOFLAGS \$(RC_CFLAGS) -dynamiclib -lc"
			;;

		*)
			AC_MSG_RESULT(no)
			AC_MSG_WARN(shared libraries not supported on this platform.)
			PICFLAG=0
			LIBMXML="libmxml.a"
			;;
	esac
else
	PICFLAG=0
	LIBMXML="libmxml.a"
fi

AC_SUBST(DSO)
AC_SUBST(DSOFLAGS)
AC_SUBST(LIBMXML)
AC_SUBST(PICFLAG)

dnl Add -Wall for GCC...
if test -n "$GCC"; then
	CFLAGS="-Wall $CFLAGS"

	if test "x$OPTIM" = x; then
		OPTIM="-Os -g"
	fi

	if test "x$use_ansi" = xyes; then
		CFLAGS="-ansi -pedantic $CFLAGS"
	fi

	if test $PICFLAG = 1 -a $uname != AIX; then
    		OPTIM="-fPIC $OPTIM"
	fi
else
	case $uname in
		HP-UX*)
			CFLAGS="-Ae $CFLAGS"

			if test "x$OPTIM" = x; then
				OPTIM="-O"
			fi

			OPTIM="+DAportable $OPTIM"

			if test $PICFLAG = 1; then
				OPTIM="+z $OPTIM"
			fi
			;;

		UNIX_SVR* | SunOS*)
			if test "x$OPTIM" = x; then
				OPTIM="-O"
			fi

			if test $PICFLAG = 1; then
				OPTIM="-KPIC $OPTIM"
			fi
			;;

		*)
			if test "x$OPTIM" = x; then
				OPTIM="-O"
			fi
			;;
	esac
fi

dnl Fix "prefix" variable if it hasn't been specified...
if test "$prefix" = "NONE"; then
	prefix="/usr/local"
fi

dnl Fix "exec_prefix" variable if it hasn't been specified...
if test "$exec_prefix" = "NONE"; then
	exec_prefix="$prefix"
fi

dnl Fix "docdir" variable if it hasn't been specified...
if test "$docdir" = "NONE"; then
	docdir="$datadir/doc/mxml"
fi

dnl Fix "mandir" variable if it hasn't been specified...
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/usr"; then
	case "$uname" in
        	*BSD* | Darwin* | Linux*)
        		# BSD, Darwin (MacOS X), and Linux
        		mandir="/usr/share/man"
        		;;
        	IRIX*)
        		# SGI IRIX
        		mandir="/usr/share/catman/u_man"
        		;;
        	*)
        		# All others
        		mandir="/usr/man"
        		;;
	esac
fi

dnl pkg-config stuff...
if test "$includedir" != /usr/include; then
	PC_CFLAGS="-I$includedir"
else
	PC_CFLAGS=""
fi

if test "$libdir" != /usr/lib; then
	PC_LIBS="-L$libdir -lmxml"
else
	PC_LIBS="-lmxml"
fi

AC_SUBST(PC_CFLAGS)
AC_SUBST(PC_LIBS)

dnl Output the makefile, etc...
AC_OUTPUT(Makefile mxml.list mxml.pc)

dnl
dnl End of "$Id$".
dnl
