#  FLAC - Free Lossless Audio Codec
#  Copyright (C) 2001  Josh Coalson
#
#  This program is part of FLAC; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 2
#  of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

# NOTE that for many of the AM_CONDITIONALs we use the prefix FLaC__
# instead of FLAC__ since autoconf triggers off 'AC_' in strings

AC_INIT(src/flac/main.c)
AM_INIT_AUTOMAKE(flac, 1.0.2)

# We need two libtools, one that builds both shared and static, and
# one that builds only static.  This is because the resulting libtool
# does not allow us to choose which to build at runtime.
AM_PROG_LIBTOOL
sed -e 's/^build_old_libs=yes/build_old_libs=no/' libtool > libtool-disable-static
chmod +x libtool-disable-static

AC_PROG_MAKE_SET

AC_CANONICAL_HOST
case $host_cpu in
	i*86)	cpu_ia32=true ; AC_DEFINE(FLAC__CPU_IA32) ;;
	powerpc)	cpu_ppc=true ; AC_DEFINE(FLAC__CPU_PPC) ;;
	sparc)	cpu_sparc=true ; AC_DEFINE(FLAC__CPU_SPARC) ;;
esac
AM_CONDITIONAL(FLaC__CPU_IA32, test x$cpu_ia32 = xtrue)
AM_CONDITIONAL(FLaC__CPU_PPC, test x$cpu_ppc = xtrue)
AM_CONDITIONAL(FLaC__CPU_SPARC, test x$cpu_sparc = xtrue)
case "$host" in
	i[[3-6]]86-*-openbsd*) OBJ_FORMAT=aoutb ;;
	*) OBJ_FORMAT=elf ;;
esac
AC_SUBST(OBJ_FORMAT)

if test x$cpu_ia32 = xtrue ; then
AC_DEFINE(FLAC__ALIGN_MALLOC_DATA)
fi

AC_ARG_ENABLE(asm-optimizations, [  --disable-asm-optimizations    Don't use any assembly optimization routines], asm_opt=no, asm_opt=yes)
AM_CONDITIONAL(FLaC__NO_ASM, test x$asm_opt = xno)
if test x$asm_opt = xno ; then
AC_DEFINE(FLAC__NO_ASM)
fi

AC_ARG_ENABLE(debug,
[  --enable-debug                 Turn on debugging],
[case "${enableval}" in
	yes) debug=true ;;
	no)  debug=false ;;
	*) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
esac],[debug=false])
AM_CONDITIONAL(DEBUG, test x$debug = xtrue)

AC_ARG_ENABLE(sse,
[  --enable-sse                   Enable SSE support by asserting that the OS supports SSE instructions],
[case "${enableval}" in
	yes) sse_os=true ;;
	no)  sse_os=false ;;
	*) AC_MSG_ERROR(bad value ${enableval} for --enable-sse) ;;
esac],[sse_os=false])
AM_CONDITIONAL(FLaC__SSE_OS, test x$sse_os = xtrue)
if test x$sse_os = xtrue ; then
AC_DEFINE(FLAC__SSE_OS)
fi

AC_ARG_ENABLE(3dnow,
[  --enable-3dnow                 Enable 3DNOW! support],
[case "${enableval}" in
	yes) use_3dnow=true ;;
	no)  use_3dnow=false ;;
	*) AC_MSG_ERROR(bad value ${enableval} for --enable-3dnow) ;;
esac],[use_3dnow=false])
AM_CONDITIONAL(FLaC__USE_3DNOW, test x$use_3dnow = xtrue)
if test x$use_3dnow = xtrue ; then
AC_DEFINE(FLAC__USE_3DNOW)
fi

AC_CHECK_LIB(ogg, ogg_stream_init,
             [LIBS="$LIBS -logg"; have_ogg=yes],
             [AC_MSG_WARN([*** Ogg development enviroment not installed - ogg support will not be built])])
AM_CONDITIONAL(FLaC__HAS_OGG, [test x$have_ogg = xyes])
if test x$have_ogg = xyes ; then
AC_DEFINE(FLAC__HAS_OGG)
fi

