#  FLAC - Free Lossless Audio Codec
#  Copyright (C) 2001,2002,2003  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.5_beta2)

# Don't automagically regenerate autoconf/automake generated files unless
# explicitly requested.  Eases autobuilding -mdz
AM_MAINTAINER_MODE

# Function to configure paths for id3lib; search for 'meat' to get to the end.
# adapted from ogg.m4
# This is here until id3lib comes with an equivalent.
# It is inline with configure.in instead of a separate file as a courtesy to users unaware of the -I flag to aclocal
dnl LOCAL__PATH_ID3LIB([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
dnl Test for libid3, and define ID3LIB_CFLAGS and ID3LIB_LIBS
dnl
AC_DEFUN(LOCAL__PATH_ID3LIB,
[dnl
dnl Get the cflags and libraries
dnl
AC_ARG_WITH(id3lib,[  --with-id3lib=PFX   Prefix where libid3 is installed (optional)], id3lib_prefix="$withval", id3lib_prefix="")
AC_ARG_WITH(id3lib-libraries,[  --with-id3lib-libraries=DIR   Directory where libid3 library is installed (optional)], id3lib_libraries="$withval", id3lib_libraries="")
AC_ARG_WITH(id3lib-includes,[  --with-id3lib-includes=DIR   Directory where libid3 header files are installed (optional)], id3lib_includes="$withval", id3lib_includes="")
AC_ARG_ENABLE(id3libtest, [  --disable-id3libtest       Do not try to compile and run a test id3lib program],, enable_id3libtest=yes)

	if test "x$id3lib_libraries" != "x" ; then
		ID3LIB_LIBS="-L$id3lib_libraries"
	elif test "x$id3lib_prefix" != "x" ; then
		ID3LIB_LIBS="-L$id3lib_prefix/lib"
	elif test "x$prefix" != "xNONE" ; then
		ID3LIB_LIBS="-L$prefix/lib"
	fi

	ID3LIB_LIBS="$ID3LIB_LIBS -lid3"

	if test "x$id3lib_includes" != "x" ; then
		ID3LIB_CFLAGS="-I$id3lib_includes"
	elif test "x$id3lib_prefix" != "x" ; then
		ID3LIB_CFLAGS="-I$id3lib_prefix/include"
	elif test "$prefix" != "xNONE"; then
		ID3LIB_CFLAGS="-I$prefix/include"
	fi

	AC_MSG_CHECKING(for id3lib)


	if test "x$enable_id3libtest" = "xyes" ; then
		id3lib_found=""
	else
		id3lib_found="yes"
	fi
	dnl There is some confusion over what libraries libid3 needs
	dnl so we must be pessimistic and try all permutations:
	dnl "-lid3" "-lid3 -lstdc++" "-lid3 -lz" "-lid3 -lz -lstdc++"
	for xtra_stdcpp in "" " -lstdc++" ; do
		for xtra_z in "" " -lz" ; do
			if test "x$id3lib_found" = "x" ; then
				ac_save_CFLAGS="$CFLAGS"
				ac_save_LIBS="$LIBS"
				CFLAGS="$CFLAGS $ID3LIB_CFLAGS"
				LIBS="$LIBS $ID3LIB_LIBS$xtra_stdcpp$xtra_z"
				rm -f conf.id3libtest
				AC_TRY_RUN([
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <id3.h>
int main () { system("touch conf.id3libtest"); return 0; }
], id3lib_found=yes,,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
				CFLAGS="$ac_save_CFLAGS"
				LIBS="$ac_save_LIBS"
			fi
			if test "x$id3lib_found" = "xyes" ; then
				ID3LIB_LIBS="$ID3LIB_LIBS$xtra_stdcpp$xtra_z"
			fi
		done
	done

	if test "x$id3lib_found" = "xyes" ; then
		AC_MSG_RESULT(yes)
		ifelse([$1], , :, [$1])
	else
		AC_MSG_RESULT(no)
		if test -f conf.id3libtest ; then
			:
		else
			echo "*** Could not run id3lib test program, checking why..."
			CFLAGS="$CFLAGS $ID3LIB_CFLAGS"
			LIBS="$LIBS $ID3LIB_LIBS"
			AC_TRY_LINK([
#include <stdio.h>
#include <id3.h>
],     [ return 0; ],
			[ echo "*** The test program compiled, but did not run. This usually means"
			echo "*** that the run-time linker is not finding id3lib or finding the wrong"
			echo "*** version of id3lib. If it is not finding id3lib, you'll need to set your"
			echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
			echo "*** to the installed location  Also, make sure you have run ldconfig if that"
			echo "*** is required on your system"
			echo "***"
			echo "*** If you have an old version installed, it is best to remove it, although"
			echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
			[ echo "*** The test program failed to compile or link. See the file config.log for the"
			echo "*** exact error that occured. This usually means id3lib was incorrectly installed"
			echo "*** or that you have moved id3lib since it was installed." ])
			CFLAGS="$ac_save_CFLAGS"
			LIBS="$ac_save_LIBS"
		fi
		ID3LIB_CFLAGS=""
		ID3LIB_LIBS=""
		ifelse([$2], , :, [$2])
	fi
	AC_SUBST(ID3LIB_CFLAGS)
	AC_SUBST(ID3LIB_LIBS)
	rm -f conf.id3libtest
])


dnl Now the meat of configure.in:

# 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_CXX
AC_PROG_MAKE_SET

dnl check for getopt in standard library
dnl AC_CHECK_FUNCS(getopt_long , , [LIBOBJS="$LIBOBJS getopt.o getopt1.o"] )
AC_CHECK_FUNCS(getopt_long, [], [])

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,
[  --disable-3dnow                Disable 3DNOW! optimizations],
[case "${enableval}" in
	yes) use_3dnow=true ;;
	no)  use_3dnow=false ;;
	*) AC_MSG_ERROR(bad value ${enableval} for --enable-3dnow) ;;
esac],[use_3dnow=true])
AM_CONDITIONAL(FLaC__USE_3DNOW, test x$use_3dnow = xtrue)
if test x$use_3dnow = xtrue ; then
AC_DEFINE(FLAC__USE_3DNOW)
fi

