dnl $Id$
dnl
dnl Process this file with autoconf to produce a configure script.
AC_INIT(config.h.in)

AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE(mt-daapd,0.2.1.1)

dnl Checks for programs.
AC_PROG_CC
dnl AC_PROG_YACC
dnl AM_PROG_LEX

AC_CANONICAL_HOST

AC_CHECK_HEADERS([sys/wait.h])
AC_CHECK_HEADERS([sys/param.h])
AC_CHECK_FUNCS(strptime)
AC_CHECK_FUNCS(strtok_r)
AM_CONDITIONAL(COND_REND_OSX,false)

if test "x$prefix" != xNONE -a "x$prefix" != "x/usr"; then
    CONFFILE="$prefix/etc/mt-daapd.conf"
else 
    if test "x$prefix" == "xNONE"; then
        CONFFILE="/usr/local/etc/mt-daapd.conf"
    else
        CONFFILE="/etc/mt-daapd.conf"
    fi
fi


AC_DEFINE_UNQUOTED(CONFFILE,"${CONFFILE}",Where the config file is)

rend_posix=true
db_sqlite=false
db_sqlite3=false

STATIC_LIBS=no
CPPFLAGS="${CPPFLAGS} -g -Wall"

dnl fix freebsd's broken (?) libpthread
AC_CHECK_LIB(c_r,pthread_creat,LIBS="${LIBS} -lc_r", [
  AC_CHECK_LIB(pthread,pthread_create,LIBS="${LIBS} -lpthread") ])

AC_ARG_ENABLE(sqlite,[  --enable-sqlite         Enable the sqlite db backend],
			[ case "${enableval}" in
			yes) db_sqlite=true; have_sql=true;;
			no) db_sqlite=false;;
			*) AC_MSG_ERROR(bad value ${enableval} for --enable-sqlite);;
			esac ])

AC_ARG_ENABLE(sqlite3,[  --enable-sqlite3        Enable sqlite3 db backend],
			[ case "${enableval}" in
			yes) db_sqlite3=true; have_sql=true;;
			no) db_sqlite3=false;;
			*) AC_MSG_ERROR(bad value ${enableval} for --enable-sqlite3);;
			esac ])

AC_ARG_ENABLE(mdns,[  --enable-mdns           Enable mDNS support],
		      [ case "${enableval}" in
		      yes) ;;
		      no) rend_posix=false; rend_howl=false; CPPFLAGS="${CPPFLAGS} -DWITHOUT_MDNS";;
		      *) AC_MSG_ERROR(bad value ${enableval} for --disable-mdns);;
		      esac ])

AC_ARG_ENABLE(nslu2,[  --enable-nslu2          Build for NSLU2/uNSLUng], 
		       CFLAGS="${CFLAGS} -DNSLU2")

AC_ARG_ENABLE(howl,[  --enable-howl       Use howl 0.9.2 or later],
		      [ case "${enableval}" in
                        yes) rend_howl=true; rend_posix=false; LIBS="${LIBS} -lhowl";
			CPPFLAGS="${CPPFLAGS} -DWITH_HOWL";;
		        no)  rend_howl=false;;
		        *)   AC_MSG_ERROR(bad value ${enableval} for --enable-howl);;
		      esac ])

AC_ARG_ENABLE(oggvorbis,[  --enable-oggvorbis      Enable Ogg/Vorbis support],
			   [ case "${enableval}" in
			   yes) use_oggvorbis=true;
                           CPPFLAGS="${CPPFLAGS} -DOGGVORBIS";;
			   no) use_oggvorbis=false;;
			   *) AC_MSG_ERROR(bad value ${enableval} for --enable-oggvorbis);;
			   esac ])

AC_ARG_ENABLE(flac,[  --enable-flac      Enable FLAC support],
                      use_flac=true;
                      CPPFLAGS="${CPPFLAGS} -DFLAC")

AC_ARG_ENABLE(musepack,[  --enable-musepack       Enable Musepack support],
                      use_musepack=true;
                      CPPFLAGS="${CPPFLAGS} -DMUSEPACK")

AC_ARG_ENABLE(gdbm,[  --enable-gdbm       Enable gdbm support],
                      use_gdbm=true;
                      CPPFLAGS="${CPPFLAGS} -DGDBM")


