dnl
dnl libresample configure.in script
dnl
dnl Dominic Mazzoni
dnl

dnl Require autoconf >= 2.13
AC_PREREQ(2.13)

dnl Init autoconf and make sure configure is being called
dnl from the right directory
AC_INIT([src/resample.c])

dnl Checks for programs.
AC_PROG_CC
AC_PROG_RANLIB

AC_CHECK_TOOL(AR, ar, no)
if [[ $AR = "no" ]] ; then
    AC_MSG_ERROR("Could not find ar - needed to create a library");
fi

AC_PROG_INSTALL
AC_PROG_MKDIR_P

AC_SUBST(TARGETS)
TARGETS="libresample.a tests/testresample"

AC_CHECK_LIB(sndfile, sf_open, have_libsndfile=yes, have_libsndfile=no)

if [[ $have_libsndfile = "yes" ]] ; then
	TARGETS="$TARGETS tests/resample-sndfile"
fi

AC_CHECK_LIB(samplerate, src_simple, have_libsamplerate=yes, have_libsamplerate=no)

if [[ $have_libsamplerate = "yes" ]] ; then
	TARGETS="$TARGETS tests/compareresample"
fi

AC_CHECK_HEADERS(inttypes.h)

AC_CONFIG_HEADER(src/config.h:src/configtemplate.h)
AC_OUTPUT([Makefile])

echo ""

if [[ $have_libsamplerate = "yes" ]] ; then
	echo "Configured to build tests/resample-sndfile using libsndfile"
	echo ""
else
	echo "Could not find libsndfile - needed if you want to"
	echo "compile tests/resample-sndfile"
	echo ""
fi

if [[ $have_libsamplerate = "yes" ]] ; then
	echo "Configured to build tests/compareresample to compare against"
   echo "Erik de Castro Lopo's libsamplerate library."
	echo ""
else
	echo "Could not find libsamplerate - only needed if you want to"
	echo "compile tests/compareresample to compare their performance."
	echo ""
fi

echo "Type 'configure --help' to see options."
echo ""
echo "Type 'make' to build libresample and tests."