AM_PATH_XMMS(0.9.5.1, , AC_MSG_WARN([*** XMMS >= 0.9.5.1 not installed - xmms support will not be built]))
AM_CONDITIONAL(FLaC__HAS_XMMS, test x$XMMS_INPUT_PLUGIN_DIR != x)

AC_CHECK_PROGS(NASM, nasm)
AM_CONDITIONAL(FLaC__HAS_NASM, test -n "$NASM")
if test -n "$NASM" ; then
AC_DEFINE(FLAC__HAS_NASM)
fi

dnl Check for type sizes

AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)

case 2 in
	$ac_cv_sizeof_short) FLaC__SIZE16="short" ; FLaC__USIZE16="unsigned short";;
	$ac_cv_sizeof_int) FLaC__SIZE16="int" ; FLaC__USIZE16="unsigned int";;
esac

case 4 in
	$ac_cv_sizeof_short) FLaC__SIZE32="short" ; FLaC__USIZE32="unsigned short";;
	$ac_cv_sizeof_int) FLaC__SIZE32="int" ; FLaC__USIZE32="unsigned int";;
	$ac_cv_sizeof_long) FLaC__SIZE32="long" ; FLaC__USIZE32="unsigned long";;
esac

case 8 in
	$ac_cv_sizeof_int) FLaC__SIZE64="int" ; FLaC__USIZE64="unsigned int";;
	$ac_cv_sizeof_long) FLaC__SIZE64="long" ; FLaC__USIZE64="unsigned long";;
	$ac_cv_sizeof_long_long) FLaC__SIZE64="long long" ; FLaC__USIZE64="unsigned long long";;
esac

if test -z "$FLaC__SIZE16"; then
	AC_MSG_ERROR(No 16 bit type found on this platform!)
fi
if test -z "$FLaC__USIZE16"; then
	AC_MSG_ERROR(No unsigned 16 bit type found on this platform!)
fi
if test -z "$FLaC__SIZE32"; then
	AC_MSG_ERROR(No 32 bit type found on this platform!)
fi
if test -z "$FLaC__USIZE32"; then
	AC_MSG_ERROR(No unsigned 32 bit type found on this platform!)
fi
if test -z "$FLaC__SIZE64"; then
	AC_MSG_WARN(No 64 bit type found on this platform!)
fi
if test -z "$FLaC__USIZE64"; then
	AC_MSG_ERROR(No unsigned 64 bit type found on this platform!)
fi

AC_SUBST(FLaC__SIZE16)
AC_SUBST(FLaC__USIZE16)
AC_SUBST(FLaC__SIZE32)
AC_SUBST(FLaC__USIZE32)
AC_SUBST(FLaC__SIZE64)
AC_SUBST(FLaC__USIZE64)

SAVE_CFLAGS="$CFLAGS"
CFLAGS='-I$(top_builddir) -I$(srcdir)/include -I $(top_srcdir)/include -Wall -W'
if test x$debug = xtrue; then
	CFLAGS="$CFLAGS -g -O0 -DDEBUG"
else
	CFLAGS="$CFLAGS -O3 -DNDEBUG"
	if test x$GCC = xyes; then
		CFLAGS="$CFLAGS -fomit-frame-pointer -funroll-loops -finline-functions -Winline -DFLaC__INLINE=__inline__"
	fi
fi
CFLAGS="$CFLAGS $SAVE_CFLAGS"

AC_OUTPUT(	Makefile	\
	src/Makefile	\
	src/libFLAC/Makefile	\
	src/libFLAC/ia32/Makefile	\
	src/libFLAC/include/Makefile	\
	src/libFLAC/include/private/Makefile	\
	src/libFLAC/include/protected/Makefile	\
	src/flac/Makefile	\
	src/metaflac/Makefile	\
	src/plugin_xmms/Makefile	\
	src/test_streams/Makefile	\
	src/test_unit/Makefile	\
	include/Makefile \
	include/FLAC/Makefile \
	include/FLAC/ordinals.h \
	doc/Makefile \
	doc/images/Makefile \
	doc/ru/Makefile \
	man/Makefile \
	test/Makefile	\
)