AM_CONDITIONAL(COND_REND_HOWL, test x$rend_howl = xtrue)
AM_CONDITIONAL(COND_REND_POSIX, test x$rend_posix = xtrue)
AM_CONDITIONAL(COND_OGGVORBIS, test x$use_oggvorbis = xtrue)
AM_CONDITIONAL(COND_FLAC, test x$use_flac = xtrue)
AM_CONDITIONAL(COND_MUSEPACK, test x$use_musepack = xtrue)
AM_CONDITIONAL(COND_SQLITE,test x$db_sqlite = xtrue)
AM_CONDITIONAL(COND_SQLITE3,test x$db_sqlite3 = xtrue)
AM_CONDITIONAL(COND_GDBM,test x$use_gdbm = xtrue)
AM_CONDITIONAL(COND_NEED_STRCASESTR,false)
AM_CONDITIONAL(COND_NEED_STRSEP,false)

if test x$have_sql = xtrue; then
   CPPFLAGS="${CPPFLAGS} -DHAVE_SQL"
fi

if test x$db_sqlite = xtrue -o x$db_sqlite3 = xtrue; then
   AM_CONDITIONAL(COND_SQL,true)
fi

if test x$db_sqlite = xfalse -a x$db_sqlite3 = xfalse; then
    echo "Must use either --enable-sqlite or --enable-sqlite3"
    exit;
fi

dnl Darwin's stupid cpp preprocessor....
echo Host type is $host
CPPFLAGS="$CPPFLAGS -DHOST='\"$host\"'"

dnl
dnl The apple mDNS stuff wants these compile flags.
dnl

case $host in
*solaris*)
	CPPFLAGS="$CPPFLAGS -DNOT_HAVE_SA_LEN -D_XPG4_2"
	CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__ -DHAVE_BROKEN_RECVIF_NAME"
	CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
	LIBS="${LIBS} -lnsl -lsocket";;	
*freebsd*)
	CPPFLAGS="$CPPFLAGS -DFREEBSD";;
*linux*)
	CPPFLAGS="$CPPFLAGS -DNOT_HAVE_SA_LEN";;
*openbsd*)
	CPPFLAGS="$CPPFLAGS -DHAVE_BROKEN_RECVDSTADDR";;
*darwin*)
	CPPFLAGS="$CPPFLAGS -no-cpp-precomp -DMAC"
	LDFLAGS="$LDFLAGS -framework CoreFoundation"	

	AM_CONDITIONAL(COND_REND_OSX,true)
	AM_CONDITIONAL(COND_REND_HOWL,false)
	AM_CONDITIONAL(COND_REND_POSIX,false);;
esac


dnl Checks for libraries.
AC_ARG_WITH(static-libs,
	[--with-static-libs[[=DIR]]            use static libs in DIR],[
	if test "$withval" != "no" -a "$withval" != "yes"; then
	 Z_DIR=$withval
	 STATIC_LIBS="$withval"
	fi
])

AC_ARG_WITH(howl-includes,
	[--with-howl-includes[[=DIR]]          use howl include files in DIR],[
	if test "$withval" != "no" -a "$withval" != "yes"; then
	 Z_DIR=$withval
         CPPFLAGS="${CPPFLAGS} -I$withval"
	fi
])

AC_ARG_WITH(howl-libs,
	[--with-howl-libs[[=DIR]]          use howl lib files in DIR],[
	if test "$withval" != "no" -a "$withval" != "yes"; then
	 Z_DIR=$withval
         LDFLAGS="${LDFLAGS} -L$withval"
	fi
])

AC_ARG_WITH(gdbm-includes,
	[--with-gdbm-includes[[=DIR]]          use gdbm include files in DIR],[
	if test "$withval" != "no" -a "$withval" != "yes"; then
	 Z_DIR=$withval
         CPPFLAGS="${CPPFLAGS} -I$withval"
	fi
])

AC_ARG_WITH(gdbm-libs,
	[--with-gdbm-libs[[=DIR]]          use gdbm lib files in DIR],[
	if test "$withval" != "no" -a "$withval" != "yes"; then
	 Z_DIR=$withval
         LDFLAGS="${LDFLAGS} -L$withval"
	fi
])

AC_ARG_WITH(id3tag,
	[--with-id3tag[[=DIR]]           use id3tag in DIR],[
	if test "$withval" != "no" -a "$withval" != "yes"; then
	  Z_DIR=$withval
	  CPPFLAGS="${CPPFLAGS} -I$withval/include"
	  LDFLAGS="${LDFLAGS} -L$withval/lib"
	fi
])

AC_CHECK_HEADERS(getopt.h,,)

AC_CHECK_HEADERS(id3tag.h,, [
 AC_MSG_ERROR([id3tag.h not found... try --with-id3tag=dir])])

oldcflags=$CFLAGS

CFLAGS="$CFLAGS -lz"
AC_CHECK_LIB(id3tag,id3_file_open,,echo "no libid3tag. Try --with-id3tag=dir";exit)

if test "$STATIC_LIBS" != "no"; then
  LIBS="${LIBS} ${STATIC_LIBS}/libid3tag.a -lz"