AC_ARG_ENABLE(local-xmms-plugin,
[  --enable-local-xmms-plugin     Install XMMS plugin to ~/.xmms/Plugins instead of system location],
[case "${enableval}" in
	yes) install_xmms_plugin_locally=true ;;
	no)  install_xmms_plugin_locally=false ;;
	*) AC_MSG_ERROR(bad value ${enableval} for --enable-local-xmms-plugin) ;;
esac],[install_xmms_plugin_locally=false])
AM_CONDITIONAL(FLaC__INSTALL_XMMS_PLUGIN_LOCALLY, test x$install_xmms_plugin_locally = xtrue)

AC_ARG_ENABLE(exhaustive-tests,
[  --enable-exhaustive-tests      Enable exhaustive testing],
[case "${enableval}" in
	yes) exhaustive_tests=true ;;
	no)  exhaustive_tests=false ;;
	*) AC_MSG_ERROR(bad value ${enableval} for --enable-exhaustive-tests) ;;
esac],[exhaustive_tests=false])
AM_CONDITIONAL(FLaC__EXHAUSTIVE_TESTS, test x$exhaustive_tests = xtrue)
if test x$exhaustive_tests = xtrue ; then
AC_DEFINE(FLAC__EXHAUSTIVE_TESTS)
fi

AC_ARG_ENABLE(valgrind-testing,
[  --enable-valgrind-testing      Run all tests inside Valgrind],
[case "${enableval}" in
	yes) valgrind_testing=true ;;
	no)  valgrind_testing=false ;;
	*) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind-testing) ;;
esac],[valgrind_testing=false])
AM_CONDITIONAL(FLaC__VALGRIND_TESTING, test x$valgrind_testing = xtrue)
if test x$valgrind_testing = xtrue ; then
AC_DEFINE(FLAC__VALGRIND_TESTING)
fi

dnl check for ogg library
XIPH_PATH_OGG(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)

dnl check for i18n(internationalization); these are from libiconv/gettext
AM_ICONV
AM_LANGINFO_CODESET

dnl check for id3lib library
dnl LOCAL__PATH_ID3LIB is defined by us, and will be until such time as id3lib supplies one
LOCAL__PATH_ID3LIB(have_id3lib=yes, AC_MSG_WARN([*** id3lib not found - id3v2 support will not be built]))
AM_CONDITIONAL(FLaC__HAS_ID3LIB, [test x$have_id3lib = xyes])
if test x$have_id3lib = xyes ; then
AC_DEFINE(FLAC__HAS_ID3LIB)

dnl expected id3lib version for cross compiling
ID3LIB_MAJOR=3
ID3LIB_MINOR=8
ID3LIB_PATCH=0

CFLAGS_save_blah_blah_blah=$CFLAGS
CFLAGS="$ID3LIB_CFLAGS $CFLAGS"
LIBS_save_blah_blah_blah=$LIBS
LIBS="$ID3LIB_LIBS $LIBS"
AC_MSG_CHECKING(for id3lib version)
      AC_TRY_RUN([
#include <id3.h>
#include <stdio.h>
int
main ()
{
	FILE *output;
	output=fopen("conftest.id3","w");
	fprintf(output,"ID3LIB_MAJOR=%d\nID3LIB_MINOR=%d\nID3LIB_PATCH=%d\n",ID3LIB_MAJOR_VERSION,ID3LIB_MINOR_VERSION,ID3LIB_PATCH_VERSION);
	fclose(output);
	exit(0);
}
], . ./conftest.id3; echo "${ID3LIB_MAJOR}.${ID3LIB_MINOR}.${ID3LIB_PATCH}", AC_MSG_WARN(could not determine id3lib version),[echo $ac_n "cross compiling; assuming ${ID3LIB_MAJOR}.${ID3LIB_MINOR}.${ID3LIB_PATCH} $ac_c"])
AC_DEFINE_UNQUOTED(ID3LIB_MAJOR, $ID3LIB_MAJOR)
AC_DEFINE_UNQUOTED(ID3LIB_MINOR, $ID3LIB_MINOR)
AC_DEFINE_UNQUOTED(ID3LIB_PATCH, $ID3LIB_PATCH)
CFLAGS=$CFLAGS_save_blah_blah_blah
LIBS=$LIBS_save_blah_blah_blah
fi

