#!/bin/sh

. scripts/configure.sh || exit 1

VERSION="2.0.4"

check_cflags()
{
	check_cc_flag -std=gnu99 -pipe -Wall -Wshadow -Wcast-align -Wpointer-arith \
		-Wwrite-strings -Wundef -Wmissing-prototypes -Wredundant-decls

	for i in -Wdeclaration-after-statement -Wold-style-definition -Wno-pointer-sign
	do
		check_cc_flag $i
	done
	return 0
}

check_ncurses()
{
	if check_library NCURSES "" -lncursesw
	then
		widechars=y
		return 0
	fi
	if check_library NCURSES "" -lncurses || check_library NCURSES "" -lcurses
	then
		widechars=n
		msg_error "Your ncurses does not support wide characters!"
		msg_error "Install ncursesw if you need wide character support,"
		msg_error "you can ignore this warning otherwise."
		return 0
	fi
	return 1
}

check_mpc()
{
	check_library MPC "" "-lmpcdec"
	return $?
}

check_flac()
{
	check_library FLAC "" "-lFLAC -lm"
	return $?
}

check_mad()
{
	pkg_config MAD "mad" "" "-lmad -lm"
	return $?
}

check_modplug()
{
	pkg_config MODPLUG "libmodplug" "-I/usr/include/libmodplug" "-lmodplug -lstdc++ -lm"
	return $?
}

check_vorbis()
{
	if test "$CONFIG_TREMOR" = y
	then
		pkg_config VORBIS "vobisidec" "" "-lvorbisidec -lm"
		return $?
	else
		pkg_config VORBIS "vorbisfile" "" "-lvorbisfile -lvorbis -lm -logg"
		return $?
	fi
}

check_alsa()
{
	# the alsa.pc file should be always available
	pkg_config ALSA "alsa >= 1.0.11"
	return $?
}

check_ao()
{
	pkg_config AO "ao" "" "-lao"
	return $?
}

check_arts()
{
	app_config ARTS artsc-config
	return $?
}

check_oss()
{
	case `uname -s` in
		Linux|FreeBSD)
			;;
		*BSD)
			check_library OSS "" "-lossaudio"
			return $?
			;;
		*)
			# unknown
			;;
	esac

	OSS_CFLAGS=""
	OSS_LIBS=""
	msg_checking "for header <sys/soundcard.h>"
	if test -f /usr/include/sys/soundcard.h
	then
		msg_result "yes"
		makefile_vars OSS_CFLAGS OSS_LIBS
		return 0
	else
		msg_result "no"
	fi
	return 1
}

check_sun()
{
	msg_checking "for header <sys/audioio.h>"
	if test -f /usr/include/sys/audioio.h
	then
		msg_result "yes"
		return 0
	else
		msg_result "no"
		return 1
	fi
}

# defaults
prefix=/usr/local
DEBUG=1
CONFIG_TREMOR=n
# unset CONFIG_* variables: if check succeeds 'y', otherwise 'n'

USAGE="
Options:
  prefix          Installation prefix [$prefix]
  bindir          User executables [\$prefix/bin]
  datadir         Read-only data [\$prefix/share]
  libdir          Libraries [\$prefix/lib]
  mandir          Man pages [\$datadir/man]
  DEBUG           Debugging level (0-2) [$DEBUG]

Optional Features: y/n
  CONFIG_FLAC     FLAC (Free Lossless Audio Codec) support [auto]
  CONFIG_MAD      MPEG Audio Decoder (libmad) support [auto]
  CONFIG_MODPLUG  libmodplug (mod, x3m, ...) support [auto]
  CONFIG_MPC      libmpcdec (Musepack .mpc) support [auto]
  CONFIG_VORBIS   Ogg/Vorbis support [auto]
  CONFIG_TREMOR   Use Tremor as Ogg/Vorbis input plugin [n]
  CONFIG_WAV      WAV support [y]
  CONFIG_ALSA     ALSA support [auto]
  CONFIG_AO       Libao cross-platform audio library [auto]
  CONFIG_ARTS     ARTS support [auto]
  CONFIG_OSS      Open Sound System support [auto]
  CONFIG_SUN      Sun Audio support [auto]

Also many standard variables like CC are recognized."

parse_command_line "$@"

case $DEBUG in
[0-2])
	;;
*)
	die "DEBUG must be 0-2"
	;;
esac

var_default bindir "${prefix}/bin"
var_default datadir "${prefix}/share"
var_default libdir "${prefix}/lib"
var_default mandir "${datadir}/man"

check check_cc
check check_cflags
check check_cc_depgen
check check_endianness
check check_dl
check check_pthread
check check_ncurses
check check_iconv

check check_flac    CONFIG_FLAC
check check_mad     CONFIG_MAD
check check_modplug CONFIG_MODPLUG
check check_mpc     CONFIG_MPC
check check_vorbis  CONFIG_VORBIS
# nothing to check, just validate the variable values
check true          CONFIG_TREMOR
check true          CONFIG_WAV
check check_alsa    CONFIG_ALSA
check check_ao      CONFIG_AO
check check_arts    CONFIG_ARTS
check check_oss     CONFIG_OSS
check check_sun     CONFIG_SUN

test "$WORDS_BIGENDIAN" = y && CFLAGS="${CFLAGS} -DWORDS_BIGENDIAN"

DATADIR="$datadir"
LIBDIR="$libdir"

config_header config/version.h VERSION
config_header config/datadir.h DATADIR
config_header config/libdir.h LIBDIR
config_header config/debug.h DEBUG
config_header config/tremor.h CONFIG_TREMOR

makefile_vars VERSION bindir datadir libdir mandir
makefile_vars CONFIG_FLAC CONFIG_MAD CONFIG_MODPLUG CONFIG_MPC CONFIG_VORBIS CONFIG_WAV
makefile_vars CONFIG_ALSA CONFIG_AO CONFIG_ARTS CONFIG_OSS CONFIG_SUN

generate_config_mk