else
  LIBS="${LIBS} -lid3tag -lz"
fi
CFLAGS=$oldcflags

if test x$use_gdbm = xtrue; then
  AC_CHECK_HEADERS(gdbm.h,, [
   AC_MSG_ERROR([gdbm.h not found... Must have gdbm headers installed])])
  AC_CHECK_LIB(gdbm,gdbm_open,,echo "Must have gdbm libraries installed";exit)

  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libgdbm.a"
  else
    LIBS="${LIBS} -lgdbm"
  fi
fi

if test x$db_sqlite = xtrue; then
  AC_CHECK_HEADERS(sqlite.h,, [
   AC_MSG_ERROR([sqlite.h not found... Must have sqlite headers installed])])
  AC_CHECK_LIB(sqlite,sqlite_open,,echo "Must have sqlite libraries installed";exit)

  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libsqlite.a"
  else
    LIBS="${LIBS} -lsqlite"
  fi
fi

if test x$db_sqlite3 = xtrue; then
  AC_CHECK_HEADERS(sqlite3.h,, [
   AC_MSG_ERROR([sqlite3.h not found... Must have sqlite3 headers installed])])
  AC_CHECK_LIB(sqlite3,sqlite3_open,,echo "Must have sqlite3 libraries installed";exit)

  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libsqlite3.a"
  else
    LIBS="${LIBS} -lsqlite3"
  fi
fi


if test x$use_oggvorbis = xtrue; then
  AC_CHECK_HEADERS(ogg/ogg.h,, [
   AC_MSG_ERROR([ogg/ogg.h not found... Must have libogg installed for Ogg/Vorbis support])])
  AC_CHECK_LIB(ogg,ogg_sync_init,,echo "Must have libogg for Ogg/Vorbis support";exit)

  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libogg.a"
  else
    LIBS="${LIBS} -logg"
  fi

  AC_CHECK_HEADERS(vorbis/codec.h,, [
   AC_MSG_ERROR([vorbis/codec.h not found... Must have libvorbis installed for Ogg/Vorbis support])])
  AC_CHECK_LIB(vorbis,vorbis_info_init,,echo "Must have libvorbis for Ogg/Vorbis support";exit)

  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libvorbis.a"
  else
    LIBS="${LIBS} -lvorbis"
  fi

  AC_CHECK_LIB(vorbisfile,ov_open,,echo "Must have libvorbisfile for Ogg/Vorbis support";exit)
  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libvorbisfile.a"
  else
    LIBS="${LIBS} -lvorbisfile"
  fi
fi

if test x$use_flac = xtrue; then
  AC_CHECK_HEADERS(FLAC/metadata.h,, [
   AC_MSG_ERROR([FLAC/metadata.h not found... Must have libFLAC installed for FLAC support])])
  AC_CHECK_LIB(FLAC,FLAC__metadata_chain_read,,echo "Must have libFLAC for FLAC support";exit)

  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libFLAC.a"
  else
    LIBS="${LIBS} -lFLAC"
  fi
fi

if test x$use_musepack = xtrue; then
  AC_PATH_PROG(TAGLIB_CONFIG, taglib-config, no)
  AC_CHECK_HEADERS(taglib/tag_c.h,, [
   AC_MSG_ERROR([taglib/tag_c.h not found... TagLib must be installed for Musepack support])])
  if test "x$TAGLIB_CONFIG" = "xno" ; then
    AC_MSG_ERROR(['TagLib must be installed for Musepack support'])
  fi
dnl  if test ! -e "`taglib-config --prefix`/lib/libtag_c.so.0"; then
dnl        AC_MSG_ERROR(['Taglib C bindings are not installed'])
dnl  fi

  if test x"$STATIC_LIBS" != x"no"; then
    LIBS="${LIBS} ${STATIC_LIBS}/libtag_c.a"
  else
    LIBS="${LIBS} -ltag_c"
  fi
fi

AC_REPLACE_FUNCS(strcasestr)
AC_REPLACE_FUNCS(strsep)
AC_CHECK_FUNCS(atoll)

dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h syslog.h unistd.h \
	sys/filio.h termio.h)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_TIME

dnl Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_FUNC_SETPGRP
AC_TYPE_SIGNAL
AC_CHECK_FUNCS(select socket strdup strerror)

dnl check to see if we need -lsocket (solaris)

V_NETLIBS=""
AC_CHECK_LIB(socket,socket,V_NETLIBS="-lsocket $V_NETLIBS",,)

AC_SUBST(V_NETLIBS)

AC_OUTPUT(src/Makefile admin-root/Makefile admin-root/lib-js/Makefile admin-root/lib-js/script.aculo.us/Makefile contrib/Makefile debian/Makefile Makefile)