AC_CHECK_PROGS(DOXYGEN, doxygen)
AM_CONDITIONAL(FLaC__HAS_DOXYGEN, test -n "$DOXYGEN")
if test -n "$DOXYGEN" ; then
AC_DEFINE(FLAC__HAS_DOXYGEN)
fi

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)

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

AM_CONFIG_HEADER(config.h)
AH_TEMPLATE(FLAC__ALIGN_MALLOC_DATA,  [define to align allocated memory on 32-byte boundaries])
AH_TEMPLATE(FLAC__CPU_IA32,  [define if building for ia32/i386])
AH_TEMPLATE(FLAC__CPU_PPC,  [define if building for PowerPC])
AH_TEMPLATE(FLAC__CPU_SPARC,  [define if building for SPARC])
AH_TEMPLATE(FLAC__EXHAUSTIVE_TESTS,  [define to run even more tests])
AH_TEMPLATE(FLAC__VALGRIND_TESTING,  [define to enable use of Valgrind in testers])
AH_TEMPLATE(FLAC__HAS_DOXYGEN,  [define if you have Doxygen])
AH_TEMPLATE(FLAC__HAS_ID3LIB,  [define if you have the id3lib library])
AH_TEMPLATE(FLAC__HAS_NASM,  [define if you have the NASM assembler])
AH_TEMPLATE(FLAC__HAS_OGG,  [define if you have the ogg library])
AH_TEMPLATE(FLAC__NO_ASM,  [define to disable use of assembly code])
AH_TEMPLATE(FLAC__SSE_OS,  [define if your operating system supports SSE instructions])
AH_TEMPLATE(FLAC__USE_3DNOW,  [define to enable use of 3Dnow! instructions])
AH_TEMPLATE(ID3LIB_MAJOR,  [define to major version number of id3lib])
AH_TEMPLATE(ID3LIB_MINOR,  [define to minor version number of id3lib])
AH_TEMPLATE(ID3LIB_PATCH,  [define to patch level of id3lib])

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/libFLAC++/Makefile \
	src/libOggFLAC/Makefile \
	src/libOggFLAC/include/Makefile \
	src/libOggFLAC/include/protected/Makefile \
	src/libOggFLAC++/Makefile \
	src/flac/Makefile \
	src/metaflac/Makefile \
	src/monkeys_audio_utilities/Makefile \
	src/monkeys_audio_utilities/flac_mac/Makefile \
	src/monkeys_audio_utilities/flac_ren/Makefile \
	src/plugin_common/Makefile \
	src/plugin_common/include/Makefile \
	src/plugin_common/include/private/Makefile \
	src/plugin_winamp2/Makefile \
	src/plugin_winamp2/include/Makefile \
	src/plugin_winamp2/include/winamp2/Makefile \
	src/plugin_winamp3/Makefile \
	src/plugin_xmms/Makefile \
	src/share/Makefile \
	src/share/gain_analysis/Makefile \
	src/share/getopt/Makefile \
	src/share/grabbag/Makefile \
	src/share/utf8/Makefile \
	src/test_grabbag/Makefile \
	src/test_grabbag/cuesheet/Makefile \
	src/test_libFLAC/Makefile \
	src/test_libFLAC++/Makefile \
	src/test_libOggFLAC/Makefile \
	src/test_libOggFLAC++/Makefile \
	src/test_streams/Makefile \
	include/Makefile \
	include/FLAC/Makefile \
	include/FLAC/ordinals.h \
	include/FLAC++/Makefile \
	include/OggFLAC/Makefile \
	include/OggFLAC++/Makefile \
	include/share/Makefile \
	include/share/grabbag/Makefile \
	doc/Makefile \
	doc/html/Makefile \
	doc/html/images/Makefile \
	doc/html/ru/Makefile \
	man/Makefile \
	test/Makefile \
	test/cuesheets/Makefile \
	build/Makefile \
	obj/Makefile \
	obj/debug/Makefile \
	obj/debug/bin/Makefile \
	obj/debug/lib/Makefile \
	obj/release/Makefile \
	obj/release/bin/Makefile \
	obj/release/lib/Makefile \
	flac.pbproj/Makefile \
)
